ITPub博客

首页 > 数据库 > 数据库开发技术 > Ansible自动化运维工具2.0:主机清单的合理应用

Ansible自动化运维工具2.0:主机清单的合理应用

原创 数据库开发技术 作者:运维book思议 时间:2023-09-30 18:01:00 0 删除 编辑

先放个链接,万一有人关注呢

优质文章推荐

↓ ↓ ↓ ↓ ↓

Linux系统服务巡检脚本

Python脚本实现Zabbix自动微信告警

很多人安装了Ubuntu第一步就做错了

Linux系统不优化的后果有多严重?

不会吧!Linux系统磁盘分区只会fdisk吗?



书接上回:Ansible自动化运维工具1.0:核心组件

主机组名

当使用Ansible批量执行命令或批量部署服务时,主机清单的优势就体现出来了。在主机清单中,将所有机器分成不同的组并定义不同的组名,运行命令时只需要指定特定的组名就能达到批量操作的目的。

修改主机清单

[webserver]host1host2host3

上述内容中“ webserver”是组的名称,组名下是该组中包括的主机名。

既然添加了组名,那么就可以通过制定组名来控制被管理节点,在管理节点执行以下命令。

ansible webserver -m ping

用户与密码

将被管理节点用户信息写入到主机清单中,即可取消密钥,实现免密连接。

删除管理节点中的秘钥

[root@ansible ~]# ls -a.                .ansible       .bash_profile  init1.sh  .tcshrc..               .bash_history  .bashrc        .pki      .viminfoanaconda-ks.cfg  .bash_logout   .cshrc         .ssh[root@ansible ~]# ls .sshid_rsa  id_rsa.pub  known_hosts[root@ansible ~]# rm -rf .ssh/id_rsa .ssh/id_rsa.pub

秘钥删除后,管理节点将无法连接被管理节点。

修改主机清单文件,在主机清单中添加被管理节点的用户与密码,内容如下

[webserver]host1 ansible_ssh_user='root' ansible_ssh_pass='1'host2 host3

这里只给host1配置了用户与密码。

尝试连接各个节点

ansible webserver -m ping

输出结果如下

host2 | UNREACHABLE! => {    "changed": false,     "msg": "Failed to connect to the host via ssh: ssh: connect to host host2 port 22: Connection refused",     "unreachable": true}host3 | UNREACHABLE! => {    "changed": false,     "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).",     "unreachable": true}host1 | SUCCESS => {    "ansible_facts": {        "discovered_interpreter_python": "/usr/bin/python"    },     "changed": false,     "ping": "pong"}

上述结果中,只有host1输出的是“SUCCESS”,也就是说,只有host1连接成功,而没有配置用户名与密码的被管理节点则无法被管理节点连接。

当拥有多个被管理节点时,则需要在主机清单中的每个被管理节点都添加用户名与密码,这将是一个较为繁琐的过程。所以Ansible能够支持一些更加便利的主机清单管理方式。

修改主机清单内容如下

[webserver]host[1:3] ansible_ssh_user='root' ansible_ssh_pass='1'

由于3台被管理节点的主机名只有最后的数字不同,所以可以简写为“host[1:3]”来表示3台被管理节点。这样只需要添加一条用户信息即可,前提是3台被管理节点的用户名与密码都是相同的。

再次尝试连接被管理节点

ansible webserver -m ping

输出结果如下

host1 | SUCCESS => {    "ansible_facts": {        "discovered_interpreter_python": "/usr/bin/python"    },     "changed": false,     "ping": "pong"}host2 | SUCCESS => {    "ansible_facts": {        "discovered_interpreter_python": "/usr/bin/python"    },     "changed": false,     "ping": "pong"}host3 | SUCCESS => {    "ansible_facts": {        "discovered_interpreter_python": "/usr/bin/python"    },     "changed": false,     "ping": "pong"}

此时管理节点已经可以连接到上述3台被管理节点。

端口信息

当Ansible用ping模块去测试被管理节点的SSH连接状态时,使用的是SSH协议的默认端口。通常,在企业中为了网站的安全性,会修改一些协议的默认端口,如此一来,Ansible便无法通过默认端口连接被管理节点。下面我们针对这一情况做出相应的解决方法。

先修改任意一台被管理节点的SSH端口。编辑/etc/ssh/sshd_config文件:

vim /etc/ssh/sshd_config

修改端口内容

...Port 2222...

这里将被管理节点host2的SSH服务端口修改为2222,重新启动即可生效。

reboot

此时,管理节点已经无法连接到该节点,不信邪的同学可以试试。

在主机清单中配置端口信息,如下:

[webserver]host[1:3] ansible_ssh_user='root' ansible_ssh_pass='1'host2 ansible_ssh_port='2222'

需要注意的是,刚刚修改的是哪个节点的端口就配置哪个节点,不要搞混了。

主机清单配置完成后,就可以连接到被管理节点了。

ansible webserver -m ping

变量

在Ansible中的变量分为内部变量与自定义变量,通过在主机清单中添加一些变量能够使用户管理更加便捷。在主机清单中添加被管理节点的用户名与密码的手段就是在往主机清单中添加变量。

常见的Ansible变量如下。

变量
说明

ansible_ssh_host

定义hosts ssh地址

ansible_ssh_port

定义hosts ssh端口

ansible_ssh_user

定义hosts ssh认证用户

ansible_ssh_pass

定义hosts ssh认证密码

ansible_sudo

定义hosts sudo用户

ansible_sudo_pass

定义hosts sudo密码

ansible_sudo_exe

定义hosts sudo路径

ansible_connection

定义hosts连接方式

ansible_ssh_private_key_file

定义hosts私钥

当需要对一个主机组添加一些变量时,可以为这个主机组配置一个专属的变量组,如下

#主机组[webserver]host1host2host3#变量组[webserver:vars]ansible_ssh_user='root'ansible_ssh_pass='1'

需要注意的是,变量组的命名格式必须是“[主机组名:vars]”。

子分组

创建子分组也是一种简化主机清单的方式。简而言之,就是在分组中创建分组。

修改主机清单,如下

#子分组[apache]host1#子分组[nginx]host[2:3]#主机组[webserver:children]apachenginx...

上述配置中,webserver组中包含了apache组和nginx组,apache组和nginx组同时存在于webserver组中,三个组名可以随意调用。此处需要注意的是,当分组中包含子分组时,分组名称的命名格式必须是“[分组名:children]”。

分别连接三个组中的节点都是成功的

ansible apache -m pingansible nginx -m pingansible webserver -m ping

自定义主机清单

当用户面临数量不断增多的主机时,可以创建多个主机清单,甚至可以存放到不同的路径下。

在/tmp下创建一个主机清单

cd  /tmpvim hostlist

主机清单内容如下

[docker]host1host2host3

在使用该主机清单对节点进行管理时,需要使用-i选项来指定主机清单,如下:

ansible -i /tmp/hostlist docker -m ping

这条命令中,/tmp/hostlist是主机清单的路径,docker是主机清单中的主机组名称。

未完待续。。。。。。

来不及解释了,快上车!(进群看公告)

欢迎新的小伙伴加入!在这里,我们鼓励大家积极参与群内讨论和交流,分享自己的见解和经验,一起学习和成长。同时,也欢迎大家提出问题和建议,让我们不断改进和完善这个平台。

              ↓↓↓ 点个在看,无需赞赏!

原文作者:运维book思议;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2022-09-24

  • 博文量
    333
  • 访问量
    215273