1. ansible简介
1.1 什么是ansible
ansible是一款开源自动化平台,是一个配置管理工具,自动化运维工具
1.2 ansible的优点
- 跨平台支持
- 人类可读自动化: ansible提供linux,Windows,unix和网络设备的无代理支持,适用于物理、虚拟、云和容器环境
- 完美描述应用:playbook
- 轻松管理版本控制:playbook是纯文本,可视作源代码
- 支持动态清单
- 编排可与其他系统轻松集成:puppet、jenkins
- 基础架构即代码
- 减少人为错误
运行playbook时,如果目标主机处于正确状态,则不会进行任何更改。
1.3 安装ansible
1. 在虚拟机上安装ansible,充当控制节点
yum install -y ansible
2. 查看ansible版本信息
ansible --version
3. 使用setup模块验证python
ansible localhost -m setup | grep python_version
2. 部署ansible
2.1 构建ansible清单
2.1.1. 静态清单
注:如果填写的是主机名,请确保可以解析主机名(/etc/hosts)
每行一个,填写主机名或ip,如:
还可以定义主机组:
注:一台主机可以存在于多个主机组'
2.1.2 定义嵌套组
ansible主机清单可以包含多个主机组构成的组,如:
2.1.3 通过范围简化主机规格
可以指定主机名称或ip范围或者数字和字母范围
2.1.4 验证清单
ansible all --list-hosts
2.1.5 默认清单位置
- /etc/ansible/hosts #一般不使用,而是自己新建
2.1.6 动态清单
可以从开源社区的脚本中获取
练习:
列出清单中所有受管主机
ansible all --list-hosts
列出不属于某个组的主机
ansible ungrouped --list-hosts
列出属于webservers组的主机
ansible dbservers --list-hosts
自定义清单
mkdir demo #建立目录
列出主机
2.2 管理ansible配置文件
2.2.1 配置ansible
配置文件:
- /etc/ansible/ansible.cfg #基本配置文件,如果找不到其他配置文件,使用这个
- ~/.ansible.cfg #如果存在此文件且当前工作目录中没有ansible.cfg,此文件替代/etc/ansible/ansible.cfg
- ./ansible.cfg #当前目录中的ansible.cfg,优先级最高
显示使用的配置文件
ansible dbservers --list-hosts -v
管理配置文件中的设置:
- [defaults] #部分设置ansible操作的默认值
- [privilege_escalation] #配置ansible如何在受管主机上执行特权升级
例:
vim ansible.cfg
注:如果登录的不是root用户,可以使用sudo进行权限下放。且做好免密登录
2.3 运行临时命令
使用临时命令可以快速测试和更改,不需要编写playbook
2.3.1 格式:
- ansible host-pattern -m module [-a 'module arguments'] [-i inventory]
2.3.2 检查能否在受管主机上运行python模块
2.3.3 使用临时命令通过模块执行任务
- 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模块确保huayu用户存在于server1.huayu.com 且 uid=1000
通过ansible的command模块,在受管主机上运行命令:
ansible 加上-o参数,单行显示
注:command模块允许执行远程命令,但这些命令不是shell处理,无法访问shell环境变量,所以不能执行重定向、传送等操作
使用command模块执行临时命令
ansible localhost -m command -a 'id'
ansible localhost -m command -a 'id' -u student #通过-u选项使用huayu用户进行连接并执行id命令
使用copy模块
1.首先使用student用户,因为huayu用户没有写权限,会失败
ansible localhost -m copy -a 'content="westos ansible\n" dest=/etc/motd' -u student
2.使用特权升级
使用主机组一次更改server1和server2
可以看到server1显示SUCCESS,server2显示CHANGED,因为server1已经处于正确状态
查看