Ansible 快速入门:主机清单、认证方式与剧本模式
用一台主控机与两台 CentOS 7.8 受控机跑通 Ansible 的入门流程:EPEL 源与安装、主机清单的三种写法(逐台、变量、区间)、公钥与密码两种认证方式、首次登录的指纹确认,以及剧本的编写与执行。
快速入门
准备环境
服务器硬件配置
| 名称 | 操作系统 | CPU | 内存 | 内网IP | 公网IP | 集群角色 |
|---|---|---|---|---|---|---|
| ECS | CentOS 7.8 64位 | 2核 | 2GB | 192.0.2.18 | 203.0.113.222 | Master |
| ECS | CentOS 7.8 64位 | 2核 | 2GB | 192.0.2.11 | 203.0.113.28 | Node |
| ECS | CentOS 7.8 64位 | 2核 | 2GB | 192.0.2.20 | 203.0.113.221 | Node |
主控机端
配置EPEL源:
yum install -y epel-release
安装Ansible:
yum install -y ansible
验证:
ansible --version
主机清单
这里的主机清单是将受控主机SSH信息配置到主控机的Ansible配置文件中,以供主控机的Ansible调用。
查看Ansible的主机配置信息:
cat /etc/ansible/hosts
编辑Ansible的主机配置文件追加受控主机清单:
cat >> /etc/ansible/hosts << EOF
[k8s-cluster]
192.0.2.11
192.0.2.20
EOF
上面我们将两个从节点服务器IP信息组成一组名叫“k8s-cluster”的服务器清单组追加到Ansible主机配置文件中。
接着尝试跑一下:
ansible k8s-cluster -m shell -a "free -m"
这句命令就是通过Ansible告诉“k8s-cluster”这组受控主机执行Shell命令查询各主机的内存信息,并反馈展示主控机中。
认证方式
认证方式指的是主控机要通过受控机的安全认证后才能操作受控机执行行为。常用的认证方式包含:公钥方式、密码方式。
公钥方式
将主控机的公钥文件分发到各受控机,然后主控机就可以免密登录各受控机执行操作行为了。
密码方式
在主控机的Ansible的配置主机文件里,配置受控主机清单时配置(端口、用户、密码)就行了。
| 参数 | 释义 | 备注 |
|---|---|---|
| ansible_port | 指定端口,默认:22 | – |
| ansible_user | 指定用户,默认:root | – |
| ansible_password | 指定密码 | – |
配置主机清单时追加密码等参数:
cat >> /etc/ansible/hosts << EOF
[k8s-cluster]
192.0.2.11 ansible_port=22 ansible_user='root' ansible_password='YourPassword123'
192.0.2.20 ansible_port=22 ansible_user='root' ansible_password='YourPassword123'
EOF
配置变量:
cat >> /etc/ansible/hosts << EOF
[k8s-cluster:vars]
ansible_port=22
ansible_user='root'
ansible_password='YourPassword123'
[k8s-cluster]
192.0.2.11
192.0.2.20
EOF
配置变量循环:
cat >> /etc/ansible/hosts << EOF
[k8s-cluster:vars]
ansible_port=22
ansible_user='root'
ansible_password='YourPassword123'
[k8s-cluster]
192.0.2.[11:20]
EOF
认证指纹
主控机登录受控机时需要确定指纹来规避安全问题,这个指纹确认只是在首次登录时需要,第一次确认完成后往后就不需要再确认了。解决方案有大概三种:
- 配置免密登录,分发主控机的秘钥到受控机时会确认指纹信息。
- 通过配置主机清单密码方式认证。
- 配置Ansible的配置文件来忽略确认指纹。
忽略确认指纹
配置Ansible配置文件忽略:
sed -i 's/host_key_checking = True/host_key_checking = False/g' /etc/ansible/ansible.cfg
Ansible 没有守护进程(agentless),配置在每次执行时读取,改完 ansible.cfg 不需要重启服务。
剧本模式
新建剧本文件:my-action.yml
- hosts: all
tasks:
- name: touch file
shell: touch /tmp/mylinux.txt
执行剧本:
ansible-playbook -i hosts my-action.yml -C
案例:更新系统
- hosts: all
tasks:
- name: update system
shell: yum update