Ansible
Ansible
什么是ansible?
Ansible 是一款自动化运维工具,用于配置管理、应用部署、任务自动化和 IT 编排。
安装
1、安装epel-release仓库
1 | dnf -y install epel-release |
2、安装ansible
1 | dnf -y install ansible |
3、设置免密
1 | #生成密钥 |
4、编辑ansible主机清单文件,指定要管理那些主机
1 | #编辑控制节点的hosts文件 |
5、测试是否能通子节点
1 | #已配置免密 |
主机清单
想要控制哪些子节点,需要在 /etc/ansible/hosts 文件中指定
1、指定子节点用户名和密码
1 | 主机名 absible_ssh_user='用户名' ansible_ssh_pass='密码' |
2、当ssh端口不是默认22时,就需要配置端口
1 | ansible_ssh_port='端口号' |
3、指定分组,操作组时组下的成员都会执行指令
1 | [组名] |
4、组变量,当组内变量的值过多重复,就可以把相同的值拎出来,作为组全局变量,定义一次组内成员可以使用,例如有十台子节点的用户名都是root,密码都是000
1 | [组名:vars] |
5、子分组,将多个组合并成一个大组
1 | [子组名:children] |
Ad-Hoc点对点模式
拷贝模块
1、拷贝文件到子节点
1 | ansiable 组名或主机名 -m -a 'src=要拷贝的文件路径 dest=子节点存放文件的路径 owner=所属用户 group=所属组 mode=读写执行权 backup=yes' |
用户模块
1、创建用户
1 | ansible 主机名或组名 -m user -a 'name=用户名 state=present' |
2、设置密码
1 | #生成加密密码,然后赋值 |
软件包管理
常用选项
1 | -m:指定模块 |
1、安装语法
1 | ansible 组名或用户名 -m dnf -a "name=要安装的软件包名 state=present" -b |
2、卸载语法
1 | ansible 组名或用户名 -m dnf -a "name="要卸载的软件包名 state=absent" -b |
3、更新所有软件包
1 | ansible 组名或用户名 -m dnf -a "name='*' state=latest" -b |
4、批量安装
1 | ansible 组名或用户名 -m dnf -a "name=['1','2','3'] state=present" -b |
服务模块
1、启动服务
1 | ansible 组名或用户名 -m service -a "name=服务名 state=started" -b |
2、停止服务
1 | ansible 组名或用户名 -m service -a "name=服务名 state=stopped" -b |
3、重启服务
1 | ansible 组名或用户名 -m service -a "name=服务名 state=restarted" -b |
4、重载服务,不重启
1 | ansible 组名或用户名 -m service -a "name=服务名 state=reloaded" -b |
5、查看服务
1 | ansible 组名或用户名 -m service -a "name=服务名" -b |
6、设置开机启动
1 | ansible 组名或用户名 -m service -a "name=服务名 enabled=yes" -b |
7、禁止开机自动
1 | ansible 组名或用户名 -m service -a "name=服务名 enabled=no" -b |
文件模块
1、创建
1 | #创建文件 |
2、删除
1 | ansible 组名或用户名 -m fiel -a "path=文件路径 state=absent" -b |
3、修改
1 | #修改所有者 |
4、将文件拷贝到子节点
1 | #可以有多个文件,空格隔开 |
5、从子节点下载到本地
1 | #flat=yes 不创建主机目录结构 |
6、修改文件内容
1 | #覆盖 |
收集子节点信息模块
1、查看子节点主机民
1 | ansible all -m setup -a "filter=ansible_hostname" |
2、查看IP地址
1 | ansible all -m setup -a "filter=ansible_default_ipv4" |
3、查看CUP信息
1 | ansible all -m setup -a "filter=ansible_processor*" |
4、查看内存信息
1 | ansible all -m setup -a "filter=ansible_memory_mb" |
5、查看磁盘信息
1 | ansible all -m setup -a "filter=ansible_mounts" |
6、查看操作系统版本
1 | ansible all -m setup -a "filter=ansible_distribution*" |
script脚本模块
1、将本地脚本传输到子节点主机运行
1 | ansible 组名或用户名 -m script -a "脚本路径" -b |
2、执行子节点已有脚本
1 | ansible 组名或用户名 -m shell -a "脚本路径" -b |
shell模块
远程执行Linux命令
1 | #多个命令用 ; 隔开 |
YAML剧本编写
语法格式
1 | - hosts: 要执行剧本的子主机 |
执行
1、检查yaml剧本是否有语法错误
1 | ansible-playbook 剧本文件.yaml --syntax-chech |
2、列出剧本中的任务
1 | ansible-playbook 剧本文件.yaml --list-tasks |
3、列出要执行的子主机
1 | ansible-playbook 剧本文件.yaml --list-hosts |
4、执行剧本
1 | ansible-playbook 剧本文件.yaml |
角色组织
将yaml剧本内容分开写,实现解耦合、代码简洁、可复用。
标准角色结构
1 | roles/ |
目录结构解释
roles:角色总目录名称
nginx:角色名称,什么服务用什么名称
tasks:定义任务
handlers:处理器,用于指定任务剧本里定义了 notity 的任务
templates:Jinja2模板文件,处理ansible内置变量和用户自定义变量
vars:决定自定义变量
main.yaml:主剧本,指定哪些子节点执行