linux-system-roles.kernel_settings
Rôle de Paramètres du Noyau
Ce rôle est utilisé pour modifier les paramètres du noyau. Par exemple, sur Linux, les paramètres dans /proc/sys
(en utilisant sysctl
), /sys/fs
, et certains autres paramètres. Il utilise tuned
comme fournisseur par défaut sur les systèmes d'Enterprise Linux et ses dérivés (RHEL et CentOS) ainsi que Fedora.
- Page d'accueil de
tuned
- https://github.com/redhat-performance/tuned
Exigences
Voir ci-dessous
Exigences de collection
Si vous souhaitez gérer les systèmes rpm-ostree
avec ce rôle, vous devrez installer des collections supplémentaires. Veuillez exécuter la ligne de commande suivante pour installer la collection.
ansible-galaxy collection install -vv -r meta/collection-requirements.yml
Variables de Rôle
Les valeurs de certains des paramètres kernel_settings_GROUP
sont une liste
d'objets dict
. Chaque dict
a les clés suivantes :
name
- Généralement requis - Le nom du paramètre, ou le nom d'un fichier sous/sys
pour le groupesysfs
.name
est omis lors de l'utilisation dereplaced
.value
- Généralement requis - La valeur pour le paramètre.value
est omis lors de l'utilisation destate
ouprevious
. Les valeurs ne doivent pas être de type booléen YAML. Une situation où cela pourrait être un problème est l'utilisation devalue: on
ou d'autres valeurs de type booléen YAML. Vous devez mettre ces valeurs entre guillemets, ou sinon les passer en tant que valeur de typestr
, par exemplevalue: "on"
.state
- Facultatif - la valeurabsent
signifie supprimer un paramètre nomméname
d'un groupe -name
doit être fourni.previous
- Facultatif - la seule valeur estreplaced
- cela sert à indiquer que les valeurs précédentes dans un groupe doivent être remplacées par les valeurs données.
kernel_settings_sysctl
Une liste
de paramètres à appliquer à l'aide de sysctl
. Les paramètres sont donnés dans le format décrit ci-dessus. Notez que les paramètres sont additifs - par défaut, chaque paramètre est ajouté aux paramètres existants, ou remplace le paramètre du même nom s'il existe déjà. Si vous souhaitez supprimer un paramètre spécifique, utilisez state: absent
au lieu de donner une value
. Si vous souhaitez supprimer tous les paramètres sysctl
existants et les remplacer par les paramètres donnés, spécifiez previous: replaced
comme l'une des valeurs de la liste. Si vous souhaitez supprimer tous les paramètres sysctl
, utilisez la valeur dict
{"state": "empty"}
, au lieu d'une list
, comme seule valeur pour le paramètre. Voir ci-dessous pour des exemples.
kernel_settings_sysfs
Une liste
de paramètres à appliquer à /sys
. Les paramètres sont donnés dans le format décrit ci-dessus. Notez que les paramètres sont additifs - par défaut, chaque paramètre est ajouté aux paramètres existants, ou remplace le paramètre du même nom s'il existe déjà. Si vous souhaitez supprimer un paramètre spécifique, utilisez state: absent
au lieu de donner une value
. Si vous souhaitez supprimer tous les paramètres sysfs
existants et les remplacer par les paramètres donnés, spécifiez previous: replaced
comme l'une des valeurs de la liste. Si vous souhaitez supprimer tous les paramètres sysfs
, utilisez la valeur dict
{"state": "empty"}
, au lieu d'une list
, comme seule valeur pour le paramètre. Voir ci-dessous pour des exemples.
kernel_settings_systemd_cpu_affinity
Pour définir la valeur, spécifiez une string
dans le format spécifié par https://www.freedesktop.org/software/systemd/man/systemd-system.conf.html#CPUAffinity=. Si vous souhaitez supprimer le paramètre, utilisez la valeur dict
{"state": "absent"}
, au lieu d'une string
, comme valeur pour le paramètre.
kernel_settings_transparent_hugepages
Pour définir la valeur, spécifiez l'une des valeurs string
suivantes : always
, madvise
, never
. C'est la valeur pour les pages énormes transparentes du sous-système mémoire. Si vous souhaitez supprimer le paramètre, utilisez la valeur dict
{"state": "absent"}
, au lieu d'une string
, comme valeur pour le paramètre.
kernel_settings_transparent_hugepages_defrag
Pour définir la valeur, spécifiez l'une des valeurs string
suivantes : always
, defer
, defer+madvise
, madvise
, never
. C'est la valeur pour la gestion de la fragmentation des pages énormes transparentes du sous-système mémoire. Les valeurs réelles prises en charge peuvent être différentes selon votre système d'exploitation. Si vous souhaitez supprimer le paramètre, utilisez la valeur dict
{"state": "absent"}
, au lieu d'une string
, comme valeur pour le paramètre.
kernel_settings_purge
valeur par défaut false
- Si true
, alors la configuration existante sera complètement effacée et remplacée par vos paramètres kernel_settings_GROUP
donnés.
kernel_settings_reboot_ok
valeur par défaut false
- Si true
, alors si le rôle détecte que quelque chose a changé et nécessite un redémarrage pour prendre effet, le rôle redémarrera l’hôte géré. Si false
, il vous appartient de déterminer quand redémarrer l’hôte géré. Le rôle renverra la variable kernel_settings_reboot_required
(voir ci-dessous) avec la valeur true
pour indiquer qu'un changement a eu lieu nécessitant un redémarrage pour prendre effet.
kernel_settings_transactional_update_reboot_ok
Cette variable est utilisée pour gérer les redémarrages requis par les mises à jour transactionnelles. Si une mise à jour transactionnelle nécessite un redémarrage, le rôle procédera au redémarrage si kernel_settings_transactional_update_reboot_ok
est défini sur true
. S'il est défini sur false
, le rôle notifiera l'utilisateur qu'un redémarrage est requis, permettant une gestion personnalisée de cette exigence. Si cette variable n'est pas définie, le rôle échouera à garantir que l'exigence de redémarrage ne soit pas négligée.
Variables exportées par le rôle
Le rôle exportera les variables suivantes :
kernel_settings_reboot_required
- valeur par défaut false
- si true
, cela signifie qu'un changement a eu lieu qui nécessitera le redémarrage de l’hôte géré pour prendre effet. Si vous souhaitez que le rôle redémarre l’hôte géré, définissez kernel_settings_reboot_ok: true
, sinon, vous devrez gérer le redémarrage de la machine.
Exemples d'utilisation des paramètres
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
REMARQUE que les paramètres de type list
sont additifs. C'est-à-dire qu'ils sont appliqués en plus de tout paramètre actuel. Par exemple, si vous aviez déjà
kernel_settings_sysctl:
- name: kernel.threads-max
value: 29968
- name: vm.max_map_count
value: 65530
alors après application de ce qui précède, vous auriez
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
Cela permet à plusieurs rôles ou playbooks de niveau supérieur d'utiliser ce rôle pour fournir les paramètres du noyau spécifiques à ce composant. Par exemple, si vous installez un serveur web et un serveur de base de données sur la même machine, et qu'ils nécessitent tous les deux des réglages des paramètres du noyau, le rôle kernel_settings
vous permet de les définir tous les deux.
Si vous spécifiez plusieurs paramètres avec le même nom dans une section, le dernier sera utilisé.
Si vous souhaitez remplacer tous les paramètres dans une section par vos valeurs fournies, utilisez previous: replaced
comme un seul élément de préférence en premier dans la liste des paramètres. Cela indique que les paramètres previous
dans le système doivent être remplacés
par les paramètres donnés. Par exemple :
kernel_settings_sysctl:
- previous: replaced
- name: kernel.threads-max
value: 30000
- name: vm.max_map_count
value: 50000
Cela aura pour effet de supprimer tous les paramètres existants pour kernel_settings_sysctl
, et d'ajouter les paramètres spécifiés. Si vous souhaitez supprimer un seul paramètre, spécifiez state: absent
dans le paramètre individuel, au lieu d'une value
:
kernel_settings_sysctl:
- name: kernel.threads-max
value: 30000
- name: vm.max_map_count
state: absent
Cela supprimera le paramètre vm.max_map_count
des paramètres kernel_settings_sysctl
. Si vous souhaitez supprimer tous les paramètres d'un groupe, spécifiez state: empty
en tant que dict
au lieu d'une list
:
kernel_settings_sysctl:
state: empty
Cela aura pour effet de supprimer tous les paramètres kernel_settings_sysctl
.
Utilisez {"state":"absent"}
pour supprimer un paramètre de valeur scalaire. Par exemple, pour supprimer tous les paramètres kernel_settings_systemd_cpu_affinity
, kernel_settings_transparent_hugepages
, et kernel_settings_transparent_hugepages_defrag
, utilisez ceci :
kernel_settings_systemd_cpu_affinity:
state: absent
kernel_settings_transparent_hugepages:
state: absent
kernel_settings_transparent_hugepages_defrag:
state: absent
Exemple de Playbook
- name: Gérer les paramètres du noyau
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
Avertissements
Le rôle kernel_settings
appliquera d'autres paramètres sysctl
lors de l'utilisation de l'implémentation tuned
, qui est le défaut. Cela peut se produire lorsque vous modifiez manuellement les fichiers sous /etc/sysctl.d/
, ou si ces fichiers sysctl.d
sont installés par un paquet système. Par exemple, sur Fedora, l'installation du paquet libreswan
fournit /etc/sysctl.d/50-libreswan.conf
. L'utilisation du rôle kernel_settings
entraînera le rechargement et la réapplication de ce fichier. Si ce comportement n'est pas souhaité, vous devrez modifier la configuration tuned
sur les hôtes gérés dans /etc/tuned/tuned-main.conf
et définir reapply_sysctl=0
.
Les paramètres que vous appliquez avec le rôle kernel_settings
peuvent entrer en conflit avec d'autres paramètres. Par exemple, si vous exécutez manuellement la commande sysctl
, ou modifiez manuellement les fichiers sous /etc/sysctl.d/
, ou si les fichiers sysctl.d
sont installés par un paquet système, ils peuvent définir les mêmes valeurs que celles que vous définissez avec le rôle kernel_settings
. Pour les paramètres sysctl
, la précedence est la suivante :
- Les fichiers
sysctl
ont la plus haute précedence -/etc/sysctl.conf
et/etc/sysctl.d/*
écraseront tout - Les paramètres du rôle
kernel_settings
ont la précedence suivante - Les paramètres définis manuellement à l'aide de la commande
sysctl
ont la plus basse précedence
Pour tous les autres paramètres tels que sysfs
, les paramètres du rôle kernel_settings
ont la plus haute précedence.
rpm-ostree
Voir README-ostree.md
Licence
Certaines parties liées à tuned
sont GPLv2+
. Cela est noté dans les en-têtes des fichiers. Tout le reste est MIT
, sauf mention contraire. Voir le fichier LICENSE
pour plus d'informations.
Informations sur l'auteur
Rich Megginson (richm sur github, rmeggins à ma société)
Kernel settings role, implemented with tuned
ansible-galaxy install linux-system-roles.kernel_settings