Ansible知识点
1、Ansible概述
Ansible 是基于 Python 开发,集合了众多优秀运维工具的优点,实现了批量运行命令、部署程序、配置系统等功能的自动化运维管理工具。默认通过 SSH 协议进行远程命令执行或下发配置,无需部署任何客户端代理软件,从而使得自动化环境部署 变得更加简单。可同时支持多台主机并行管理,使得管理主机更加便捷。 Ansible 是一种基于模块进行工作的框架结构, 批量部署能力就是由Ansible 所运行的模块实现的。
2、Ansible架构
- Ansible core 核心引擎:即 Ansible 本身;
- Host Inventory 主机清单: 用来定义 Ansible 所管理主机, 默认是在 Ansible 的hosts 配置文件中定义被管理主机, 同时也支持自定义动态主机清单和指定其它配置文件的位置;
- Connect plugin 连接插件: 负责和被管理主机实现通信。除支持使用 SSH 连接 被管理主机外, Ansible 还支持其它的连接方式, 所以需要有连接插件将各个主机用连接插件连接到 Ansible;
- Playbook( yaml, jinjia2) 剧本: 用来集中定义 Ansible 任务的配置文件, 即将多个任务定义在一个剧本中由 Ansible 自动执行, 可以由控制主机针对多台被管理主机同时运行多个任务;
- Core modules 核心模块:是 Ansible 自带的模块,使用这些模块将资源分发到被管理主机使其执行特定任务或匹配特定的状态;
- Custom modules 自定义模块: 用于完成模块功能的补充, 可借助相关插件完成记录日志、发送邮件等功能。
Ansible部署及使用
资源配置
操作系统 | 配置 | 主机名/IP |
CentOS 7.9 | 2C2G | ansible-node1/172.16.10.10 |
CentOS 7.9 | 2C2G | ansible-node2/172.16.10.11 |
CentOS 7.9 | 2C2G | ansible-node3/172.16.10.12 |
一、基础环境
1.1 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
1.2 关闭selinux
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
reboot
1.3 修改主机名
hostnamectl set-hostname ansible-node1
hostnamectl set-hostname ansible-node2
hostnamectl set-hostname ansible-node3
1.4 配置hosts文件
cat >> /etc/hosts << EOF
172.16.10.10 ansible-node1
172.16.10.11 ansible-node2
172.16.10.12 ansible-node3
EOF
1.5 时间同步
yum -y install chrony
systemctl start chronyd
chronyc sources -v
二、安装Ansible
2.1 安装epel源
yum -y install epel-release
2.2 安装Ansible
yum -y install ansible
2.3 设置Ansible管理组并设置ssh登录免密
vim /etc/ansible/hosts
## 末尾行添加组和ip
[web] ##设置 web 组
172.16.10.11 ##web组包含的主机
[db]
172.16.10.12
# 设置忽略ssh第一登录验证
vim /etc/ansible/ansible.cfg
##筛选到 host_key_checking 的行,取消注释
host_key_checking = False
2.4 设置免密
# 第一种:ssh免密设置
ssh-keygen
## 一直按回车
ssh-copy-id 172.16.10.11
ssh-copy-id 172.16.10.12
# 第二种:修改/etc/ansible/hosts 文件
vim /etc/ansible/hosts
[web]
172.16.10.11 ansible_ssh_user=[用户名,默认是root用户] ansible_ssh_pass=[对应用户密码]
[db]
172.16.10.12 ansible_ssh_pass=123
三、Ansible相关使用
# ansible 基本语法
ansible [host-pattern] -m [module_name] -a [args]
[host-pattern]:指定被管理主机,可以指定组或单个主机;all指定全部主机
[-m module_name]:指定所使用的模块
[-a args]:设置模块对应的参数
3.1 ping模块
ansible all -m ping
3.2 user模块
# 创建用户
ansible web -m user -a 'name="zhagnsan"'
# 删除用户
ansible web -m user -a 'name="zhangsan" state=absent'
3.3 command模块
ansible web -m command -a '执行命令'
ansible web -m command -a 'ls'
3.4 shell模块
ansible web -m shell -a 'shell命令'
ansible web -m shell -a 'tail -1 /etc/passwd'
3.5 yum模块
# 安装
ansible web -m yum -a 'name=软件名'
ansible web -m yum -a 'name=httpd'
# 卸载
ansible web -m yum -a 'name=软件名 state=absent'
ansible web -m yum -a 'name=httpd state=absent'
3.6 copy模块
ansible all -m copy -a 'src=/opt/test[源文件位置] dest=/root/test[目标文件位置] mode=400权限'
ansible all -m copy -a 'src=/root/test dest=/opt/test'
3.7 script模块
• 执行脚本
vim test.sh
ifconfig
chmod +x test.sh
ansible db -m script -a '脚本'
ansible db -m script -a '/root/test.sh'
3.8 编写playbook文件
vim kgc.yaml
- hosts: web ##指定执行主机或组
vars: ##创建变量
- kgc: httpd ##定义变量
tasks:
- name: remove {{ kgc }} ##调用变量
shell: yum -y remove httpd
- name: install httpd
yum: name=httpd
- name: service httpd
service: name=httpd enabled=true state=started
- name: copy test file
copy: src=/root/test.sh dest=/opt/test.sh
# 执行playbook文件
ansible-playbook kgc.yaml
3.9 指定自定义主机清单文件
vim /root/hosts
[kgc] ##定义主机组
172.16.10.11 ansible_ssh_pass=123
=========================================
ansible -i /root/hosts kgc -m command -a 'ls'
-i 指定自定义主机清单文件