This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.第34章 sysctl
34.1. 概要 リンクのコピーリンクがクリップボードにコピーされました!
sysctl 設定は Kubernetes 経由で公開され、ユーザーがコンテナー内の namespace の特定のカーネルパラメーターをランタイム時に変更できるようにします。 namespace を使用する sysctl のみを Pod 上で独立して設定できます。sysctl に namespace が使用されていない場合 (この状態は ノードレベル と呼ばれる)、OpenShift Container Platform 内で設定することはできません。さらに 安全 とみなされる sysctl のみがデフォルトでホワイトリストに入れられます。他の 安全でない sysctl はノードで手動で有効にし、ユーザーが使用できるようにできます。
34.2. sysctl について リンクのコピーリンクがクリップボードにコピーされました!
Linux では、管理者は sysctl インターフェースを使ってランタイム時にカーネルパラメーターを変更することができます。パラメーターは /proc/sys/ 仮想プロセスファイルシステムで利用できます。これらのパラメーターは以下を含む各種のサブシステムを対象とします。
- カーネル (共通のプレフィックス: kernel.)
- ネットワーク (共通のプレフィックス: net.)
- 仮想メモリー (共通のプレフィックス: vm.)
- MDADM (共通のプレフィックス: dev.)
追加のサブシステムについては、カーネルのドキュメントで説明されています。すてのパラメーターの一覧を取得するには、以下を実行できます。
sudo sysctl -a
$ sudo sysctl -a
34.3. namespace を使用した sysctl vs ノードレベルの sysctl リンクのコピーリンクがクリップボードにコピーされました!
現時点の Linux カーネルでは、数多くの sysctl に namespace が使用 されています。これは、それらをノードの各 Pod に対して個別に設定できることを意味します。 namespace の使用は、sysctl を Kubernetes 内の Pod 環境でアクセス可能にするための要件になります。
以下の sysctl は namespace を使用するものとして知られている sysctl です。
- kernel.shm*
- kernel.msg*
- kernel.sem
- fs.mqueue.*
- net.*
namespace が使用されていない sysctl は ノードレベル と呼ばれており、クラスター管理者がノードの基礎となる Linux ディストリビューションを使用 (例: /etc/sysctls.conf を使用) するか、または特権付きコンテナーで DaemonSet を使用することによって手動で設定する必要があります。
特殊な sysctl が設定されたノードにテイントのマークを付けることを検討してください。それらの sysctl 設定を必要とする Pod のみをそれらのノードにスケジュールします。Kubernetes の テイントおよび容認 (Toleration) 機能を使用してこれを実施します。
34.4. 安全 vs 安全でない sysctl リンクのコピーリンクがクリップボードにコピーされました!
sysctl は 安全な および 安全でない sysctl に分類されます。適切な namespace の設定に加えて、安全な sysctl は同じノード上の Pod 間で適切に分離する必要があります。つまり、Pod ごとに安全な sysctl を設定することにについて以下を留意する必要があります。
- この設定はノード上の他の Pod に影響を与えないものである。
- この設定はノードの正常性に与えることを許可しないものである。
- この設定は Pod のリソース制限を超える CPU またはメモリーリソースの取得を許可しないものである。
namespace を使用した sysctl は必ずしも常に安全であると見なされる訳ではありません。
現時点で、OpenShift Container Platform は以下の sysctl を安全なセットでサポートするか、またはホワイトリスト化します。
- kernel.shm_rmid_forced
- net.ipv4.ip_local_port_range
- net.ipv4.tcp_syncookies
この一覧は、kubelet が分離メカニズムのサポートを強化する今後のバージョンでさらに拡張されます。
すべての安全な sysctl はデフォルトで有効にされます。すべての安全でない sysctl はデフォルトで無効にされ、ノードごとにクラスター管理者によって手動で許可される必要があります。無効にされた安全でない sysctl が設定された Pod はスケジュールされますが、起動に失敗します。
安全でないという性質上、安全でない sysctl は各自の責任で使用されます。場合によっては、コンテナーの正しくない動作やリソース不足、またはノードの完全な破損などの深刻な問題が生じる可能性があります。
34.5. 安全でない sysctl の有効化 リンクのコピーリンクがクリップボードにコピーされました!
上記の警告を念頭に置いた上で、クラスター管理者は、高パフォーマンスまたはリアルタイムのアプリケーション調整などの非常に特殊な状況で特定の安全でない sysctl を許可することができます。
安全でない sysctl を使用する必要がある場合、クラスター管理者はノードでそれらを個別に有効にする必要があります。 namespace を使用した sysctl のみをこの方法で有効にできます。
安全ではない sysctl を、「ノードリソースの設定」で説明されているように、ノード設定マップファイルの
kubeletArguments
\ パラメーターの値として使用するように指定します。kubeletArguments: experimental-allowed-unsafe-sysctls: - "kernel.msg*,net.ipv4.route.min_pmtu"
kubeletArguments: experimental-allowed-unsafe-sysctls: - "kernel.msg*,net.ipv4.route.min_pmtu"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 変更を適用するためにノードサービスを再起動します。
systemctl restart atomic-openshift-node
# systemctl restart atomic-openshift-node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
34.6. Pod 用の sysctl の設定 リンクのコピーリンクがクリップボードにコピーされました!
sysctl はアノテーションを使用して Pod に設定されます。それらは同じ Pod のすべてのコンテナーに適用されます。
以下は、安全な sysctl および安全でない sysctl の各種のアノテーションを使用した例です。
安全でない sysctl が指定された Pod は、それらの 2 つの安全でない sysctl を明示的に有効にしていないノードでの起動に失敗します。ノードレベルの sysctl の場合のようにそれらを Pod を正しいノードにスケジュールするには、テイントおよび容認機能またはノードのラベルを使用します。