33.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.* グループの大半の sysctl には namespace が使用されていることが知られています。それらの namespace の採用は、カーネルのバージョンおよびディストリビューターによって異なります。
システム上で namespace が使用されている net.* sysctl を確認するには、以下のコマンドを実行します。
$ podman run --rm -ti docker.io/fedora \ /bin/sh -c "dnf install -y findutils && find /proc/sys/ \ | grep -e /proc/sys/net"
namespace が使用されていない sysctl は ノードレベル と呼ばれており、クラスター管理者がノードの基礎となる Linux ディストリビューションを使用 (例: /etc/sysctls.conf ファイルを変更) するか、または特権付きコンテナーで DaemonSet を使用することによって手動で設定する必要があります。
特殊な sysctl が設定されたノードにテイントのマークを付けることを検討してください。それらの sysctl 設定を必要とする Pod のみをそれらのノードにスケジュールします。テイントおよび容認 (Toleration) 機能 を使用して、ノードにマークを付けます。