设置ansible.cfg配置文件参数
Ansible有很多配置参数,以下是⼏个默认的配置参数:
inventory
:该参数表⽰inventory⽂件的位置,资源清单(inventory)就是Ansible需要连接管理的⼀些主机列表。
library
:Ansible的所有操作都使⽤模块来执⾏实现,这个library参数就是指向存放Ansible模块的⽬录。
forks
:设置默认情况下Ansible最多能有多少个进程同时⼯作,默认5个进程并⾏处理。具体需要设置多少个,可
以根据控制端性能和被管理节点的数量来确定。
sudo_user
:设置默认执⾏命令的⽤户,也可以在playbook中重新设置这个参数。
remote_port
:指定连接被管理节点的管理端⼝,默认是22,除⾮设置了特殊的SSH端⼝,否则不需要修改此参数。
host_key_checking
:设置是否检查SSH主机的密钥。可以设置为True或False。即ssh的主机再次验证。如果为False,则不需要输入yes;如果为True,则等待输入yes。
timeout
:设置SSH连接的超时间隔,单位是秒。
log_path
:Ansible默认不记录⽇志,如果想把Ansible系统的输出记录到⽇志⽂件中,需要设置log_path。需要注意,模块将会调⽤被管节点的(r)syslog来记录,执⾏Ansible的⽤户需要有写⼊⽇志的权限。
[root@k8s_master1 ~]# vim /etc/ansible/ansible.cfg //以下配置中的参数都是默认的,如果不需要修改某项参数的话,就不需要管(不需要取消注释),默认就好。 14 inventory = /etc/ansible/hosts 15 library = /usr/share/my_modules/ 20 forks = 5 22 sudo_user = root 26 remote_port = 22 71 host_key_checking = False 103 timeout = 20 111 log_path = /var/log/ansible.log
注意:可以指定多个inventory配置⽂件,只需在ansible的配置⽂件如/etc/ansible/ansible.cf g中将inventory指令设置为对应的⽂件或⽬录即可,如果是⽬录,那么此⽬录下的所有⽂件都是inventory⽂件。
主机定义与分组:
[root@k8s_master1 ~]# cat /etc/ansible/ansible.cfg ... 14 inventory = /etc/ansible/hosts ...
inventory
:指定的配置文件,写入远程主机的地址。定义被托管主机地址配置文件路径名。
格式: - # 表示注释 [组名称] 主机名称或IP地址,其他参数
[root@k8s_master1 ~]# vim /etc/ansible/hosts ... [k8s_node] 192.168.1.19 192.168.1.20
由于之前我们在所有主机上都配置好了/etc/hosts,所以以上配置也可以直接写成:
[root@k8s_master1 ~]# vim /etc/ansible/hosts ... [k8s_node] k8s_node1 k8s_node2
ansible基础命令
列出所有主机组的主机 :ansible all --list-hosts
列出xx主机组的主机 :ansible ‘主机组名’ --list-hosts
批量检测主机并使用交互式登录密码:ansible all -m ping -k
[root@k8s_master1 ~]# ansible all --list-hosts hosts (2): k8s_node1 k8s_node2 [root@k8s_master1 ~]# ansible all -m ping -k SSH password: ---》需要交互式输入密码 k8s_node1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } k8s_node2 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } [root@k8s_master1 ~]# ansible all -m ping //不需要输入密码 k8s_node1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } k8s_node2 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } --列出k8s_node主机组的所有主机-- [root@k8s_master1 ~]# ansible k8s_node --list-hosts hosts (2): k8s_node1 k8s_node2
自定义ansible.cfg配置文件:
1.创建自定义文件夹myansible
[root@k8s_master1 ~]# mkdir myansible
2.创建自定义配置文件ansible.cfg
[root@k8s_master1 ~]# cd myansible/ [root@k8s_master1 myansible]# cp -r /etc/ansible/ansible.cfg . [root@k8s_master1 myansible]# ll 总用量 20 -rw-r--r-- 1 root root 19978 8月 10 18:32 ansible.cfg [root@k8s_master1 myansible]# vim ansible.cfg //以下配置中的参数都是默认的,如果不需要修改某项参数的话,就不需要管(不需要取消注释),默认就好。 [defaults] inventory = /etc/ansible/hosts #library = /usr/share/my_modules/ #module_utils = /usr/share/my_module_utils/ #remote_tmp = ~/.ansible/tmp #local_tmp = ~/.ansible/tmp #plugin_filters_cfg = /etc/ansible/plugin_filters.yml #forks = 5 #poll_interval = 15 #sudo_user = root #ask_sudo_pass = True #ask_pass = True #transport = smart #remote_port = 22 #module_lang = C #module_set_locale = False
3.指定inventory配置自定义的hosts⽂件
注意:在ansible.cfg配置文件中指定inventory的hosts文件时,可以指定为相对路径(当前路径下),也可以指定为绝对路径,因为在使用自定义的ansible配置文件运行ansible时,都只能在自定义的文件夹中使用才可以识别。
[root@k8s_master1 myansible]# vim ansible.cfg //以下配置中的参数都是默认的,如果不需要修改某项参数的话,就不需要管(不需要取消注释),默认就好。 [defaults] inventory = myhosts 或者 /root/myansible/myhosts //取消注释,修改成相对路径或者绝对路径都不影响,因为都只能在当前文件夹/myansible中执行 #library = /usr/share/my_modules/ ...... [root@k8s_master1 myansible]# cat >> myhosts << EOF > [k8s] ---》这里为了与默认的ansible配置文件/etc/ansible/hosts中的主机组k8s_node区别,我们这里用k8s主机组 > k8s_node1 > k8s_node2 > EOF [root@k8s_master1 myansible]# ls ansible.cfg myhosts [root@k8s_master1 myansible]# pwd //查看当前路径 /root/myansible [root@k8s_master1 myansible]# cat myhosts [k8s] ---》这里为了与默认的ansible配置文件/etc/ansible/hosts中的主机组k8s_node区别,我们这里用k8s主机组 k8s_node1 k8s_node2
4.自定义配置文件测试:
4.1主机组k8s
---在自定义的ansible.cfg配置文件夹/root/myansible中执行ping主机组k8s--- [root@k8s_master1 myansible]# ansible k8s -m ping k8s_node2 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } k8s_node1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } ---退出自定义的ansible.cfg配置文件夹/root/myansible时执行ping主机组k8s--- [root@k8s_master1 myansible]# cd .. //退出自定义配置文件夹 [root@k8s_master1 ~]# ansible k8s -m ping [WARNING]: Could not match supplied host pattern, ignoring: k8s [WARNING]: No hosts matched, nothing to do
可以看到在我们退出自定义配置文件夹myansible后,再使用ansible命令ping我们myhosts文件中的k8s主机组时,就无法正常识别了。
当然,在我们自定义的ansible.cfg配置文件夹/root/myansible中执行ping主机组k8s_node(ansible安装完默认的inventory配置⽂件/etc/ansible/hosts中的主机组)时,肯定也是无法识别的。
[root@k8s_master1 ~]# cat /etc/ansible/hosts [k8s_node] k8s_node1 k8s_node2 [root@k8s_master1 ~]# cd myansible/ [root@k8s_master1 myansible]# ansible k8s_node -m ping [WARNING]: Could not match supplied host pattern, ignoring: k8s_node [WARNING]: No hosts matched, nothing to do
4.2主机组all
注意:在有自定义的配置文件时使用ansible操作主机组all时有两种情况,一是在自定义的配置文件夹中使用ansible控制主机组all时,就默认读取的是自定义配置文件夹中ansible.cfg定义的inventory的hosts文件,二是在其他路径下使用ansible控制主机组all时,则会默认读取ansible默认配置文件ansible.cfg中inventory的hosts文件。
- 验证 -:
1.先修改ansible默认的/etc/ansible/hosts配置文件
[root@k8s_master1 ~]# vim /etc/ansible/hosts [k8s_node] k8s_node1 k8s_node2 k8s_node3 //加入一个新的配置,用于验证
2.退出自定义配置文件夹/root/myansible时执行ping所有主机组all
[root@k8s_master1 ~]# ansible all -m ping k8s_node3 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname k8s_node3: Name or service not known", "unreachable": true } k8s_node1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } k8s_node2 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" }
从上面返回的结果我们可以看出,当我们在退出自定义配置文件夹/root/myansible后执行ping所有主机组all时,ansible默认是读取的ansible.cfg配置文件中指定inventory的hosts文件/etc/ansible/hosts中的配置。
3.进入自定义配置文件夹/root/myansible时执行ping所有主机组all
[root@k8s_master1 ~]# cd myansible/ [root@k8s_master1 myansible]# ansible all -m ping k8s_node2 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } k8s_node1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" }
可以看到在进入自定义的配置文件夹/root/myansible中使用ansible的ping模块操作所有主机组all时,就会默认读取自定义配置文件夹中ansible.cfg定义的inventory的hosts文件。
最终解决方案:
使用 -i 指定使用的配置文件
[root@k8s_master1 ~]# ansible all -m ping -i /root/myansible/myhosts k8s_node2 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } k8s_node1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } [root@k8s_master1 ~]# ansible all -m ping -i /etc/ansible/hosts k8s_node3 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname k8s_node3: Name or service not known", "unreachable": true } k8s_node1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } k8s_node2 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } [root@k8s_master1 myansible]# ansible all -m ping -i /root/myansible/myhosts k8s_node1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } k8s_node2 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } [root@k8s_master1 myansible]# ansible all -m ping -i /etc/ansible/hosts k8s_node3 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname k8s_node3: Name or service not known", "unreachable": true } k8s_node1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } k8s_node2 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" }
可以看到在我们使用了-i
选项来指定这一次ansible控制时使用的hosts配置文件时,无论我们当前在哪个文件夹中,都不影响此次ansible正确读取指定的配置文件。