做网站在阿里云上面买哪个服务,智慧团建电脑版注册登录入口,公司logo设计生成器,网站建设有什么价值第28章 ansible的使用
本章主要介绍在 RHEL8 中如何安装 ansible 及 ansible的基本使用。 ◆ ansible 是如何工作的 ◆ 在RHEL8 中安装ansible ◆ 编写 ansible.cfg 和清单文件 ◆ ansible 的基本用法 文章目录 第28章 ansible的使用28.1 安装ansible28.2 编写ansible.cfg和清…第28章 ansible的使用
本章主要介绍在 RHEL8 中如何安装 ansible 及 ansible的基本使用。 ◆ ansible 是如何工作的 ◆ 在RHEL8 中安装ansible ◆ 编写 ansible.cfg 和清单文件 ◆ ansible 的基本用法 文章目录 第28章 ansible的使用28.1 安装ansible28.2 编写ansible.cfg和清单文件28.3 ansible的基本用法作业 如果管理的服务器很多 如几十台甚至几百台那么就需要一个自动化管理工具了ansible就是这样的一种自动化管理工具。 ansible 是通过ssh 连接到被管理主机然后执行相关操作的如图28-1 所示。 ansible 主机通过ssh 连接到被管理主机时需要提前设置密钥登录使得从 ansible 主 机可以无密码登录到被管理主机。
本实验的拓扑图如图28-2所示。 这里server 是 ansible 主机以lduan用户登录。server2和 server3 是被管理主机在这两 台主机上创建lduan用户并配置好 sudo, 使得这两台主机上的Iduan用户通过sudo -i 可 以 无 密码切换到 root, 下面开始配置。
28.1 安装ansible
先 使 用 root 用户登录 server在 其 上 配 置 epel 源命令如下。
[rootserver ~]# yum install -y https://mirrors.aliyun.com/epel/epel- release-latest-8.noarch.rpm
[rootserver ~]# sed -i s|^#baseurlhttps://download.fedoraproject.org/publbaseurlhttps://mirrors.aliyun.com| /etc/yum.repos.d/epel*
[rootserver ~]# sed -i s|^metalink|#metalink| /etc/yum.repos.d/epel*
[rootserver ~]#在 server 上安装 ansible, 命令如下。
[rootserver ~]# yum install ansible -y
Updating Subscription Management repositories.
Unable to read consumer identity...输出...
[rootserver ~]#
如果安装有问题可以到 htps://www.thce.cc/3940.html 下载ansible 的离线包。
查看 ansible 的版本命令如下。
[rooteserver ~]# ansible --version
ansible 2.9.27
config file /etc/ansible/ansible.cfg
...输出...
[rootserver ~]#这里安装的ansible 的版本是2.9.27同时也显示 ansible的默认配置是/etc/ansible/ansible.cfg。 还要确保 ansible 主机能够解析所有的被管理机器这里通过配置/etc/hosts 来实现/etc/hosts 的内容如下。
[rootserver ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.26.101 server.rhce.cc server
192.168.26.102 server2.rhce.cc server2
192.168.26.103 server3.rhce.cc server3
[rootserver ~]#在 server2 和 server3 两台机器上确认已经创建好了lduan用户如果没有请自行创建然后配置好 sudo, 命令如下。
[rooteserver2 ~]# cat /etc/sudoers.d/lduan
lduan ALL(root) NOPASSWD:ALL
[rootserver2 ~]#[rootserver3 ~]#cat /etc/sudoers.d/lduan
lduan ALL(root) NOPASSWD:ALL
[rootserver3 ~]#这样在这两台机器上lduan 用户通过sudo -i可以无密码切换到root用户。
使 用lduan 用户登求server, 配置好ssh 秘钥登录使得lduan 用户可以无密码登录到server2 和 server3, 命令如下。
[lduanserver ~]$ ssh server2
Activate the web console with:systemctl enable --now cockpit.socket
...输出...
[lduanserver2 ~]$ exit
注销
Connection to server2 closed.
[lduanserver ~]$ ssh server3
Activate the web console with:systemctl enable -now cockpit.socket ...输出...
[lduanserver3 ~]$ exit
注销
Connection to server3 closed.
[lduanserver ~]$28.2 编写ansible.cfg和清单文件
执行 ansible 或 ansible-playbook 命令时优先使用当前目录中 ansible.cfg 的配置。如果当前目录中没有则使用默认的/etc/ansible.cfg 中的配置。
下面的操作都是 server上的 lduan用户操作的先在家目录下创建ansible.cfg,内容如下。
[1duanserver ~]$ cat ansible.cfg
[defaults]
inventory ./hosts[privilege_escalation]
becomeTrue
become_methodsudo
become_userroot这里在 [defaults] 字段下只添加了一句inventory ./hosts,表示把当前目录下名称为 hosts的文件当作清单文件(什么是清单文件马上就要讲到)。
在 [privilege_escalation] 字段下定义了如何提升权限因为是使用lduan 用户登录到被管理主机的所以需要提升权限。这个字段下写了3条分别如下。
(1)becomeTrue: 登录到被管理主机时要切换到其他用户。
(2)become_methodsudo: 以 sudo的方式切换。
(3)become_userroot: 切换到 root 用户。
这三句的意思是当用ssh 登录到被管理主机时以sudo的方式切换到 root, 这也是为什么一开始要在被管理主机上配置好 sudo 的原因。
所有的被管理机器都要写入清单文件中。在实验环境中有两台被管理主机那么分别写在hosts 中内容如下。
[lduanserver ~]$ cat hosts
server2
server3
[lduanserver ~]$这里一行一台主机我们在使用 ansible或 ansible-playbook 命令时指定的主机名必须是这个名称才行。要确保能解析 server2 和 server3, 写成相应的IP 也可以。
如果环境中被管理的主机很多把主机一台台地写进去太冗繁所以可以改成如下写法。
[lduanserver ~]$ cat hosts
server2
server3
server[10:15]这里加了一行 server[10:15], 表示 server10到 server15, 这样在清单文件中就写了8台主机(需要注意的是在我们的练习环境中 server10 到 server15不存在)。
如果在执行 ansible 命令时只是想在部分主机上执行那么在清单文件中可以对主机进行 分组。定义主机组时组名写在中括号“[]”中在[]下面写的主机名都属于这个组直到定义下一个组的位置为止。修改清单文件的内容如下。
[lduanserver ~]$ cat hosts
server2
server3
server[10:15][db1]
server[2:5][db2]
server6
gerver7这里定义了两个主机组db1和 db2db1组中包括的主机有server2到server5db2组中包括的主机有server6和server7。
如果想定义一个主机组这个组中包括 db1和 db2 两个主机组的主机可以用children 关键字修改 hosts 的内容如下。
[lduaneserver ~]s cat hosts
server2
server3
server[10:15][db1]
server[2:5][db2]
server6
server7[db3:children]
db1
db2这里定义了一个主机组 db3, 但是后面加了“:children”,则这个主机组下面的 db1 和 db2 就 不再表示主机了而是表示主机组。所以 db3 这个主机组中所包括的主机是 server2 到 server5及server6 和 server7这6台主机。
下面查看每个主机组中有多少主机。首先查看主机组 db1 中的主机命令如下。
[lduanserver ~]$ ansible db1 --list-hostshosts(4):server2server3server4server5
[1duanserver ~]$共4台主机。查看主机组 db2 中的主机命令如下。
[lduan2server ~]$ ansible db2 --list-hostshosts (2):server6server7共2台主机。查看主机组 db3中的主机命令如下。
[lduan2server ~]$ ansible db3 --list-hosts hosts (6):server2server3server4server5server6server7共6台主机与分析的是一样的。还有一个内置主机组叫作 all表示所有主机。
了解了清单文件的写法之后最终把清单文件写成如下内容。
[lduaneserver ~]$ cat hosts
server2
server3
[db]
server2
server3
[lduanserver ~]$这里就包括了一个主机组 db, 里面含有 server2 和 server3。
28.3 ansible的基本用法
ansible 的基本用法如下。
ansible 机器名 -m 模块x -a 模块的参数这里的机器名必须出现在清单文件中整体的意思是在指定的机器上执行模块x 。例如在 server2 上执行 hostname 命令命令如下。
[lduanserver ~]$ ansible server2 -m shell -a hostname
server2 | CHANGED | rc0
server2.rhce.cc
[lduanserver ~]$shell 模块用于执行操作系统命令执行的命令就作为shell 模块的参数这里在-a 中写 要执行的系统命令。所以上面的命令就是在 server2上执行 hostname 命令显示的结果是seryer2.rhce.cc.
要完成不同的任务就需要调用不同的模块来实现系统中存在的所有ansible 模块可以通过 ansible-doc -1来查看。
不同的模块有不同的参数模块的参数及使用方法可以通过“ansible-doc 模块名”来查看。
我们将在第29章中讲解常见的 ansible 模块。
作业
在 lduan 家目录下编写ansible.cfg, 满足如下要求。
(1) 使用文件/home/lduan/hosts作为清单文件。 (2) 当lduan 用户登录到被管理主机时能自动通过 sudo 切换到 root 用户。 编写清单文件/home/lduan/hosts, 要求定义一个名称为db 的主机组里面包含2台 主机 server2 和 server3。 在 db 主机组中的主机上执行一条系统命令 whoami。