一、ansible的介绍
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。
二、ansible的优点
1.跨平台支持
2.人类可读自动化: ansible提供linux,Windows,unix和网络设备的无代理支持,适用于物理、虚拟、云和容器环境
3.完美描述应用:playbook
4.轻松管理版本控制:playbook是纯文本,可视作源代码(yaml代码)
5.支持动态清单
6.编排可与其他系统轻松集成:puppet、jenkins
7.基础架构即代码
8.减少人为错误
任务、play和playbook设计为具有幂等性,所以在运行playbook时,如果目标主机处于正确状态,则不会进行任何更改
三、安装 ansible
3.1在rhel8_node1上安装 ansible,充当控制节点
[root@workstation mnt]# yum install -y ansible-2.8.0-1.el8ae.noarch.rpm
[root@workstation mnt]# yum install -y sshpass-1.06-3.el8ae.x86_64.rpm
[root@workstation mnt]# yum install -y python3-jinja2-2.10.1-2.el8_0.noarch.rpm
3.2使用setup模块验证Python
[root@workstation ~]# ansible -m setup localhost | grep ansible_python_version
"ansible_python_version": "3.6.8",
四、部署ansible工具
4.1构建ansible清单
清单的含义——>定义ansible将要管理的一批主机
4.1.1静态清单和嵌套组
一台主机可以存在于多个主机组当中
4.1.2通过范围简化主机规格
可以通过指定主机名称或ip或字母和数字设置范围
语法[START:END]
如下所示
ip范围
172.25.[0:4].[0:254]
172.25.1.0/24
172.25.2.0/24
172.25.2.0/24
172.25.3.0/24
172.25.4.0/24
主机名范围
servers[01:10].example.com
servers01.example.com........servers10.example.com
不匹配servers1.example.com
字母范围
rhel8_nodeservers[01:10].example.com[a:c]
a.example.com....cexample.comc
4.1.3验证清单
默认清单位置:/etc/ansible/hosts 一般不使用默认的位置,都是新建
动态清单可以从开源社区的脚本中获得
5、ansible使用
5.1自定义清单
六、管理ansible配置文件
1.配置 ansible
配置文件:
1. /etc/ansible/ansible.cfg 基本配置文件,如果找不到其他配置文件,使用此文件;
2. ~/.ansible.cfg 如果存在此配置并且当前工作目录中也没有 ansible.cfg,此文件代/etc/ansible/ansible.cfg ;
3. 清单目录中的ansible.cfg存在 执行 ansible 命令的目录中如果有 ansible.cfg 优先使用此文件,不会去使用上面两个(推荐使用此文件,上面两个配置文件不常用);
显示使用的配置文件
2.管理配置文件中的设置
[root@workstation deploy-inventory]# vim ansible.cfg
3.使用sudo进行权利下方
[root@workstation deploy-inventory]# vim /etc/sudoers.d/student
七、运行临时命令
使用临时命令可以快速测试和更改ansible,无需编写 playbook
ansible host-pattern -m module [-a 'module arguments'] [-i inventory]
host:主机名称 -m:指定模块 -a: 模块参数 -i:清单路径
2.检查能否在受管主机上运行 python 模块
3.使用临时命令通过模块执行任务
[root@workstation ~]# ansible-doc -l 列出所有模块
[root@workstation ~]# ansible-doc ping 查看ping模块帮助文档
3.1ansible 模块
3.1.1文件模块:
-copy: 将本地文件复制到受管主机
-file: 设置文件的权限和其他属性
-lineinfile: 确保特定行是否在文件中
-synchronize:使用 rsync 同步内容
3.1.2系统模块:
-firewalld:使用 firewalld 管理任意端口和服务
-reboot:重启 -service:管理服务 -user:添加、删除和管理用户账户
3.1.2:Net Tools 模块:
-get_url:通过 http、https、或者 ftp 下载文件
-nmcli: 管理网络 -uri:与 web 服务交互
四、实验
4.1使用确保 student 用户存在于 servera.lab.example.com 且 uid 为 1000;
[root@workstation ~]# ansible -m user -a 'name=student uid=1000 state=present' servera.lab.example.com
[root@workstation ~]# ansible webservers -m command -a /usr/bin/hostname
[root@workstation ~]# ansible webservers -m command -a /usr/bin/hostname -o
使用-o参数一行显示输出,方便统计
注意:command 模块允许执行远程命令,但这些命令不是 shell 处理,所以无法访问 shell 环 境变量,所以不能执行重定向、传送等操作。
4.2使用 shell 和 command 的区别
4.3使用command模块执行临时命令
[root@workstation ~]# mkdir deploy-adhoc
[root@workstation deploy-adhoc]# cat inventory
[control_node]
serverb.lab.example.com
[web]
servera.lab.example.com
4.4使用 copy 模块
1.首先使用 student 用户,因为 student 用户没有写权限,所以会失败;
2.使用特权升级
注意:需在受管主机上进行权利下放(student用户增加权利)
[root@servera ~]# vim /etc/sudoers.d/student
[root@servera ~]# cat /etc/sudoers.d/student
student ALL=(ALL) NOPASSWD: ALL
[root@serverb ~]# vim /etc/sudoers.d/student
[root@serverb ~]# cat /etc/sudoers.d/student
student ALL=(ALL) NOPASSWD: ALL
[root@workstation ~]# cat /etc/sudoers.d/student
student ALL=(ALL) NOPASSWD: ALL
参数解释:-m:指定模块;-a:指定块命令,content=" "指定添加信息\n换行, dest=/etc/motd添加信息路径,-u:指定受管主机登录时的用户身份,-k:表示输入密码(已经做过免密登录的可以不适用此参数);–become:超级用户身份登录