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 и некоторых других местах. Она использует tuned в качестве поставщика по умолчанию для Enterprise Linux и его производных (RHEL и CentOS), а также Fedora.

Требования

Смотрите ниже.

Требования к коллекции

Если вы хотите управлять системами rpm-ostree с помощью этой роли, вам нужно будет установить дополнительные коллекции. Пожалуйста, выполните следующую команду для установки коллекции.

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

Переменные роли

Значения для некоторых параметров kernel_settings_GROUP должны быть списком объектов dict. Каждый dict имеет следующие ключи:

  • name - Обычно требуется - Имя настройки или имя файла в /sys для группы sysfs. name пропускается при использовании replaced.
  • value - Обычно требуется - Значение для настройки. value пропускается при использовании state или previous. Значения не должны быть YAML bool типом. Одна из ситуаций, когда это может быть проблемой, это использование value: on или другого значения типа YAML bool. Вы должны заключить эти значения в кавычки или передать их как значение типа str, например, value: "on".
  • state - Опционально - значение absent означает, что нужно удалить настройку с именем name из группы - name должен быть предоставлен.
  • previous - Опционально - единственное значение replaced - используется для указания, что предыдущие значения в группе должны быть заменены новыми значениями.

kernel_settings_sysctl

Список настроек, которые будут применены с помощью sysctl. Настройки заданы в формате, описанном выше. Обратите внимание, что настройки являются добавочными - по умолчанию каждое новое значение добавляется к существующим настройкам или заменяет настройку с таким же именем, если она уже существует. Если вы хотите удалить конкретную настройку, используйте state: absent вместо предоставления value. Если вы хотите удалить все существующие настройки sysctl и заменить их на указанные, укажите previous: replaced в списке значений. Если вы хотите удалить все настройки sysctl, используйте значение типа dict {"state": "empty"} вместо list. Смотрите ниже для примеров.

kernel_settings_sysfs

Список настроек, которые будут применены к /sys. Настройки указаны в описанном выше формате. Обратите внимание, что настройки являются добавочными - по умолчанию каждое новое значение добавляется к существующим настройкам или заменяет настройку с таким же именем, если она уже существует. Чтобы удалить конкретную настройку, используйте 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=. Если хотите удалить настройку, используйте значение {"state": "absent"} вместо строки в качестве значения для параметра.

kernel_settings_transparent_hugepages

Чтобы установить значение, укажите одно из следующих строковых значений: always, madvise, never. Это значение настраивает прозрачные большие страницы в подсистеме памяти. Если хотите удалить настройку, используйте значение {"state": "absent"} вместо строки в качестве значения для параметра.

kernel_settings_transparent_hugepages_defrag

Чтобы установить значение, укажите одно из следующих строковых значений: always, defer, defer+madvise, madvise, never. Это значение управляет фрагментацией прозрачных больших страниц в подсистеме памяти. Фактические поддерживаемые значения могут отличаться в зависимости от вашей ОС. Если хотите удалить настройку, используйте значение {"state": "absent"} вместо строки в качестве значения для параметра.

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 в качестве единственного, желательно первого элемента в списке настроек. Это указывает, что предыдущие настройки в системе должны быть заменены на указанные. Например:

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

Это удалит настройку vm.max_map_count из настроек kernel_settings_sysctl. Если вы хотите удалить все настройки из группы, укажите state: empty как dict, вместо list:

kernel_settings_sysctl:
  state: empty

Это приведет к удалению всех настроек kernel_settings_sysctl.

Используйте {"state":"absent"} для удаления скалярного параметра. Например, чтобы удалить все настройки kernel_settings_systemd_cpu_affinity, kernel_settings_transparent_hugepages и kernel_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

Предупреждения

Роль kernel_settings заставит применяться другие настройки sysctl, когда используется реализация tuned, которая является значением по умолчанию. Это может произойти, когда вы вручную редактируете файлы в /etc/sysctl.d/, или если файлы sysctl.d устанавливаются каким-либо системным пакетом. Например, на Fedora установка пакета libreswan предоставляет файл /etc/sysctl.d/50-libreswan.conf. Использование роли kernel_settings приведет к перезагрузке и повторному применению этого файла. Если такое поведение нежелательно, вам нужно будет отредактировать конфигурацию tuned на управляемых хостах в /etc/tuned/tuned-main.conf и установить reapply_sysctl=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 для получения дополнительной информации.

Информация об авторе

Рич Меггинсон (richm на github, rmeggins в моей компании)

Установить
ansible-galaxy install linux-system-roles/kernel_settings
Лицензия
other
Загрузки
5019
Владелец