Ansible 是基于 Python 开发,集合了众多优秀运维工具的优点,实现了批量运行命令、部署程序、配置系统等功能的自动化运维管理工具。默认通过 SSH 协议进行远程命令执行或下发配置,无需部署任何客户端代理软件,从而使得自动化环境部署 变得更加简单。可同时支持多台主机并行管理,使得管理主机更加便捷。 Ansible 是一种基于模块进行工作的框架结构, 批量部署能力就是由Ansible 所运行的模块实现的。
Ansible core 核心引擎:即 Ansible 本身;
Host Inventory 主机清单: 用来定义 Ansible 所管理主机, 默认是在 Ansible 的hosts 配置文件中定义被管理主机, 同时也支持自定义动态主机清单和指定其它配置文件的位置;
Connect plugin 连接插件: 负责和被管理主机实现通信。除支持使用 SSH 连接 被管理主机外, Ansible 还支持其它的连接方式, 所以需要有连接插件将各个主机用连接插件连接到 Ansible;
Playbook( yaml, jinjia2) 剧本: 用来集中定义 Ansible 任务的配置文件, 即将多个任务定义在一个剧本中由 Ansible 自动执行, 可以由控制主机针对多台被管理主机同时运行多个任务;
Core modules 核心模块:是 Ansible 自带的模块,使用这些模块将资源分发到被管理主机使其执行特定任务或匹配特定的状态;
Custom modules 自定义模块: 用于完成模块功能的补充, 可借助相关插件完成记录日志、发送邮件等功能。
资源配置
操作系统 | 配置 | 主机名/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 |
systemctl stop firewalld systemctl disable firewalld
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config reboot
hostnamectl set-hostname ansible-node1 hostnamectl set-hostname ansible-node2 hostnamectl set-hostname ansible-node3
cat >> /etc/hosts << EOF 172.16.10.10 ansible-node1 172.16.10.11 ansible-node2 172.16.10.12 ansible-node3 EOF
yum -y install chrony systemctl start chronyd chronyc sources -v
yum -y install epel-release
yum -y install ansible
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
# 第一种: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 [host-pattern] -m [module_name] -a [args] [host-pattern]:指定被管理主机,可以指定组或单个主机;all指定全部主机 [-m module_name]:指定所使用的模块 [-a args]:设置模块对应的参数
ansible all -m ping
# 创建用户 ansible web -m user -a 'name="zhagnsan"' # 删除用户 ansible web -m user -a 'name="zhangsan" state=absent'
ansible web -m command -a '执行命令' ansible web -m command -a 'ls'
ansible web -m shell -a 'shell命令' ansible web -m shell -a 'tail -1 /etc/passwd'
# 安装 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'
ansible all -m copy -a 'src=/opt/test[源文件位置] dest=/root/test[目标文件位置] mode=400权限' ansible all -m copy -a 'src=/root/test dest=/opt/test'
执行脚本
vim test.sh ifconfig chmod +x test.sh ansible db -m script -a '脚本' ansible db -m script -a '/root/test.sh'
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
vim /root/hosts
[kgc] ##定义主机组
172.16.10.11 ansible_ssh_pass=123
=========================================
ansible -i /root/hosts kgc -m command -a 'ls'
-i 指定自定义主机清单文件