目录
一、Ansible Inventory
1.1 Inventory 是什么
Inventory 文件主要用来填写被管理主机以及主机组信息;(逻辑上定义);默认 Inventory 文件为 /etc/ansible/hosts;当然也可以自定义一个文件,当执行 ansible 命令时使用 -i 选项指定 Inventory 文件位置。
1.2 Inventory-密码连接方式
在主控端如何访问被控端主机方法:被控端用户名+密码
1、指定主机 IP,指定主机端口,指定主机用户名、密码:
# 编写主机清单
[root@k8s-master1 ~]# vim /etc/ansible/hosts
[webservers]
192.168.170.141 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='root'
192.168.170.142 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='root'
[dbservers]
192.168.170.143
# 验证
[root@k8s-master1 ~]# ansible webservers -m ping
2、通过变量方式定义:
[root@k8s-master1 ~]# vim /etc/ansible/hosts
[webservers]
192.168.170.141
192.168.170.142
[webservers:var]
ansible_ssh_port=22
ansible_ssh_user=root
ansible_ssh_pass='root'
[dbservers]
192.168.170.143
# 验证
[root@k8s-master1 ~]# ansible webservers -m ping
1.3 Inventory-秘钥连接方式
先免密,然后定义主机组即可完成通讯。
1、创建秘钥对,然后下发秘钥:
[root@k8s-master1 ~]# ssh-keygen -t rsa
[root@k8s-master1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.170.142
[root@k8s-master1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.170.143
2、配置 Inventory 主机清单:
[root@k8s-master1 ~]# vim /etc/ansible/hosts
[webservers]
192.168.170.141
192.168.170.142
# 验证
[root@k8s-master1 ~]# ansible webservers -m ping
1.4 Inventory-主机匹配方式
ansible 的 host-pattern 主机匹配使用说明。
#1. 指定操作所有的组
ansible all -m ping
#2. 通配符
ansible "*" -m ping
ansible 10.0.0.* -m ping
#3. 与:在 webservers 组并且在 dbsservers 中的主机
ansible "webservers:&dbservers"-m ping
#4. 或:在 webservers 组,或者在 dbsservers 中的主机
ansible "webservers:dbsservers" -m ping
#5. 非:在 webservers 组,但不在 dbsservers 组中的主机
ansible 'webservers:!dbsservers' -m ping
#6. 正则表达式,
ansible "~(web|db).*" -m ping
1.5 实战-通过普通用户管理被控端
场景说明:ansible 使用 sky 普通用户统一管理所有的被控端节点。
1、首先控制端和被控端,都需要有 sky 用户:
useradd sky
echo "sky" | passwd --stdin sky
2、将控制端 sky 用户的公钥推送到被控端 sky 用户下,使普通用户能进行免密码登录:
[root@k8s-master1 ~]# su - sky
[sky@k8s-master1 ~]$ ssh-keygen -t rsa
[sky@k8s-master1 ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub sky@192.168.170.142
[sky@k8s-master1 ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub sky@192.168.170.143
3、所有主机的 sky 用户都必须添加 sudo 权限:
visudo
sky ALL=(ALL) NOPASSWD:ALL
4、修改控制端 /etc/ansible/ansible.cfg 主配置文件,配置普通用户提权:
[root@k8s-master1 ~]# vim /etc/ansible/ansible.cfg
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
5、使用 sky 用户测试是否能执行任务
[sky@k8s-master1 ~]$ ansible webservers -m ping
二、Ansible ad-hoc
2.1 ad-hoc 是什么
ad-hoc 简而言之就是 “临时命令”,执行完即结束,并不会保存
-
应用场景 1:查看多台节点的进程是否存在;
-
应用场景 2:拷贝指定的文件至本地。
2.2 ad-hoc 命令使用
命令示例:ansible 'groups' -m command -a 'df -h'
,含义如下图所示:
2.3 ad-hoc 执行过程
-
加载自己的配置文件,默认 /etc/ansible/ansible.cfg
-
查找对应的主机配置文件,找到要执行的主机或者组
-
加载自己对应的模块文件,如 command
-
通过 ansible 将模块或命令生成对应的临时 py 文件,并将该文件传输至远程服务器对应执行用户
$HOME/.ansible/tmp/ansible-tmp-number/XXX.PY
-
执行用户家目录的文件
-
给文件 +x 执行
-
执行并返回结果
-
删除临时 py 文件,sleep 0 退出
2.4 ad-hoc 执行状态
使用 ad-hoc 执行一次远程命令,注意观察返回结果的颜色:
-
绿色:代表被管理端主机没有被修改
-
黄色:代表被管理端主机发现变更
-
红色:代表出现了故障,注意查看提示