第 4 章 使用 RHEL 系统角色监控性能
作为系统管理员,您可以使用 metrics
RHEL 系统角色监控系统性能。
4.1. 准备控制节点和受管节点以使用 RHEL 系统角色
在使用单独的 RHEL 系统角色管理服务和设置之前,您必须准备控制节点和受管节点。
4.1.1. 在 RHEL 9 中准备控制节点
在使用 RHEL 系统角色前,您必须配置控制节点。然后,此系统会根据 playbook 从清单中配置受管主机。
前提条件
- 已安装 RHEL 8.6 或更高版本。有关安装 RHEL 的更多信息,请参阅 执行标准的 RHEL 9 安装。
- 该系统在客户门户网站中注册。
-
Red Hat Enterprise Linux Server
订阅已附加到系统。 -
如果在客户门户网站帐户中可用,则会将
Ansible Automation Platform
订阅附加到该系统。
流程
安装
rhel-system-roles
软件包:[root@control-node]# dnf install rhel-system-roles
此命令将
ansible-core
软件包安装为依赖项。注意在 RHEL 8.5 及更早的版本中,Ansible 软件包通过 Ansible Engine 而不是 Ansible Core 提供,以及不同的支持级别。不要使用 Ansible Engine,因为软件包可能与 RHEL 8.6 及之后的版本中的 Ansible 自动化内容不兼容。如需更多信息,请参阅 RHEL 9 和 RHEL 8.6 及更新的 AppStream 软件仓库中包含的 Ansible Core 软件包的支持范围。
创建名为
ansible
的用户,以管理并运行 playbook:[root@control-node]# useradd ansible
切换到新创建的
ansible
用户:[root@control-node]# su - ansible
以这个用户身份执行其余步骤。
创建 SSH 公钥和私钥:
[ansible@control-node]$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/ansible/.ssh/id_rsa): <password> ...
为密钥文件使用推荐的默认位置。
- 可选: 要防止 Ansible 每次建立连接时提示您输入 SSH 密钥密码,请配置 SSH 代理。
使用以下内容创建
~/.ansible.cfg
文件:[defaults] inventory = /home/ansible/inventory remote_user = ansible [privilege_escalation] become = True become_method = sudo become_user = root become_ask_pass = True
注意~/.ansible.cfg
文件中的设置具有更高的优先级,并覆盖全局/etc/ansible/ansible.cfg
文件中的设置。使用这些设置,Ansible 执行以下操作:
- 管理指定清单文件中的主机。
-
当帐户建立与受管节点的 SSH 连接时,请使用
remote_user
参数中设置的帐户。 -
使用
sudo
实用程序以root
用户身份对受管节点执行任务。 - 每次应用 playbook 时,都会提示输入远程用户的 root 密码。出于安全考虑,建议使用它。
创建列出受管主机主机名的 INI 或 YAML 格式的
~/inventory
文件。您还可以在清单文件中定义主机组。例如,以下是 INI 格式的清单文件,它有三个主机,以及一个名为US
的主机组:managed-node-01.example.com [US] managed-node-02.example.com ansible_host=192.0.2.100 managed-node-03.example.com
请注意,控制节点必须能够解析主机名。如果 DNS 服务器无法解析某些主机名,请在主机条目旁边添加
ansible_host
参数来指定其 IP 地址。
后续步骤
- 准备受管节点。如需更多信息 ,请参阅准备受管节点。
4.1.2. 准备受管节点
受管节点是清单中列出的系统,它由控制节点根据 playbook 配置。您不必在受管主机上安装 Ansible。
前提条件
- 您已准备好了控制节点。如需更多信息,请参阅在 RHEL 9 上准备控制节点。
您有控制节点的 SSH 访问权限。
重要以
root
用户身份直接进行 SSH 访问是一个安全风险。要降低这个风险,您将在此节点上创建一个本地用户,并在准备受管节点时配置sudo
策略。然后,控制节点上的 Ansible 可以使用本地用户帐户登录受管节点,并以不同的用户(如root
)运行 playbook。
流程
创建名为
ansible
的用户:[root@managed-node-01]# useradd ansible
控制节点稍后使用这个用户建立与这个主机的 SSH 连接。
为
ansible
用户设置密码:[root@managed-node-01]# passwd ansible Changing password for user ansible. New password: <password> Retype new password: <password> passwd: all authentication tokens updated successfully.
当 Ansible 使用
sudo
以root
用户身份执行任务时,您必须输入此密码。在受管主机上安装
ansible
用户的 SSH 公钥:以
ansible
用户身份登录控制节点,并将 SSH 公钥复制到受管节点:[ansible@control-node]$ ssh-copy-id managed-node-01.example.com /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ansible/.ssh/id_rsa.pub" The authenticity of host 'managed-node-01.example.com (192.0.2.100)' can't be established. ECDSA key fingerprint is SHA256:9bZ33GJNODK3zbNhybokN/6Mq7hu3vpBXDrCxe7NAvo.
提示时,输入
yes
进行连接:Are you sure you want to continue connecting (yes/no/[fingerprint])? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
提示时,输入密码:
ansible@managed-node-01.example.com's password: <password> Number of key(s) added: 1 Now try logging into the machine, with: "ssh '<managed-node-01.example.com>'" and check to make sure that only the key(s) you wanted were added.
通过在控制节点上远程执行命令来验证 SSH 连接:
[ansible@control-node]$ ssh <managed-node-01.example.com> whoami ansible
为
ansible
用户创建sudo
配置:使用
visudo
命令创建并编辑/etc/sudoers.d/ansible
文件:[root@managed-node-01]# visudo /etc/sudoers.d/ansible
在正常编辑器中使用
visudo
的好处是,该实用程序提供基本的健全检查和检查是否有解析错误,然后再安装该文件。在
/etc/sudoers.d/ansible
文件中配置满足您要求的sudoers
策略,例如:要为
ansible
用户授予权限,以便在输入ansible
用户密码后在此主机上以任何用户和组身份来运行所有命令,请使用:ansible ALL=(ALL) ALL
要向
ansible
用户授予权限,以便在不输入ansible
用户密码的情况下在该主机上以任何用户和组身份来运行所有命令,请使用:ansible ALL=(ALL) NOPASSWD: ALL
或者,配置匹配您安全要求的更精细的策略。有关
sudoers
策略的详情,请查看sudoers (5)
手册页。
验证
验证您可以在所有受管节点的控制节点中执行命令:
[ansible@control-node]$ ansible all -m ping BECOME password: <password> managed-node-01.example.com | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" } ...
硬编码的所有组都会动态包含清单文件中列出的所有主机。
使用 Ansible
command
模块在受管主机上运行whoami
工具来验证特权升级是否正常工作:[ansible@control-node]$ ansible managed-node-01.example.com -m command -a whoami BECOME password: <password> managed-node-01.example.com | CHANGED | rc=0 >> root
如果命令返回 root,您可以在受管节点上正确配置
sudo
。
其他资源
- 在 RHEL 9 上准备控制节点。
-
sudoers (5)
手册页