linux-system-roles.kernel_settings
カーネル設定ロール
このロールはカーネルの設定を変更するために使用されます。たとえば、Linuxでは/proc/sys
(sysctl
を使用)、/sys/fs
、およびその他の設定で使用されます。Enterprise Linuxおよびその派生版(RHELおよびCentOS)とFedoraでは、デフォルトのプロバイダーとしてtuned
を使用します。
tuned
のホームページ - https://github.com/redhat-performance/tuned
依存関係
以下を参照してください。
コレクションの要件
このロールでrpm-ostree
システムを管理したい場合は、追加のコレクションをインストールする必要があります。次のコマンドを実行して、コレクションをインストールしてください。
ansible-galaxy collection install -vv -r meta/collection-requirements.yml
ロール変数
各種kernel_settings_GROUP
パラメータの値は、dict
オブジェクトのlist
です。各dict
には以下のキーがあります。
name
- 通常必須 - 設定の名前、またはsysfs
グループの/sys
下のファイルの名前。replaced
を使用する場合はname
は省略されます。value
- 通常必須 - 設定の値。state
またはprevious
を使用する場合はvalue
は省略されます。値はYAMLのbool型であってはいけません。たとえば、value: on
のような場合です。このような場合は、値を引用符で囲むか、str
型の値として渡す必要があります。例:value: "on"
。state
- 任意 -absent
の値は、name
の名前を持つ設定をグループから削除することを意味します -name
は提供しなければなりません。previous
- 任意 - 唯一の値はreplaced
で、これは、グループ内の以前の値を指定の値に置き換えることを示すために使われます。
kernel_settings_sysctl
sysctl
を使用して適用される設定のlist
です。設定は上記の形式で指定されます。設定は加算的で、デフォルトでは、各設定は既存の設定に追加されます。または、既に存在する同じ名前の設定を置き換えます。特定の設定を削除する場合は、value
を指定する代わりにstate: absent
を使用します。指定された設定で既存のsysctl
設定をすべて削除して置き換えたい場合は、リスト内の値の1つとしてprevious: replaced
を指定してください。すべてのsysctl
設定を削除したい場合は、パラメータの唯一の値として{"state": "empty"}
というdict
値を使用してください。以下に例を示します。
kernel_settings_sysfs
/sys
に適用される設定のlist
です。設定は上記の形式で指定されます。設定は加算的で、デフォルトでは、各設定は既存の設定に追加されます。または、既に存在する同じ名前の設定を置き換えます。特定の設定を削除する場合は、value
を指定する代わりにstate: absent
を使用します。指定された設定で既存のsysfs
設定をすべて削除して置き換えたい場合は、リスト内の値の1つとしてprevious: replaced
を指定してください。すべてのsysfs
設定を削除したい場合は、パラメータの唯一の値として{"state": "empty"}
というdict
値を使用してください。以下に例を示します。
kernel_settings_systemd_cpu_affinity
値を設定するには、https://www.freedesktop.org/software/systemd/man/systemd-system.conf.html#CPUAffinity=で指定された形式でstring
を指定します。設定を削除したい場合は、string
の代わりに{"state": "absent"}
というdict
値を使用してください。
kernel_settings_transparent_hugepages
値を設定するには、以下のいずれかのstring
値を指定します:always
madvise
never
。これはメモリサブシステムの透明な大ページの値です。設定を削除したい場合は、string
の代わりに{"state": "absent"}
というdict
値を使用してください。
kernel_settings_transparent_hugepages_defrag
値を設定するには、以下のいずれかのstring
値を指定します:always
defer
defer+madvise
madvise
never
。これはメモリサブシステムの透明な大ページの断片処理値です。実際にサポートされている値は、OSによって異なる場合があります。設定を削除したい場合は、string
の代わりに{"state": "absent"}
というdict
値を使用してください。
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
リスト値の設定は加算的であることに注意してください。つまり、現在の設定に追加されます。たとえば、既に次のような設定がある場合:
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
これにより、複数の高レベルのロールやプレイブックがこのロールを使用して、そのコンポーネントに特有のカーネル設定を提供できます。たとえば、同じマシンにWebサーバーとデータベースサーバーをインストールし、それぞれがカーネルパラメータの設定を必要とする場合、kernel_settings
ロールを使用して両方の設定を行うことができます。
セクション内で同じ名前の複数の設定を指定した場合、最後のものが使用されます。
指定されたリスト内の最初の要素としてprevious: replaced
を使用することで、セクション内のすべての設定を供給された値で置き換えることができます。これは、システム内の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
これにより、kernel_settings_sysctl
設定からvm.max_map_count
設定が削除されます。グループのすべての設定を削除したい場合は、list
の代わりにstate: empty
というdict
を指定します:
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
ロールはtuned
の実装を使用する際に他のsysctl
設定を適用します。これは、手動で/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
ファイルがインストールされた場合、同じ値が設定される可能性があります。sysctl
設定に関しては、優先順位は次の通りです。
sysctl
ファイルは最高優先順位 -/etc/sysctl.conf
および/etc/sysctl.d/*
はすべてを上書きしますkernel_settings
ロールの設定は次に高い優先順位sysctl
コマンドを使用して手動で設定された設定は最低優先順位
その他の設定(sysfs
など)については、kernel_settings
ロールの設定が最高の優先順位となります。
rpm-ostree
README-ostree.md
を参照してください。
ライセンス
tuned
に関連する一部はGPLv2+
です。これらはファイルのヘッダーに記載されています。それ以外は、特に示されていない限り、MIT
です。詳細については、LICENSE
ファイルを参照してください。
著者情報
Rich Megginson (richm on github, rmeggins at my company)