linux-system-roles.kernel_settings
Rol de Configuración del Kernel
Este rol se utiliza para modificar la configuración del kernel. Por ejemplo, en Linux, los ajustes en /proc/sys
(usando sysctl
), /sys/fs
, y algunas otras configuraciones. Utiliza tuned
como su proveedor predeterminado en Enterprise Linux y derivados (RHEL y CentOS) y Fedora.
- Página de inicio de
tuned
- https://github.com/redhat-performance/tuned
Requisitos
Ver a continuación
Requisitos de colección
Si deseas administrar sistemas rpm-ostree
con este rol, necesitarás instalar colecciones adicionales. Por favor, ejecuta la siguiente línea de comando para instalar la colección.
ansible-galaxy collection install -vv -r meta/collection-requirements.yml
Variables del Rol
Los valores de algunos de los diferentes parámetros kernel_settings_GROUP
son una lista
de objetos dict
. Cada dict
tiene las siguientes claves:
name
- Generalmente Requerido - El nombre de la configuración, o el nombre de un archivo bajo/sys
para el gruposysfs
.name
se omite al usarreplaced
.value
- Generalmente Requerido - El valor para la configuración.value
se omite cuando se usastate
oprevious
. Los valores no deben ser del tipo booleano de YAML. Una situación donde esto podría ser un problema es usarvalue: on
u otro valor de tipo booleano de YAML. Debes poner entre comillas estos valores, o pasarlos de otra manera como un valor de tipostr
, por ejemplo,value: "on"
.state
- Opcional - El valorabsent
significa eliminar una configuración con el nombrename
de un grupo -name
debe ser proporcionado.previous
- Opcional - el único valor esreplaced
- esto se usa para especificar que los valores anteriores en un grupo deben ser reemplazados con los valores dados.
kernel_settings_sysctl
Una lista
de configuraciones que se aplicarán usando sysctl
.
Las configuraciones se dan en el formato descrito anteriormente. Ten en cuenta que las configuraciones son aditivas - por defecto, cada configuración se añade a las configuraciones existentes, o reemplaza la configuración del mismo nombre si ya existe. Si deseas eliminar una configuración específica, usa state: absent
en lugar de dar un value
. Si deseas eliminar todas las configuraciones existentes de sysctl
y reemplazarlas por las configuraciones dadas, especifica previous: replaced
como uno de los valores en la lista. Si deseas eliminar todas las configuraciones de sysctl
, usa el valor dict
{"state": "empty"}
, en lugar de una lista
, como el único valor para el parámetro. Ver ejemplos a continuación.
kernel_settings_sysfs
Una lista
de configuraciones que se aplicarán a /sys
. Las configuraciones se dan en el formato descrito anteriormente. Ten en cuenta que las configuraciones son aditivas - por defecto, cada configuración se añade a las configuraciones existentes, o reemplaza la configuración del mismo nombre si ya existe. Si deseas eliminar una configuración específica, usa state: absent
en lugar de dar un value
. Si deseas eliminar todas las configuraciones existentes de sysfs
y reemplazarlas por las configuraciones dadas, especifica previous: replaced
como uno de los valores en la lista. Si deseas eliminar todas las configuraciones de sysfs
, usa el valor dict
{"state": "empty"}
, en lugar de una lista
, como el único valor para el parámetro. Ver ejemplos a continuación.
kernel_settings_systemd_cpu_affinity
Para establecer el valor, especifica una cadena
en el formato especificado por https://www.freedesktop.org/software/systemd/man/systemd-system.conf.html#CPUAffinity=. Si deseas eliminar la configuración, usa el valor dict
{"state": "absent"}
, en lugar de una cadena
, como el valor para el parámetro.
kernel_settings_transparent_hugepages
Para establecer el valor, especifica uno de los siguientes valores de cadena
: always
madvise
never
. Este es el valor de las páginas grandes transparentes del subsistema de memoria. Si deseas eliminar la configuración, usa el valor dict
{"state": "absent"}
, en lugar de una cadena
, como el valor para el parámetro.
kernel_settings_transparent_hugepages_defrag
Para establecer el valor, especifica uno de los siguientes valores de cadena
: always
defer
defer+madvise
madvise
never
. Este es el valor para el manejo de la fragmentación de las páginas grandes transparentes del subsistema de memoria. Los valores realmente soportados pueden ser diferentes dependiendo de tu sistema operativo. Si deseas eliminar la configuración, usa el valor dict
{"state": "absent"}
, en lugar de una cadena
, como el valor para el parámetro.
kernel_settings_purge
por defecto false
- Si es true
, entonces la configuración existente será completamente borrada y reemplazada con tus configuraciones de kernel_settings_GROUP
.
kernel_settings_reboot_ok
por defecto false
- Si es true
, entonces si el rol detecta que algo fue cambiado y requiere un reinicio para tomar efecto, el rol reiniciará el host administrado. Si es false
, dependerá de ti determinar cuándo reiniciar el host administrado. El rol devolverá la variable kernel_settings_reboot_required
(ver abajo) con un valor de true
para indicar que se ha producido algún cambio que necesita un reinicio para tomar efecto.
kernel_settings_transactional_update_reboot_ok
Esta variable se usa para manejar reinicios requeridos por actualizaciones transaccionales. Si una actualización transaccional requiere un reinicio, el rol procederá con el reinicio si kernel_settings_transactional_update_reboot_ok
está configurado como true
. Si está configurado como false
, el rol notificará al usuario que se requiere un reinicio, permitiendo un manejo personalizado de la necesidad de reinicio. Si esta variable no está configurada, el rol fallará para asegurar que la necesidad de reinicio no sea pasada por alto.
Variables Exportadas por el Rol
El rol exportará las siguientes variables:
kernel_settings_reboot_required
- por defecto false
- si es true
, esto significa que se ha producido un cambio que requerirá reiniciar el host administrado para que tome efecto. Si deseas que el rol reinicie el host administrado, configura kernel_settings_reboot_ok: true
, de lo contrario, necesitarás manejar el reinicio de la máquina.
Ejemplos de Uso de Configuraciones
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
NOTA que los ajustes con valor lista
son aditivos. Es decir, se aplican además de cualquier ajuste actual. Por ejemplo, si ya tenías
kernel_settings_sysctl:
- name: kernel.threads-max
value: 29968
- name: vm.max_map_count
value: 65530
entonces después de aplicar lo anterior, tendrías
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
Esto permite que múltiples roles de alto nivel o playbooks usen este rol para proporcionar las configuraciones del kernel específicas para ese componente. Por ejemplo, si estás instalando un servidor web y un servidor de base de datos en la misma máquina, y ambos requieren ajustes del kernel, el rol kernel_settings
te permite configurarlos ambos.
Si especificas múltiples configuraciones con el mismo nombre en una sección, se usará la última.
Si deseas reemplazar todas las configuraciones en una sección con tus valores suministrados, usa previous: replaced
como un único, preferiblemente primer elemento en la lista de configuraciones. Esto indica que las configuraciones previas
en el sistema deben ser reemplazadas
con las configuraciones dadas. Por ejemplo:
kernel_settings_sysctl:
- previous: replaced
- name: kernel.threads-max
value: 30000
- name: vm.max_map_count
value: 50000
Esto tendrá el efecto de eliminar todas las configuraciones existentes para kernel_settings_sysctl
, y agregar las configuraciones especificadas.
Si deseas eliminar una única configuración, especifica state: absent
en la configuración individual, en lugar de un value
:
kernel_settings_sysctl:
- name: kernel.threads-max
value: 30000
- name: vm.max_map_count
state: absent
Esto eliminará la configuración vm.max_map_count
de las configuraciones de kernel_settings_sysctl
. Si deseas eliminar todas las configuraciones de un grupo, especifica state: empty
como un dict
en lugar de una lista
:
kernel_settings_sysctl:
state: empty
Esto tendrá el efecto de eliminar todas las configuraciones de kernel_settings_sysctl
.
Usa {"state":"absent"}
para eliminar un parámetro valor escalar. Por ejemplo, para eliminar todas las configuraciones de kernel_settings_systemd_cpu_affinity
,
kernel_settings_transparent_hugepages
, y kernel_settings_transparent_hugepages_defrag
, usa esto:
kernel_settings_systemd_cpu_affinity:
state: absent
kernel_settings_transparent_hugepages:
state: absent
kernel_settings_transparent_hugepages_defrag:
state: absent
Ejemplo de Playbook
- name: Gestionar configuraciones del kernel
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
Advertencias
El rol kernel_settings
causará que se apliquen otros ajustes de sysctl
cuando se use la implementación de tuned
, que es la predeterminada. Esto puede suceder cuando editas manualmente los archivos en /etc/sysctl.d/
, o si los archivos de sysctl.d
son instalados por algún paquete del sistema. Por ejemplo, en Fedora, instalar el paquete libreswan
proporciona /etc/sysctl.d/50-libreswan.conf
. Usar el rol kernel_settings
hará que este archivo se recargue y vuelva a aplicarse. Si este comportamiento no es deseado, deberás editar la configuración de tuned
en los hosts administrados en /etc/tuned/tuned-main.conf
y configurar reapply_sysctl=0
.
Los ajustes que aplicas con el rol kernel_settings
pueden entrar en conflicto con otros ajustes. Por ejemplo, si ejecutas manualmente el comando sysctl
, o editas manualmente los archivos en /etc/sysctl.d/
, o si los archivos de sysctl.d
son instalados por algún paquete del sistema, pueden establecer los mismos valores que estás configurando con el rol kernel_settings
. Para los ajustes de sysctl
, la precedencia es la siguiente:
- Los archivos
sysctl
tienen la mayor precedencia -/etc/sysctl.conf
y/etc/sysctl.d/*
anularán todo - Los ajustes del rol
kernel_settings
tienen la siguiente mayor precedencia - Los ajustes establecidos manualmente usando el comando
sysctl
tienen la menor precedencia
Para todos los demás ajustes, como sysfs
, los ajustes del rol kernel_settings
tienen la mayor precedencia.
rpm-ostree
Ver README-ostree.md
Licencia
Algunas partes relacionadas con tuned
son GPLv2+
. Estos están anotados en los encabezados de los archivos. Todo lo demás es MIT
, excepto donde se indique. Ver el archivo LICENSE
para más información.
Información del Autor
Rich Megginson (richm en github, rmeggins en mi empresa)
Kernel settings role, implemented with tuned
ansible-galaxy install linux-system-roles.kernel_settings