見出し画像

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 環境を構築しましょう!

いいなと思ったら応援しよう!