二、ansible 安装与配置文件管理

一、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: []

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

繁华依在

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值