リソース・リークからのKubernetesクラスタの保護
Kubernetes Engine(OKE)を使用して作成したKubernetesクラスタを保護することで、システムの不安定性を防ぐ方法をご覧ください。
Kubernetesクラスタのコントロール・プレーンは、クラスタにデプロイされたアプリケーションが意図しないリソース作成または制御されていないリソース作成をトリガーすると不安定になる可能性があります。コンピュート・リソースとメモリー・リソースが枯渇すると、クラスタのパフォーマンスと可用性に深刻な影響を与えます。
コントロール・プレーンの可用性を維持するために、Kubernetes Engineは、oke-resource-leak-protection.cluster.com
という名前の検証アドミッションWebフックを使用して、作成したクラスタをそのようなリソース・リークから保護できます。入学Webフックの検証は、kube-apiserverから入学リクエストを受信し、kube-apiserverがそのリクエストを受け入れるかどうかのレスポンスを送信するHTTPコールバックです。
oke-resource-leak-protection.cluster.com
Webフックは、クラスタ内の特定のタイプのKubernetesオブジェクトの数を保持します。Webフックが特定のタイプの新規オブジェクトの作成に対する入学要求を受信すると、Webフックはそのオブジェクトの作成によってそのタイプのオブジェクトの内部制限に違反するかどうかを決定します。
デフォルトでは、Kubernetesエンジンは、10個以下のワーカー・ノードを持つクラスタにoke-resource-leak-protection.cluster.com
Webフックを作成します。webhookより:
- クラスタ内のポッドの合計数が10,000を超える場合、追加のポッドを作成するリクエストを拒否します
- クラスタ内のシークレットの合計数が2,000を超える場合、追加のシークレットを作成するリクエストを拒否します
oke-resource-leak-protection.cluster.com
Webフックは、オブジェクト作成リクエストを拒否すると、次のような作成リクエストが拒否された理由を説明するエラー・メッセージを発行します。
Error from server: error when creating "nginx-pod.yaml": admission webhook "oke-resource-leak-protection.cluster.com" denied the request: OKE resource leak protection was engaged. Cluster has 10000 pods and the limit is 10000. See documentation for details.
エラー・メッセージによって、潜在的なリソース・リークが通知されます。このメッセージが表示された場合は、クラスタのコントロール・プレーンの可用性が影響を受ける前に、適切なアクションを実行することをお薦めします。例:
- 追加のオブジェクト作成リクエストが意図したものでない場合は、アプリケーション・コードを調べ、リソース・リークの原因を特定して対処します。
- 追加のオブジェクト作成リクエストが意図したものである場合は、デフォルトのリソース・リーク検出およびアドミッションWebフックの検証を無効にします(デフォルトのリソース・リーク検出の無効化を参照)。
oke-resource-leak-protection.cluster.com
Webフックを使用してオブジェクトの作成を制御する代替手段として、次の方法でクラスタをリソース・リークから保護することもできます。
- 独自の検証アドミッションWebフックの作成(KubernetesドキュメントのValidatingAdmissionWebhookを参照)
- Kubernetesリソース割当て制限の適用(Kubernetesドキュメントのリソース割当て制限を参照)
- Kubernetesのアドミッション・ポリシーの検証の適用(Kubernetesドキュメントのアドミッション・ポリシーの検証を参照)
デフォルトのリソースリーク検出の無効化
リソース・リーク検出を無効にし、Kubernetes Engineのアドミッション・Webフックをデフォルトで検証するには:
-
次のように入力して、
oke-resource-leak-protection
ConfigMapのManaged
注釈の値を変更して、デフォルトの検証アドミッションWebフックでクラスタ内のオブジェクト数を制限しないように指定します。kubectl -n kube-system annotate --overwrite configmap oke-resource-leak-protection Managed='false'
-
次のように入力して、デフォルトの検証入学Webフックを削除します。
kubectl delete validatingwebhookconfiguration oke-resource-leak-protection.oke.com
リソース・リーク検出の再有効化
リソース・リーク検出およびアドミッションWebフックを検証し、以前に無効にするには:
-
次のように入力して、
oke-resource-leak-protection
ConfigMapのManaged
注釈の値を変更して、デフォルトの検証アドミッションWebフックでクラスタ内のオブジェクト数の制限を再開するように指定します。kubectl -n kube-system annotate --overwrite configmap oke-resource-leak-protection Managed='true'
oke-resource-leak-protection.oke.com
Webフックがまだ存在しない場合は作成されます。