linux-system-roles.kernel_settings
Rola Ustawień Jądra
Ta rola służy do modyfikowania ustawień jądra. Na przykład, w systemie Linux, ustawienia w /proc/sys
(używając sysctl
), /sys/fs
i inne ustawienia. Używa tuned
jako domyślnego dostawcy w systemach Enterprise Linux oraz ich pochodnych (RHEL i CentOS) oraz w Fedory.
- Strona domowa
tuned
- https://github.com/redhat-performance/tuned
Wymagania
Patrz poniżej
Wymagania dotyczące kolekcji
Jeśli chcesz zarządzać systemami rpm-ostree
za pomocą tej roli, musisz zainstalować dodatkowe kolekcje. Uruchom poniższe polecenie, aby zainstalować kolekcję.
ansible-galaxy collection install -vv -r meta/collection-requirements.yml
Zmienne Roli
Wartości niektórych parametrów kernel_settings_GROUP
to lista
obiektów dict
. Każdy dict
ma następujące klucze:
name
- Zazwyczaj wymagane - Nazwa ustawienia lub nazwa pliku w/sys
dla grupysysfs
.name
jest pomijane, gdy używa sięreplaced
.value
- Zazwyczaj wymagane - Wartość ustawienia.value
jest pomijane, gdy używa sięstate
lubprevious
. Wartości nie mogą być typem bool w YAML. Jednym z przypadku, gdy może to być problemem, jest użycievalue: on
lub innej wartości typu bool w YAML. Musisz ująć te wartości w cudzysłów lub inaczej przekazać je jako wartość typustr
, np.value: "on"
.state
- Opcjonalne - wartośćabsent
oznacza usunięcie ustawienia o nazwiename
z grupy -name
musi być podane.previous
- Opcjonalne - jedyna wartość toreplaced
- używa się do określenia, że poprzednie wartości w grupie powinny zostać zastąpione podanymi wartościami.
kernel_settings_sysctl
Lista ustawień, które mają być zastosowane za pomocą sysctl
.
Ustawienia są podawane w formacie opisanym powyżej. Zauważ, że ustawienia są dodatkowe - domyślnie każde ustawienie jest dodawane do istniejących lub zastępuje ustawienie o tej samej nazwie, jeśli już istnieje. Jeśli chcesz usunąć konkretne ustawienie, użyj state: absent
zamiast podawania value
. Jeśli chcesz usunąć wszystkie istniejące ustawienia sysctl
i zastąpić je podanymi ustawieniami, określ previous: replaced
jako jedną z wartości w liście. Jeśli chcesz usunąć wszystkie ustawienia sysctl
, użyj wartości dict
{"state": "empty"}
, zamiast list
, jako jedynej wartości parametru. Zobacz poniżej przykłady.
kernel_settings_sysfs
Lista ustawień do zastosowania w /sys
. Ustawienia są podawane w formacie opisanym powyżej. Zauważ, że ustawienia są dodatkowe - domyślnie każde ustawienie jest dodawane do istniejących ustawień lub zastępuje ustawienie o tej samej nazwie, jeśli już istnieje. Jeśli chcesz usunąć konkretne ustawienie, użyj state: absent
zamiast podawania value
. Jeśli chcesz usunąć wszystkie istniejące ustawienia sysfs
i zastąpić je podanymi ustawieniami, określ previous: replaced
jako jedną z wartości w liście. Jeśli chcesz usunąć wszystkie ustawienia sysfs
, użyj wartości dict
{"state": "empty"}
, zamiast list
, jako jedynej wartości parametrów. Zobacz poniżej przykłady.
kernel_settings_systemd_cpu_affinity
Aby ustawić wartość, podaj string
w formacie określonym przez https://www.freedesktop.org/software/systemd/man/systemd-system.conf.html#CPUAffinity=. Aby usunąć ustawienie, użyj wartości dict
{"state": "absent"}
, zamiast string
, jako wartości parametru.
kernel_settings_transparent_hugepages
Aby ustawić wartość, podaj jedną z następujących wartości string
: always
, madvise
, never
. To jest wartość przezroczystych dużych stron pamięci. Aby usunąć ustawienie, użyj wartości dict
{"state": "absent"}
, zamiast string
, jako wartości parametru.
kernel_settings_transparent_hugepages_defrag
Aby ustawić wartość, podaj jedną z następujących wartości string
: always
, defer
, defer+madvise
, madvise
, never
. To jest wartość zarządzania fragmentacją przezroczystych dużych stron pamięci. Rzeczywiste wspierane wartości mogą się różnić w zależności od twojego systemu operacyjnego. Aby usunąć ustawienie, użyj wartości dict
{"state": "absent"}
, zamiast string
, jako wartości parametru.
kernel_settings_purge
domyślnie false
- Jeśli true
, to istniejąca konfiguracja zostanie całkowicie usunięta i zastąpiona twoimi podanymi ustawieniami kernel_settings_GROUP
.
kernel_settings_reboot_ok
domyślnie false
- Jeśli true
, to jeśli rola wykryje, że coś zostało zmienione, co wymaga ponownego uruchomienia, rola zrestartuje zarządzany host. Jeśli false
, to do ciebie należy określenie, kiedy zrestartować zarządzany host. Rola zwróci zmienną kernel_settings_reboot_required
(patrz poniżej) z wartością true
, aby wskazać, że zaszła jakaś zmiana, która wymaga ponownego uruchomienia.
kernel_settings_transactional_update_reboot_ok
Ta zmienna służy do obsługi ponownych uruchomień wymaganych przez aktualizacje transakcyjne. Jeśli aktualizacja transakcyjna wymaga ponownego uruchomienia, rola przeprowadzi ponowne uruchomienie, jeśli kernel_settings_transactional_update_reboot_ok
jest ustawiona na true
. Jeśli ustawiona na false
, rola powiadomi użytkownika, że ponowne uruchomienie jest wymagane, co pozwoli na dostosowane zarządzanie wymaganiem ponownego uruchomienia. Jeśli ta zmienna nie jest ustawiona, rola zakończy działanie, aby upewnić się, że wymaganie ponownego uruchomienia nie zostanie przeoczone.
Zmienne eksportowane przez rolę
Rola wyeksportuje następujące zmienne:
kernel_settings_reboot_required
- domyślnie false
- jeśli true
, oznacza to, że zaszła zmiana, która wymaga ponownego uruchomienia zarządzanego hosta w celu jego wdrożenia. Jeśli chcesz, aby rola zrestartowała zarządzany host, ustaw kernel_settings_reboot_ok: true
, w przeciwnym razie będziesz musiał zająć się ponownym uruchomieniem maszyny.
Przykłady użycia ustawień
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
UWAGA, że ustawienia o wartości list
są dodatkowe. To znaczy, że są stosowane oprócz wszystkich bieżących ustawień. Na przykład, jeśli już miałeś
kernel_settings_sysctl:
- name: kernel.threads-max
value: 29968
- name: vm.max_map_count
value: 65530
to po zastosowaniu powyższego, miałbyś
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
To pozwala wielu wyższym rolom lub skryptom używać tej roli do dostosowywania ustawień jądra specyficznych dla danego komponentu. Na przykład, jeśli instalujesz serwer WWW i serwer bazy danych na tej samej maszynie, a oba wymagają ustawienia parametrów jądra, rola kernel_settings
umożliwia ustawienie ich obu.
Jeśli podasz wiele ustawień o tej samej nazwie w sekcji, użyta zostanie ostatnia z nich.
Jeśli chcesz zastąpić wszystkie ustawienia w sekcji swoimi podanymi wartościami, użyj previous: replaced
jako jedynego, najlepiej pierwszego elementu w liście ustawień. To wskazuje, że poprzednie ustawienia w systemie powinny zostać zastąpione
podanymi ustawieniami. Na przykład:
kernel_settings_sysctl:
- previous: replaced
- name: kernel.threads-max
value: 30000
- name: vm.max_map_count
value: 50000
To spowoduje usunięcie wszystkich istniejących ustawień dla kernel_settings_sysctl
i dodanie podanych ustawień.
Jeśli chcesz usunąć pojedyncze ustawienie, określ state: absent
w poszczególnym ustawieniu, zamiast value
:
kernel_settings_sysctl:
- name: kernel.threads-max
value: 30000
- name: vm.max_map_count
state: absent
To usunie ustawienie vm.max_map_count
z ustawień kernel_settings_sysctl
. Jeśli chcesz usunąć wszystkie ustawienia z grupy, określ state: empty
jako dict
zamiast list
:
kernel_settings_sysctl:
state: empty
To spowoduje usunięcie wszystkich ustawień kernel_settings_sysctl
.
Użyj {"state":"absent"}
do usunięcia składnika o wartości skalara. Na przykład, aby usunąć wszystkie ustawienia kernel_settings_systemd_cpu_affinity
, kernel_settings_transparent_hugepages
i kernel_settings_transparent_hugepages_defrag
, użyj:
kernel_settings_systemd_cpu_affinity:
state: absent
kernel_settings_transparent_hugepages:
state: absent
kernel_settings_transparent_hugepages_defrag:
state: absent
Przykład Playbooka
- name: Zarządzaj ustawieniami jądra
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
Ostrzeżenia
Rola kernel_settings
spowoduje zastosowanie innych ustawień sysctl
, gdy używana jest implementacja tuned
, która jest domyślna. Może to nastąpić, gdy ręcznie edytujesz pliki w /etc/sysctl.d/
, lub jeśli pliki sysctl.d
są instalowane przez jakiś pakiet systemowy. Na przykład, w Fedory, instalacja pakietu libreswan
dostarcza plik /etc/sysctl.d/50-libreswan.conf
. Użycie roli kernel_settings
spowoduje ponowne załadowanie i zastosowanie tego pliku. Jeśli to zachowanie nie jest pożądane, musisz edytować konfigurację tuned
na zarządzanych hostach w /etc/tuned/tuned-main.conf
i ustawić reapply_sysctl=0
.
Ustawienia, które stosujesz za pomocą roli kernel_settings
, mogą kolidować z innymi ustawieniami. Na przykład, jeśli ręcznie uruchamiasz polecenie sysctl
lub ręcznie edytujesz pliki w /etc/sysctl.d/
, lub jeśli pliki sysctl.d
są instalowane przez jakiś pakiet systemowy, mogą ustawić te same wartości, które ustalasz za pomocą roli kernel_settings
. Dla ustawień sysctl
priorytet ustawień jest następujący:
- pliki
sysctl
mają najwyższy priorytet -/etc/sysctl.conf
oraz/etc/sysctl.d/*
zastąpią wszystko - ustawienia roli
kernel_settings
mają następny najwyższy priorytet - ustawienia ustawione ręcznie za pomocą polecenia
sysctl
mają najniższy priorytet
Dla wszystkich innych ustawień, takich jak sysfs
, ustawienia z roli kernel_settings
mają najwyższy priorytet.
rpm-ostree
Zobacz README-ostree.md
Licencja
Niektóre części związane z tuned
są GPLv2+
. Są one zaznaczone w nagłówkach plików. Wszystko inne jest MIT
, chyba że zaznaczono inaczej. Zobacz plik LICENSE
po więcej informacji.
Informacje o Autorze
Rich Megginson (richm na githubie, rmeggins w mojej firmie)
Kernel settings role, implemented with tuned
ansible-galaxy install linux-system-roles.kernel_settings