linux-system-roles.kernel_settings

Rol de Configuración del Kernel

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

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.

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 grupo sysfs. name se omite al usar replaced.
  • value - Generalmente Requerido - El valor para la configuración. value se omite cuando se usa state o previous. Los valores no deben ser del tipo booleano de YAML. Una situación donde esto podría ser un problema es usar value: on u otro valor de tipo booleano de YAML. Debes poner entre comillas estos valores, o pasarlos de otra manera como un valor de tipo str, por ejemplo, value: "on".
  • state - Opcional - El valor absent significa eliminar una configuración con el nombre name de un grupo - name debe ser proporcionado.
  • previous - Opcional - el único valor es replaced - 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)

Instalar
ansible-galaxy install linux-system-roles.kernel_settings
Licencia
other
Descargas
5.8k
Propietario