Ansible技能解释:
Ansible Server:192.168.200.100(honor01)
Client:192.168.200.110(honor2)、192.168.200.130(zabbix_server)
熟悉自动化运维工具 Ansible,熟悉ansible的常用模块和ansible-playbook批量部署。
**
熟悉自动化运维工具 Ansible,熟悉常用的模块
1、ansible通过yum安装,通过ssh协议连接管理设备,修改hosts文件来组织设备,定义主机和分组。实际上定义分组是通过Inventory配置文件定义的。比如我定义了一个组,名叫messi。
2、ansible命令构成:
ansible 组名 -m 模块名 -a “执行的命令”
all:不写组名,直接写all也可以,代表/etc/ansible/hosts中的所有主机。即messi组。
--limit:后面加 –limit 表示指定组里某个ip运行命令,比如:
[root@docker-server2 ~]# ansible messi -m raw -a “yum clean all” --limit
192.168.200.130
--list-host或–list:列出某个组的所有主机列表
[root@docker-server2 ~]# ansible messi --list-host
3、Ansible的常用模块:
Command模块(默认就是用的这个);shell 模块:raw 模块:copy 模块:hostname 模块 yum 模块:service 模快;user模块;script模块;ping模块。
模块是ansible的工作单元。
Ping模块:检查组内机器是否存活
[root@docker-server2 ~]# ansible messi -m ping
Command模块和shell模块的区别是:
shell模块支持shell特性,比如管道、重定向等。Command模块不支持管道和重定向。
[root@docker-server2 ~]# ansible messi -m shell -a “ifconfig | grep ens32”
Command模块就不支持管道:
Raw和shell模块是类似的,都支持管道和重定向,但raw不依赖python,仅通过ssh实现。
Copy模块:
用来复制的。
参数:
src:源文件的路径 dest:目标目录 mode:权限 owner:属主 group:属组
例如:将messi组中主机的/etc/hosts文件拷贝到/tmp…下指定权限为777更该属主为crushlinux更改属组为root
ansible messi -m copy -a “src=/etc/hosts dest=/
tmp mode=777 owner=crushlinux group=root”
hostname模块:
更改主机名。
参数:
name: 主机名
例如:更改主机名为zzabbix
[root@docker-server2 ~]# ansible 192.168.200.130 -m hostname -a “name=zzabbix”
Yum模块
Name:程序包名
state=present | latest | absent
指明对程序包执行的操作:pressent 表示安装程序包, latest 表示安装最新版本的程序包,absent 表示卸载程序包
[root@docker-server2 ~]# ansible messi -m yum -a “name=dhcp state=present”
Service模块:
管理服务的
name: 被管理的服务名
state=started l stopped l restarted:动作包含启动关闭或重启enabled=yes|no: 表示是否设置该服务开机自启动
runlevel: 如果设定了enabled开机自启动,则要定义在哪些运行目标下自启动
开启所有messi组机器的httpd服务,并设置为开机自启动。
[root@docker-server2 ~]# ansible messi -m service -a “name=httpd state=s
tarted enabled=yes”
User模块:创建用户的
name:用户名称;state=present | absent present创建用户、absent删除用户;system=yes 是否为系统账号;uid用户uid;group:用户组;groups是用户的附加组;shell默认使用的shell;home:用户的家目录;password:用户的密码;comment:用户的注释信息。
remove=yes | no:当state=absent时,是否删除用户的家目录。
创建一个名为wx973的系统账号,uid是502用户,基本组是root,附加组是sshd,shell是/sbin/nologin,家目录是/home/user1 注释信息是测试用户。密码是123456。
Script模块:运行本地shell脚本的
ansible-playbook批量部署
playbook就是yaml配置文件,使用yaml语法。
Playbook类似于shell脚本,可以批量执行ansible命令,配置一系列任务。
写完yaml后,需要先用ansible-playbook –-syntax-check测试语法,然后用ansible-playbook -C测试。最后再ansible-playbook执行yaml文件
Playbook的核心元素:
1、- hosts: 对哪台主机操作
2、remote_user: root 以root身份执行
3、tasks: 任务列表,里面包含-name(任务名字)、需要用到的各种ansible模块、tags(任务标签)等。
4、handlers: 触发器,在某个特定的条件下才触发任务。
比如执行完sed命令的tasks之后,触发http重启的命令。
notify:给触发器起名字,当执行完tasks后会通知此handlers执行。
5、roles: 角色
Yaml语法:
ansible-playbook命令
检查yaml语法的命令:中间加:–syntax-check
[root@docker-server2 ~]# ansible-playbook --syntax-check /etc/ansible/
test.yaml
预测试命令:中间加:-C
ansible-playbook -C /etc/ansible/test.yaml
执行命令:
ansible-playbook /etc/ansible/test.yaml
列出yaml的任务:中间加:–list-tasks
列出执行的主机:中间加:–list-hosts
基于playbook部署nginx:
需要用到的东西:
1、在roles下创建一个nginx的角色集合,里面包含files、handlers、tasks、templates、var。当然roles里面可以有很多角色集合,比如nginx角色、mysql角色、tomcat角色等等。
每个角色的解释:
- files: 存放copy或script等模块调用的文件,比如源码包。
2.templates: 存放template模块查找所需要的模板文件的目录,如mysql配置文件等模板 - tasks: 任务存放目录
- handlers: 存放相关触发 执行器的目录
- vars: 变量存放的目录
每个角色目录下都应该至少有一个main.yaml文件。
调用角色:
2、定义一个总入口文件nginx.yaml 来调用nginx角色集
3、files: 存储由copy或script等模块调用的文件
files里面主要放的是源码包
4、handlers: 此目录中至少应该有一个名为main.yml的文件
handlers触发器作用是启动nginx
5、tasks:目录至少应该有一个名为main.yml的文件
-name指定任务名字;
yum、shell、copy、template这些都是调用的模块的名字
6、templates: 存储由template 模块调用的模板文本;
templates里面放的是nginx主配置文件的模板
7、vars: 此目录中至少应该有一个名为main.yml的文件
用于定义变量
[root@ansible ansible]# cat /etc/ansible/roles/ nginx/vars/ main.yaml
nginxport: "80"server name: “www.crushlinux.com”
8、其他:
meta:此目录中至少应该有一个名为main.yml的文件,定义当前角色的特殊设定及其依赖关系;其它的文件需要由main.yml进行“包含”调用; default:此目录中至少应该有一个名为main.yml的文件,用于设定默认变量;
9、测设部署
ansible-playbook -C /etc/ansible/nginx.yaml
ansible-playbook /etc/ansible/nginx.yaml