目录
1. ansible简介
ansible是开源自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
2. ansible的优点
1.跨平台支持
2.人类可读自动化: ansible提供linux,Windows,unix和网络设备的无代理支持,适用于物理、虚拟、云和容器环境
3.完美描述应用:playbook
4.轻松管理版本控制:playbook是纯文本,可视作源代码
5.支持动态清单
6.编排可与其他系统轻松集成:puppet、jenkins
7.基础架构即代码
8.减少人为错误
3. 安装ansible
①:在安装ansible之前确保已经在实验主机上搭建epel仓库
②:安装ansible dnf install -y ansible
4. ansible 的部署
4.1 构建ansible清单
清单:定义了ansible将要管理的一批主机;
默认主机清单 :/etc/ansible/hosts
示例:
注意:一台主机可以存在于多个主机组
还可以通过范围简化主机规格
4.2. 列出主机
命令 | 作用 |
---|---|
ansible all --list-hosts | #列出清单中所有受管主机 |
ansible ungrouped --list-hosts | 列出不属于某个组的主机 |
ansible webservers --list-hosts | #列出属于webservers组的主机 |
示例:
①:vim /etc/ansible/hosts
##编写主机清单
②:列出主机
4.3. 自定义清单
① 建立清单目录 : mkdir deploy-inventory
② 编写主机清单 : vim inventory
③:列出主机
命令 | 作用 |
---|---|
ansible all f -i inventory --list-hosts | 列出清单中所有受管主机 |
ansible ungrouped -i inventory --list-hosts | 列出不属于某个组的主机 |
ansible webservers -i --list-hosts | 列出属于webservers组的主机 |
4.4. 管理ansible配置文件
配置文件:
- /etc/ansible/ansible.cfg : #基本配置文件,如果找不到其他配置文件,使用这个
- ~/.ansible.cfg: #如果存在此配置并且当前工作目录中也没有ansible.cfg,此文件替代/etc/ansible/ansible.cf
- . ./ansible.cfg : #执行ansible命令的目录中如果有ansible.cfg,就用它,不使用上面两个(推荐使用,上面两个不常用)
管理配置文件中的设置:
- [defaults] #部分设置ansible操作的默认值
- [privilege_escalation] #配置ansible如何在受管主机上执行特权升级
示例:
在当前工作目录下创建配置文件 vim ansible.cfg
ansible webservers -i inventory --list-hosts -v
##显示webservers组使用的配置文件
如何使用siudo下放权利:
vim /etc/sudoers.d/student
##为student建立一个下放权限的文件
5. 运行临时命令
使用临时命令可以快速测试和更改,无需编写playbook
格式:
ansible host-pattern -m module [-a 'module arguments'] [-i inventory]
①:检查能否在受管主机上运行python模块ansible all -m ping
②:使用临时命令通过模块执行任务ansible-doc -l
#列出所有模块
③:ansible-doc ping
#查看ping模块帮助文档
常用ansible模块:
文件模块:
-copy:将本地文件复制到受管主机
-file:设置文件的权限和其他属性
-lineinfile:确保特定行是否在文件中
-synchronize:使用rsync同步内容
系统模块:
-firewalld:使用firewalld管理任意端口和服务
-reboot:重启
-service:管理服务
-user:添加、删除和管理用户账户
Net Tools模块:
-get_url:通过http、https、或者ftp下载文件
-nmcli:管理网络
-uri:与web服务交互
示例:
①:使用user模块确保student用户存在于rhel8_no1.test.com且uid为1000
②:使用command模块执行临时命令 (通过-u 选项使用student进行连接并执行id命令)
注意:command模块允许执行远程命令,但这些命令不是shell处理,所以无法访问shell环境变量,所以不能执行重定向、传送等操作
③:使用copy模块,以student用户登录,使用root权限,把“westos ansible”复制给192.168.1.19主机的/etc/mo
td文件 (- -become 给student用户权限提升)
在192.168.1.19受管主机上查看文件内容,copy模块复制内容成功
ssh远程登录192.168.1.19主机时会显示更改的内容
④:使用copy模块,修改192.168.1.19受管主机的apache默认发布页面