linux-system-roles.kernel_settings

内核设置角色

ansible-lint.yml ansible-test.yml codeql.yml markdownlint.yml python-unit-test.yml shellcheck.yml tft.yml tft_citest_bad.yml woke.yml

这个角色用于修改内核设置。例如,在 Linux 上,设置位于 /proc/sys(使用 sysctl)、/sys/fs 和其他一些设置。它在企业 Linux 及其衍生系统(如 RHEL 和 CentOS)以及 Fedora 中使用 tuned 作为默认提供者。

需求

见下文

集合要求

如果您想使用此角色管理 rpm-ostree 系统,您需要安装附加的集合。请运行以下命令安装集合。

ansible-galaxy collection install -vv -r meta/collection-requirements.yml

角色变量

某些 kernel_settings_GROUP 参数的值是 dict 对象的 list。每个 dict 有以下键:

  • name - 通常需要 - 设置的名称,或 /sys 下的文件名(对于 sysfs 组)。使用 replaced 时省略 name
  • value - 通常需要 - 设置的值。使用 stateprevious 时省略 value。值不能是 YAML 布尔类型。一个可能的问题是使用 value: on 或其他 YAML 布尔类型的值。您必须将这些值用引号括起来,或作为 str 类型的值传递,例如 value: "on"
  • state - 可选 - 值 absent 表示从组中移除名称为 name 的设置 - 必须提供 name
  • previous - 可选 - 唯一值是 replaced - 用于指定组中的先前值应替换为给定值。

kernel_settings_sysctl

要使用 sysctl 应用的设置的 list。 设置的格式如上所述。请注意,设置是 累加的 - 默认情况下,每个设置都将添加到现有设置中,如果同名设置已存在则替换之。如果要移除特定设置,请使用 state: absent 而不是给出 value。如果要移除所有现有的 sysctl 设置并用给定的设置替换它们,请在列表中指定 previous: replaced 作为其中的一个值。如果要移除所有的 sysctl 设置,请将 dict{"state": "empty"} 作为参数的唯一值,而不是 list。请参见下文的示例。

kernel_settings_sysfs

要应用于 /sys 的设置的 list。设置的格式如上所述。请注意,设置是 累加的 - 默认情况下,每个设置都将添加到现有设置中,如果同名设置已存在则替换之。如果要移除特定设置,请使用 state: absent 而不是给出 value。如果要移除所有现有的 sysfs 设置并用给定的设置替换它们,请在列表中指定 previous: replaced 作为其中的一个值。如果要移除所有的 sysfs 设置,请将 dict{"state": "empty"} 作为参数的唯一值,而不是 list。请参见下文的示例。

kernel_settings_systemd_cpu_affinity

要设置值,请指定符合 https://www.freedesktop.org/software/systemd/man/systemd-system.conf.html#CPUAffinity= 的格式的 string。如果要移除设置,请使用 dict{"state": "absent"},而不是 string,作为参数的值。

kernel_settings_transparent_hugepages

要设置值,请指定以下之一的 string 值:always madvise never。这是内存子系统中透明大页的值。如果要移除设置,请使用 dict{"state": "absent"},而不是 string,作为参数的值。

kernel_settings_transparent_hugepages_defrag

要设置值,请指定以下之一的 string 值:always defer defer+madvise madvise never。这是内存子系统中透明大页的碎片处理值。实际支持的值可能因您的操作系统而异。如果要移除设置,请使用 dict{"state": "absent"},而不是 string,作为参数的值。

kernel_settings_purge

默认值为 false - 如果为 true,则现有配置将完全清除并替换为您给定的 kernel_settings_GROUP 设置。

kernel_settings_reboot_ok

默认值为 false - 如果为 true,则如果角色检测到某些更改需要重启才能生效,角色将重新启动管理主机。如果为 false,则由您决定何时重启管理主机。角色将返回变量 kernel_settings_reboot_required(见下文),其值为 true,表示某些更改已发生,需要重启以生效。

kernel_settings_transactional_update_reboot_ok

此变量用于处理事务更新所需的重启。如果事务更新需要重启,则如果 kernel_settings_transactional_update_reboot_ok 设置为 true,角色将继续重启。如果设置为 false,角色将通知用户需要重启,以便自定义处理重启要求。如果此变量未设置,角色将无法确保重启要求不会被忽视。

角色导出的变量

角色将导出以下变量:

kernel_settings_reboot_required - 默认值 false - 如果为 true,则表示发生了更改,需要重启管理主机以使其生效。如果您希望角色重启管理主机,请设置 kernel_settings_reboot_ok: true,否则您需要自行处理重启。

设置用法示例

kernel_settings_sysctl:
  - name: fs.epoll.max_user_watches
    value: 785592
  - name: fs.file-max
    value: 379724
kernel_settings_sysfs:
  - name: /sys/kernel/debug/x86/pti_enabled
    value: 0
  - name: /sys/kernel/debug/x86/retp_enabled
    value: 0
  - name: /sys/kernel/debug/x86/ibrs_enabled
    value: 0
kernel_settings_systemd_cpu_affinity: "1,3,5,7"
kernel_settings_transparent_hugepages: madvise
kernel_settings_transparent_hugepages_defrag: defer

注意list 值的设置是 累加的。也就是说,它们是 在现有设置之外 应用的。例如,如果您已经有

kernel_settings_sysctl:
  - name: kernel.threads-max
    value: 29968
  - name: vm.max_map_count
    value: 65530

然后在应用上面的设置后,您会有:

kernel_settings_sysctl:
  - name: kernel.threads-max
    value: 29968
  - name: vm.max_map_count
    value: 65530
  - name: fs.epoll.max_user_watches
    value: 785592
  - name: fs.file-max
    value: 379724

这允许多个更高级别的角色或剧本使用此角色来提供该组件特定的内核设置。例如,如果您在同一台机器上安装网页服务器和数据库服务器,并且它们都需要设置内核参数,kernel_settings 角色允许您同时设置它们。

如果您在一个部分中指定多个同名设置,将使用最后一个。

如果您想用提供的值替换 所有 设置,请使用 previous: replaced 作为设置列表中的唯一(优先放在首位)元素。这表示系统中的 previous 设置应被给定的设置 replaced。例如:

kernel_settings_sysctl:
  - previous: replaced
  - name: kernel.threads-max
    value: 30000
  - name: vm.max_map_count
    value: 50000

这将删除所有现有的 kernel_settings_sysctl 设置,并添加指定的设置。如果要移除单个设置,请在单个设置中指定 state: absent,而不是 value

kernel_settings_sysctl:
  - name: kernel.threads-max
    value: 30000
  - name: vm.max_map_count
    state: absent

这将从 kernel_settings_sysctl 设置中移除 vm.max_map_count 设置。如果要从组中移除所有设置,请将 state: empty 作为 dict 指定,而不是 list

kernel_settings_sysctl:
  state: empty

这将移除所有 kernel_settings_sysctl 设置。

使用 {"state":"absent"} 移除一个标量值参数。例如,要移除所有 kernel_settings_systemd_cpu_affinitykernel_settings_transparent_hugepageskernel_settings_transparent_hugepages_defrag 设置,可以使用以下内容:

kernel_settings_systemd_cpu_affinity:
  state: absent
kernel_settings_transparent_hugepages:
  state: absent
kernel_settings_transparent_hugepages_defrag:
  state: absent

示例剧本

- name: 管理内核设置
  hosts: all
  vars:
    kernel_settings_sysctl:
      - name: fs.epoll.max_user_watches
        value: 785592
      - name: fs.file-max
        value: 379724
      - name: kernel.threads-max
        state: absent
    kernel_settings_sysfs:
      - name: /sys/kernel/debug/x86/pti_enabled
        value: 0
      - name: /sys/kernel/debug/x86/retp_enabled
        value: 0
      - name: /sys/kernel/debug/x86/ibrs_enabled
        value: 0
    kernel_settings_systemd_cpu_affinity: "1,3,5,7"
    kernel_settings_transparent_hugepages: madvise
    kernel_settings_transparent_hugepages_defrag: defer
  roles:
    - linux-system-roles.kernel_settings

警告

使用 tuned 实现时,kernel_settings 角色将导致应用其他 sysctl 设置,这是默认行为。这可能发生在您手动编辑 /etc/sysctl.d/ 文件,或如果某个系统包安装了 sysctl.d 文件时。例如,在 Fedora 上,安装 libreswan 包提供 /etc/sysctl.d/50-libreswan.conf。使用 kernel_settings 角色将导致此文件重新加载和重新应用。如果不希望这种行为,您需要在托管主机的 /etc/tuned/tuned-main.conf 中编辑 tuned 配置,并将 reapply_sysctl=0 设置为 0

您使用 kernel_settings 角色应用的设置可能与其他设置冲突。例如,如果您手动运行 sysctl 命令、手动编辑 /etc/sysctl.d/ 文件,或者如果某个系统包安装了 sysctl.d 文件,它们可能会设置与您使用 kernel_settings 角色设置相同的值。对于 sysctl 设置,优先级如下:

  • sysctl 文件具有最高优先级 - /etc/sysctl.conf/etc/sysctl.d/* 将覆盖所有内容
  • kernel_settings 角色设置具有第二高优先级
  • 手动使用 sysctl 命令设置的设置优先级最低

对于其他所有设置,如 sysfs,来自 kernel_settings 角色的设置具有最高优先级。

rpm-ostree

请参见 README-ostree.md

许可证

tuned 相关的某些部分是 GPLv2+。这些在文件的头部中有所说明。其他所有部分是 MIT 许可,除非另有说明。有关更多信息,请参见文件 LICENSE

作者信息

Rich Megginson (richm 在 github 上,rmeggins 在我的公司)

安装
ansible-galaxy install linux-system-roles.kernel_settings
许可证
other
下载
5.8k