Kubernetes の kubelet 設定「protectKernelDefaults」 とは?
Kubernetes の kubelet 設定:protectKernelDefaults とは?Kubernetes を運用する上で、kubelet の設定はとても重要です。その中でも protectKernelDefaults というオプションは、ノードのカーネルパラメータを守るためのもの。この設定を適用すると何が変わるのか、どんなときに使うべきなのかを見ていきましょう!
なぜ protectKernelDefaults が必要なのか?
Kubernetes の kubelet は、デフォルトで コンテナを安定して動かすために推奨されるカーネル設定 を適用しようとします。これは便利な反面、手動で設定したカーネルパラメータが上書きされてしまう ことがあります。
例えば、あなたが sysctl コマンドを使って kernel.panic=10 に設定したとしましょう。しかし、kubelet が起動すると、これを独自の推奨値に変更してしまうかもしれません。これは困りますよね?
そんなときに使えるのが protectKernelDefaults: true です。この設定を有効にすると、kubelet が勝手にカーネルの設定を変更しなくなります。
protectKernelDefaults を設定するとどうなる?
(1) kubelet はカーネルの sysctl 設定を変更しなくなる
(2) kubelet の推奨設定が適用されていないと、起動時にエラーを出す場合がある
(3) Kubernetes のセキュリティベンチマーク (kube-bench) でも推奨されることがある
特に (2) については注意が必要です。事前に適切なカーネル設定を行っていないと、kubelet の起動時に「必要なパラメータが設定されていない!」とエラーになることがあります。
どんなカーネルパラメータが影響を受ける?
kubelet は以下のような sysctl 設定を管理することがあります:
net.ipv4.ip_forward=1(IP フォワーディングの有効化)
vm.overcommit_memory=1(メモリのオーバーコミット制御)
kernel.panic=10(カーネルパニック時の自動再起動)
kernel.panic_on_oops=1(カーネル Oops エラー発生時の動作)
protectKernelDefaults: true にすると、これらのパラメータが手動で設定した値のまま維持される ことになります。
protectKernelDefaults の設定方法
(1) kubelet の起動オプションとして設定
kubelet --protect-kernel-defaults=true
シンプルですが、systemd で管理されている環境ではこの方法より config.yaml を使う方が一般的です。
(2) kubelet の設定ファイル (config.yaml) に設定
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
protectKernelDefaults: true
このファイルを適用するには、kubelet の起動時に --config オプションで指定します:
kubelet --config=/var/lib/kubelet/config.yaml
ポイント:
config.yaml を使用すると、ほかの設定 (cgroupDriver や evictionHard など) もまとめて管理できるので便利。
systemd で kubelet を管理している場合は、/etc/systemd/system/kubelet.service.d/10-kubelet.conf で --config=/var/lib/kubelet/config.yaml を指定するとよい。
設定する際の注意点
✅ kubelet の推奨 sysctl 設定が適用されなくなる
✅ 事前に sysctl で必要な設定を明示的に行う必要がある
✅ 不適切なカーネル設定のまま kubelet を起動すると、エラーになる可能性がある
例えば、net.ipv4.ip_forward=1 が設定されていないと、Kubernetes のネットワーク機能が正しく動作しない可能性があります。そのため、protectKernelDefaults: true を設定する前に、必要な sysctl パラメータをチェックしておくこと が大切です。
まとめ
protectKernelDefaults: true にすると、kubelet がカーネル設定を変更しなくなる
セキュリティ的に推奨されるが、必要な sysctl 設定を事前に確認しておく必要がある
設定方法は kubelet --protect-kernel-defaults=true か、config.yaml で protectKernelDefaults: true を指定
kube-bench でも推奨されることがあり、セキュリティを強化したい環境では有効化を検討すべき
Kubernetes クラスタの安定運用やセキュリティを考えるなら、protectKernelDefaults は知っておきたい設定の一つです。適切に活用して、安全な Kubernetes 環境を構築しましょう!