kernel_settings
Настройки ядра
Эта роль используется для изменения настроек ядра. Например, в Linux настройки находятся в /proc/sys
(с помощью sysctl
), /sys/fs
и некоторых других местах. Она использует tuned
в качестве поставщика по умолчанию для Enterprise Linux и его производных (RHEL и CentOS), а также Fedora.
- Главная страница
tuned
- https://github.com/redhat-performance/tuned
Требования
Смотрите ниже.
Требования к коллекции
Если вы хотите управлять системами 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
или другого значения типа YAMLbool
. Вы должны заключить эти значения в кавычки или передать их как значение типа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 в моей компании)
Kernel settings role, implemented with tuned
ansible-galaxy install linux-system-roles/kernel_settings