一、ansible安装
ansible安装常用的两种方式,yum安装和 pip程序安装
- yum安装
要先安装一个epel-release包,然后再安装我们的 ansible 即可
yum install epel-release -y
yum install ansible –y
- pip安装(python的包管理模块)安装
yum install python-pip
pip install ansible
查看ansible版本 ansible --version
[root@k8s-master-1 ansible]# ansible --version
ansible 2.9.27
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Aug 4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]
[root@k8s-master-1 ansible]#
二、ansible相关文件
ansible目录如下(yum安装)
配置文件目录:/etc/ansible/ansible.cfg
配置主机清单文件:/etc/ansible/hosts
存放ansible角色的目录:/etc/ansible/roles
执行文件:/usr/bin/
Lib库依赖目录:/usr/lib/pythonX.X/site-package/ansible/
Help文档目录:/usr/share/doc/ansible-X.X.X/
Man文档目录:/usr/share/man/man1/
1、ansible配置文件
ansible 的主配置文件存在 /etc/anible/ansible.cfg ,其中大部分的配置内容无需进行修改;
[defaults]
inventory = /etc/ansible/hosts # 主机清单配置文件
library = /usr/share/my_modules/ # 指向存放Ansible模块的目录,支持多个目录方式,只要用冒号(:)隔开就可以
module_utils = /usr/share/my_module_utils/ #用到的utils工具存放目录
remote_tmp = $HOME/.ansible/tmp
# `临时py命令文件存放在远程主机目录,先把ansible执行的指令,先生成py程序,然后放在本地的目录里,然后再用ssh协议,将生成的py程序复制到被管理的机器remote_tmp目录下,复制过去后,拿出来执行,执行完毕后会将该程序删除`
local_tmp = $HOME/.ansible/tmp
#本机的临时命令执行目录`
forks = 5 #并发连接数,默认为5
poll_interval = 15
#每隔15秒去查看对方的状态`
sudo_user = root #设置默认执行命令的用户
ask_sudo_pass = True
ask_pass = True
#每次执行ansible命令是否询问ssh密码`
remote_port = 22 #指定连接被管节点的管理端口,默认为22端口,建议修改,能够更加安全
host_key_checking = False #设置是否检查SSH主机的密钥,值为True/False。关闭后第一次连接不会提示配置实例,建议取消注释,
log_path=/var/log/ansible.log #日志文件,建议取消注释,可以记录日志
timeout = 60 #设置SSH连接的超时时间,单位为秒
[privilege_escalation] #如果是普通用户则需要配置提权
#become=True
#become_method=sudo
#become_user=root
#become_ask_pass=False
2、ansible配置文件的优先级
ansible的配置文件可以存放在任何位置,但配置文件有读取顺序,查找顺序如下:
- 最先查找环境变量 $ANSIBLE_CONFIG 变量
- 其次查找当前项目目录下 ansible.cfg;
- 然后查找用户跟目录下.ansible.cfg;
- 最后查找 /etc/ansible/ansible.cfg
3、ansible的主机清单Inventory
ansible的主要作用在于批量主机操作,想要完成主机管理,第一步就是要编辑主机清单(inventory)inventory文件主要用来填写管理主机以及主机组的信息;默认inventory文件为 /etc/ansible/hosts;
当然也可以自定义,当执行ansible命令时 使用 - i 选项指定inventory文件位置;
1、inventory文件格式
1、直接指定主机名或主机地址,并且支持通配符
# k8s-node-1
# k8s-master-1
# 192.168.134.135
192.168.134.137
www[01:50].example.com <==支持通配符匹配www01 www02 ...www50
2、定义一个主机组[组名]把地址或主机名加进去
[web]
192.168.134.137
192.168.134.135
3、可以将同一个主机同时归并到多个不通的组中,例如192.168.134.135 同时都在[web]和[app]中
[web]
192.168.134.137
192.168.134.135
[app]
192.168.134.135
192.168.169.129
4、当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明:
192.168.134.135:2222
5、可以使用基于用户名密码的方式连接被控主机,可以在主机清单中定义被控主机的用户名密码:
[webservers]
192.168.134.137 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'
192.168.134.138 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'
2、实现普通用户的秘钥认证:
[root@k8s-master-1 .ssh]# ssh-keygen -t rsa 一直回车
[root@k8s-master-1 .ssh]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.134.137
[root@k8s-master-1 .ssh]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.134.138
3、定义主机清单 并测试
[root@k8s-master-1 ansible]# vim hosts
[web]
192.168.134.137
192.168.134.138
[root@k8s-master-1 ansible]# ansible all -m ping
192.168.134.138 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.134.137 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
[root@k8s-master-1 ansible]# ansible 192.168.134.138 -m ping
192.168.134.138 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
三、ansible常用命令
1、ansible命令集
/usr/bin/ansible Ansibe AD-Hoc 临时命令执行工具,常用于临时命令的执行
/usr/bin/ansible-doc Ansible 模块功能查看工具
/usr/bin/ansible-galaxy 下载/上传优秀代码或Roles模块 的官网平台,基于网络的
/usr/bin/ansible-playbook Ansible 定制自动化的任务集编排工具
/usr/bin/ansible-pull Ansible远程执行命令的工具,拉取配置而非推送配置(使用较少,海量机器时使用,对运维的架构能力要求较高)
/usr/bin/ansible-vault Ansible 文件加密工具
/usr/bin/ansible-console Ansible基于Linux Consoble界面可与用户交互的命令执行工具
其中,我们比较常用的是/usr/bin/ansible 和 /usr/bin/ansible-playbook。
2、ansible-doc命令 显示模块帮助信息
语法:
ansible-doc [options] [module…]
ansible-doc -l #获取全部模块的信息
ansible-doc -s MOD_NAME #获取指定模块的使用帮助
查看ansible-doc的用法
[root@k8s-master-1 ~]# ansible-doc
-h, --help show this help message and exit # 显示命令参数API文档
-l, --list List available modules #列出可用的模块
-M MODULE_PATH, --module-path=MODULE_PATH #指定模块的路径
-s, --snippet Show playbook snippet for specified module(s) #显示playbook制定模块的用法
-v, --verbose verbose mode (-vvv for more, -vvvv to enable # 显示ansible-doc的版本号查看模块列表:
示例:
1、查看shell模块的帮助信息,太多了 简写
[root@k8s-master-1 ~]# ansible-doc shell
OPTIONS (= is mandatory): # <==模块选项
EXAMPLES: #<==使用示例
2、查看ansible共加载了多少模块:
[root@k8s-master-1 ~]# ansible-doc -l |wc -l
3387
3、查看模块的简要说明,主要包括用法和选项:
[root@k8s-master-1 ~]# ansible-doc -s shell
3、ansible命令详解
语法:
ansible <host-pattern> [-f forks] [-m module_name] [-a args]
host-pattern 使用说明:
1、# 匹配所有主机all
ansible all -m ping
2、# 通配符
ansible "*" -m ping <==匹配所有主机同all
ansible 10.0.0.* -m ping <==匹配10.0.0网段的所有主机
3、# 与:在webservers组;并且在dbservers中的主机;
ansible "webservers:&dbservers" -m ping
4、# 或:在webservers组,或者在appservers中的主机;
ansible "webservers:appservers" -m ping
5、# 非:在webservers组,但不在apps组中的主机
ansible 'webservers:!apps' -m ping
6、#属于web或db但不属于app排除ftp组内的主机 真他娘绕
ansible 'web:db:&app:!ftp' -m ping
7、# 正则表达式:匹配以web或者db服务支持的所有example.com域名
ansible "~(web|db).*\.example\.com" -m ping
& 表示任务在后台执行,如要在后台运行redis-server,则有 redis-server &
&& 表示前一条命令执行成功时,才执行后一条命令 ,如 echo '1‘ && echo '2'
| 表示管道,上一条命令的输出,作为下一条命令参数,如 echo 'yes' | wc -l
|| 表示上一条命令执行失败后,才执行下一条命令,如 cat nofile || echo "fail"
选项说明如下:
选项 | 说明 |
-m module | 指定模块,默认为command |
-a args | 模块参数。没有参数可忽略 |
--version | 显示版本 |
-i INVENTORY | 指定主机清单的路径,默认为/etc/ansible/hosts |
--list-hosts | 显示主机列表,可简写--list |
-k,--ask-pass | 当使用ssh密码认证时,提示输入ssh连接密码,默认基于秘钥认证 |
-K,--ask-become-pass | 提示输入sudo时的口令 |
-C,--check | 仅检查 ,并不执行 |
-T,--timeout=TIMEOUT | 执行命令的超时时间,默认10s |
-U,--user=remote_user | 远程执行命令的用户 |
-b,--become | 代替旧版的sudo切换 |
-v | 详细过程-vv -vvv更详细 |
-f forks | 并行任务数,默认5 |
示例:
1、使用ping 模块
[root@k8s-master-1 ~]# ansible web -m ping
[root@k8s-master-1 ~]# ansible all -m ping
[root@k8s-master-1 ~]# ansible '*' -m ping
[root@k8s-master-1 ~]# ansible 192.168.134.'*' -m ping
2、使用ssh密码的方式管理被控端
[root@k8s-master-1 ~]# ansible all -m ping -k
SSH password:
四、ansible-vault 命令
功能:管理加密解密文件
五、ansible-playbook
功能:用于执行配置好的剧本
语法:ansible-playbook <filename.yml> ... [options]
常用的选项如下:
选项 | 说明 |
-C,--check | 只检测可能发生的改变,但不真正执行操作 |
--list-host | 列出运行任务的主机 |
--limit 主机列表 | 只针对主机列表中的主机执行 |
-v | 显示过程 -vv -vvv更详细 |
--syntax-check | 检查语法 |
-e | 向playbook命令中传递变量 |
-i | 指定inventory主机清单文件,默认为/etc/ansible/hosts |
示例:
#只检测
ansible-playbook -C file.yml
#执行剧本
ansible-playbook file.yml
#执行剧本,只针对hosts中的192.168.134.138机器
ansible-playbook file.yml --limit 192.168.134.138
#查看主机清单
[root@k8s-master-1 ansible]# ansible all --list
hosts (2):
192.168.134.137
192.168.134.138
# 打印执行这个yaml文件的机器清单
[root@k8s-master-1 test]# ansible-playbook -C when.yaml --list-host
playbook: when.yaml
play #1 (web): web TAGS: []
pattern: [u'web']
hosts (2):
192.168.134.137
192.168.134.138
#打印此yaml文件的 任务信息
[root@k8s-master-1 test]# ansible-playbook -C when.yaml --list-tasks
playbook: when.yaml
play #1 (web): web TAGS: []
tasks:
Check Nginx Status TAGS: []
Print check_k8s TAGS: []
service TAGS: []