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)
