Menu Close

22.2. 使用 kernel Settings 角色应用所选内核参数

按照以下步骤准备并应用 Ansible playbook 来远程配置内核参数,从而对多个受管操作系统产生持久性。

先决条件

  • root 权限。
  • RHEL 订阅授权,您将在控制机器上安装 ansible-corerhel-system-roles 软件包。
  • 受管主机清单存在于控制计算机上,Ansible 能够连接它们。
重要

RHEL 8.0 - 8.5 提供对基于 Ansible 的自动化需要 Ansible Engine 2.9 的独立 Ansible 存储库的访问权限。Ansible Engine 包含命令行实用程序,如 ansibleansible-playbook; 连接器,如 dockerpodman; 以及插件和模块的整个环境。有关如何获取并安装 Ansible Engine 的信息,请参阅如何下载和安装 Red Hat Ansible Engine?

RHEL 8.6 和 9.0 引入了 Ansible Core(以 ansible-core RPM 提供),其中包含 Ansible 命令行工具、命令以及小型内置 Ansible 插件。AppStream 存储库提供 ansible-core,它的范围有限。如需更多信息,请参阅 RHEL 9 AppStream 中包含的 ansible-core 软件包的范围

步骤

  1. 另外,还可查看 清单(inventory)文件 :

    #  cat /home/jdoe/<ansible_project_name>/inventory
    [testingservers]
    pdoe@192.168.122.98
    fdoe@192.168.122.226
    
    [db-servers]
    db1.example.com
    db2.example.com
    
    [webservers]
    web1.example.com
    web2.example.com
    192.0.2.42

    该文件定义 [testingservers] 组和其他组。它允许您对特定的系统集合更有效地运行 Ansible。

  2. 创建配置文件来为 Ansible 操作设置默认值和特权升级。

    1. 创建新 YAML 文件,并在文本编辑器中打开,例如:

      #  vi /home/jdoe/<ansible_project_name>/ansible.cfg
    2. 将以下内容插入到文件中:

      [defaults]
      inventory = ./inventory
      
      [privilege_escalation]
      become = true
      become_method = sudo
      become_user = root
      become_ask_pass = true

      [defaults] 部分指定受管主机清单文件的路径。[privilege_escalation] 部分定义用户特权转移到指定受管主机上的 root。这对成功配置内核参数是必需的。运行 Ansible playbook 时,会提示您输入用户密码。用户在连接到受管主机后,通过 sudo 自动切换为 root

  3. 创建使用 Kernel Settings 角色的 Ansible playbook。

    1. 创建新 YAML 文件,并在文本编辑器中打开,例如:

      #  vi /home/jdoe/<ansible_project_name>/kernel-roles.yml

      此文件代表一个 playbook,通常包含了一组有特定顺序的任务(也称为 play )列表。这些任何会根据 inventory 文件中选择的特定管理主机进行。

    2. 将以下内容插入到文件中:

      ---
      -
        hosts: testingservers
        name: "Configure kernel settings"
        roles:
          - rhel-system-roles.kernel_settings
        vars:
          kernel_settings_sysctl:
            - name: fs.file-max
              value: 400000
            - name: kernel.threads-max
              value: 65536
          kernel_settings_sysfs:
            - name: /sys/class/net/lo/mtu
              value: 65000
          kernel_settings_transparent_hugepages: madvise

      name 键是可选的。它将一个任意字符串作为标签与该 play 关联,并确定该 play 的用途。Play 中的 hosts 键指定对其运行 play 的主机。此键的值或值可以作为被管理的主机的单独名称提供,也可以作为 inventory 文件中定义的一组主机提供。

      vars 部分代表包含所选内核参数名称和值的变量列表。

      roles 键指定系统角色将配置 vars 部分中提到的参数和值。

      注意

      您可以修改 playbook 中的内核参数及其值以符合您的需要。

  4. (可选)验证 play 中的语法是否正确。

    #  ansible-playbook --syntax-check kernel-roles.yml
    
    playbook: kernel-roles.yml

    本例演示了对 playbook 的成功验证。

  5. 执行 playbook。

    #  ansible-playbook kernel-roles.yml
    
    ...
    
    BECOME password:
    
    PLAY [Configure kernel settings] **********************************************************************************
    
    
    
    PLAY RECAP ********************************************************************************************************
    fdoe@192.168.122.226       : ok=10   changed=4    unreachable=0    failed=0    skipped=6    rescued=0    ignored=0
    pdoe@192.168.122.98        : ok=10   changed=4    unreachable=0    failed=0    skipped=6    rescued=0    ignored=0

    在 Ansible 运行 playbook 之前,会提示您输入密码,以便受管主机上的用户可以切换到 root,这在配置内核参数时是必需的。

    recap 部分显示 play 成功完成所有受管主机 (failed=0),并且已应用了 4 个内核参数 (changed=4)。

  6. 重启您的受管主机并检查受影响的内核参数,以验证是否应用了更改并在重启后保留。

其他资源