深入浅析Linux轻量级自动运维工具-Ansible

发布时间:2024-03-17
服务器
转自
linux轻量级自动运维工具-ansible浅析 – ~微风~ – 51cto技术博客
http://weiweidefeng.blog.51cto.com/1957995/1895261
ansible是什么?
ansible架构图
ansible特性
模块化:调用特定的模块,完成特定的任务;
基于python语言研发,由paramiko, pyyaml和jinja2三个核心库实现;
部署简单:agentless;
支持自定义模块,使用任意编程语言;
强大的playbook机制;
幂等性;
安装及程序环境:
程序:
ansible
ansible-playbook
ansible-doc
配置文件:
/etc/ansible/ansible.cfg
主机清单:
/etc/ansible/hosts
插件目录:
/usr/share/ansible_plugins/
安装ansible
安装依赖包
ansible命令的使用:
usage: ansible <host-pattern> [options]
常用选项:
-m mod_name
-a mod_args
配置host inventory:
/etc/ansible/hosts
[group_id]
host_pattern1
host_pattern2
示例:
首先对此文件进行备份操作,以防后面需要用到默认配置文件
进入到/etc/ansible/hosts文件,此处绿色光标以下的内容是没有用的,都是示例,可以删除掉,然后添加我们下面实验操作用到的主机。
添加一组websrvs服务器,以用于下面的测试
测试主机连通性
这里报错是因为实验用的主机交换其他两台主机的公钥/私钥的原因导致的
实验ssh免密码登陆设置
生成私钥和公钥ssh-keygen -t rsa -p \\\’\\\’
复制公钥文件问authorized_keys
把公钥传送到其他主机
在68的主机上面可以看见公钥已经传送过来了,并且确认文件的权限是否正确
重复以上操作把公钥发送给69的主机
然后重新执行ansible的ping模块命令查看该两台主机的连通性
可以发现此时已经成功,那么下面就开始介绍ansilbe的其他模块
最后记得利用ansible同步一下所有主机的时间,以免某主机的时间有错误,后面看日志起来会造成混乱
ansible模块:
获取模块列表:ansible-doc -l
获取指定模块的使用帮助:ansible-doc -s mod_name
常用模块:
ping模块:探测目标主机是否存活;
示例:测试所有的主机的连通性
command模块:在远程主机执行命令;
示例1:让所有主机同步时间
此处没有给出指定的-m command命令,是因为ansible的模块默认就是command
示例2:让每一台主机都执行uname -r命令
示例3:在主机上面都创建一个用户
查看两台主机是否已经创建该用户
查看用户信息:
帮这两个用户改密码,此处需要注意的是,虽然用下面的命令看似执行成功,但是当我们验证的时候,就会发现密码错误了,这是因为ansible的command模块并不支持管道等输出,所以下面介绍另外一个ansible的模块shell
shell模块:在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道等
注意:command和shell模块的核心参数直接为命令本身;而其它模块的参数通常为“key=value”格式;
示例:批量修改其他主机的特定用户的密码
此时可以发现已经可以登陆成功
copy模块:复制文件到远程主机
用法:
(1) 复制文件
-a src=\\\\\\\’#\\\\\\\’
(2) 给定内容生成文件
-a content= dest=
其它参数:mode, owner, group, …
示例:复制文件到其他主机
此处创建一个测试文件
复制文件到其他主机
下面红色的报错信息是,如果要传送文件,该主机的指定目录需要存在,如果不存在,就是提示错误
创建对应的目录
重新传送文件,已经没有错误提示,但是此处也可以看见,如果文件已经存在,则原文件会被覆盖掉,并且此处也没有任何提示覆盖文件的信息,所以操作的时候就需要注意了,以免覆盖掉重要的文件
验证文件
file模块:设置文件的属性
用法:
(1) 创建目录:
-a path= state=directory
(2) 创建链接文件:
-a path= src=\\\\\\\'#\\\\\\\' /p>
(3) 删除文件:
-a path= state=absent“
示例:修改文件的权限和属主
验证文件
示例:创建文件的软连接
验证文件
设置文件的状态为absent(即删除文件)
验证
fetch模块:从远程主机拿文件
示例:从10.1.156.69主机拿一个文件
当抓去一堆文件的时候,也会创建对应的ip地址的目录,以区分文件
cron模块:管理计划任务条目
用法:
-a minute=hour=day=month=weekday=job=name=user=state={present|absent}
示例:创建一个同步时间的计划任务,每5分钟同步一下服务器的时间
验证任务
示例:删除计划任务
验证
hostname模块:管理主机名
用法:
name=
示例:修改主机名
yum模块:使用yum命令完成程序包管理
用法:
-a
(1) name= state={present|latest}
(2) name= state=absent
示例:安装指定包
此实验,首先,确定主机的yum源是可用的,否则实验会失败
安装samba包
验证
删除samba安装包
已经没有安装的字眼了
service模块:服务管理
用法:
-a name=state=startedstoppedrestartedenabled=runlevel=
示例:开启主机的httpd服务
首先我们确认httpd服务是关闭的
开启httpd服务,并且设置为开机启动
验证,80端口已经开启
group模块:增加或删除组
用法:
-a name=state=system=gid=
示例:添加一个组
验证
删除组
验证
user模块:用户管理
使用格式:
name= : 创建的用户名
state= : present新增,absent删除
force= : 删除用户的时候删除家目录
system= : 创建系统用户
uid= : 指定uid
shell= : 指定shell
home= : 指定用户家目录
示例:增加一个系统用户
验证
删除用户
setup模块:收集主机里面的各种信息
示例:收集所有主机的信息
yaml:一种数据序列化工具的语言格式
yaml is a data serialization format designed for human readability and interaction with scripting languages.
数据结构:
key:value
– item1
– item2
– item3
例如{name:jerry, age:21}
playbook
核心元素:
tasks:任务,由模块定义的操作的列表;
variables:变量
templates:模板,即使用了模板语法的文本文件;
handlers:由特定条件触发的tasks;
roles:角色;
playbook的基础组件:
hosts:运行指定任务的目标主机;
remote_user:在远程主机以哪个用户身份执行;
sudo_user:非管理员需要拥有sudo权限;
tasks:任务列表
模块,模块参数:
格式:
(1) action: module arguments
(2) module: arguments
运行playbook,使用ansible-playbook命令
(1) 检测语法
ansible-playbook –syntax-check /path/to/playbook.yaml
(2) 测试运行
ansible-play
上一个:硬盘读取速度在硬盘哪里看,读取硬盘的数据线
下一个:已连接dota2协调服务器正在登陆怎么解决(已连接至dota 2游戏协调服务器正在登录中)

固态硬盘可以长时间开机吗,固态硬盘 启动时间一般多久
快递损坏赔偿计算方法?
帝亞草的种植与管理
高德地图电子狗怎么开,高德地图导航有电子狗功能吗
c1驾驶证换证流程是什么
玻璃器皿
交通事故财产保全申请书要载明哪些内容
nvidia显卡驱动安装不上的两种解决办法有哪些(nvidia显卡驱动安装不上的两种解决办法视频)
云服务器平台费用多少
为什么大多数明星只喝普洱茶