概述
ansible 当前主流的批量配置管理工具,相比于saltstack 它是无agent 模式,基于ssh 去远程管理主机。有密码和密钥两种方式远程认证方式。
安装
yum -y install ansible (前提是有epel 源,如果没有需要安装)
pip install ansible
github源码包安装
环境
服务端
python 2.6/2.6.3.x
openssl
centos debian redhat
被管理端
openssl python 2.6/2.6.3.x
ansible 组件
playbook #剧本
inventory #主机清单
modules #功能模块
plugins #插件
api #接口
常见的配置
[defaults] # some basic default values... #inventory = /etc/ansible/hosts #默认的主机清单文件 #forks = 5 #并发执行任务数量,默认5#host_key_checking = False #是否验证远程主机的指纹信息,如果要禁用验证需要去掉注释 #sudo_user = root #是否提权,新版本用的是 become = root #timeout = 10 #ssh 超时时间 #remote_port = 22 #log_path = /var/log/ansible.log #日志路径,启用的话,注释去掉
#private_key_file = /path/to/file #密钥登录方式,默认关闭
inventory 使用配置
######## Ex 1: 未分组的主机清单,默认属于all 组,可以使用主机名也可以使用ip ## green.example.com ## blue.example.com ## 192.168.100.1 ## 192.168.100.10 ######## Ex 2: 根据主机用户分组,例如一下清单主机都属于webservers ## [webservers] ## alpha.example.org ## beta.example.org ## 192.168.1.100 ## 192.168.1.110 # 如果你的主机名字有规律的,可以通过这种方式表示多个主机www.001.example.com www.002.example.com ...
## www[001:006].example.com
######## Ex 3: 数据库组
## [dbservers] ##
## db01.intranet.mydomain.net
## db02.intranet.mydomain.net
## 10.25.1.56 ## 10.25.1.57
变量的使用
可以通过给主机或者主机组定义变量,在远程执行命令的时候使用该变量
vi /etc/ansible/hosts
##k8s-node [node] 10.11.118.164 ansible_ssh_user=root ansible_ssh_pass=asdf http_port=80 #针对主机添加变量 10.11.118.165 ansible_ssh_user=root ansible_ssh_pass=asdf [node:vars] #针对主机组添加变量 http_port=6443
ansible node -a "echo {{http_port}}"
tips:主机后面的变量优先级大于主机组中相同变量值
vi /etc/ansible/group_vars/etcd.yml #以主机组名字名命的文件内定义变量
server_name: k8s-etcd
ansible etcd -a "echo {{server_name}}"
tips: 当两个主机组中的主机有重复,然后两个主机组的变量定义的不同,那么前面第一次生效的变量不会被后面定义的覆盖
普通用户远程登陆后的提权问题
使用copy 模块复制文件报错
"msg": "Destination /usr/local/bin not writable"
原因:普通用户没有权限写入此目录
解决:
vi /etc/ansible/ansible.cfg
[defaults]
sudo_user = root
[privilege_escalation]
become=True
become_method=sudo
become_user=root
首次连接目标主机 无秘钥文件的解决方法
解决方法:
-
A.在Ansible主机中,添加目标主机的指纹文件。
但这种方法过于繁琐,失去了使用Ansible的目的。 -
B.取消秘钥文件校验
修改ansible.confg文件(也可能是ansible.cfg)
host_key_checking = False
完成首次登陆之后,可再次启用此校验。