EKS クラスタのシステム コンポーネントをカスタマイズする

このページでは、カスタムの toleration とラベルを適用して、GKE 接続クラスタで Google 所有のシステム コンポーネントをカスタマイズする方法について説明します。これらのコンポーネントをカスタマイズすると、環境内でこれらのコンポーネントが動作する場所と方法をより正確に管理できます。

概要

クラスタを Google Cloudに接続すると、デフォルトでは、Google 所有のシステム コンポーネントに tolerations などのカスタマイズ可能なフィールドは含まれません。その結果、使用可能なノードに Pod がスケジュールされないなどの問題が発生し、クラスタの全体的な接続と機能に影響する可能性があります。また、組織と運用の目的でカスタムラベルを適用するなど、特定のノードにコンポーネントを配置して管理する制御が必要になることもあります。

システム コンポーネントをカスタマイズすると、これらの問題が解決され、クラスタでこれらのコンポーネントの動作をより細かく柔軟に制御できます。Google 所有のシステム コンポーネントにカスタムの toleration とラベルを適用できます。

  • toleration を使用すると、Google のコンポーネントを特定の Kubernetes taint を持つノードにスケジュールできます。これにより、ワークロードの分離を強制したり、専用のノードプールを使用したりできます。カスタム toleration は、変更できない taint が原因でコンポーネントを適切に配置できない問題を直接解決します。

  • ラベルを使用すると、Google のシステム コンポーネントを独自の運用基準に従って柔軟に分類、識別できます。カスタムラベルを使用すると、既存のモニタリング、ロギング、ポリシー適用ツールとの統合を強化できます。

制限事項

次の制限事項があります。

  • カスタムの toleration とラベルを追加できるのは、クラスタを登録するときのみです。
  • クラスタに追加できるカスタムの toleration とラベルはそれぞれ最大 10 個までです。
  • 次のラベルは使用できません。

    • name
    • component
    • app
    • k8s.io または kubernetes.io を含むラベル(これらは Kubernetes の予約済みラベルに属しているため)
    • google を含むラベル
    • gke.io を含むラベル

カスタム toleration を追加する

Google 所有のシステム コンポーネント Pod には、常に次の toleration が含まれます。

  - key: components.gke.io/gke-managed-components
    operator: Exists

カスタム toleration を指定するには、gcloud container attached clusters register コマンドに --system-component-tolerations フラグを追加します。

gcloud container attached clusters register CLUSTER_NAME \
  --location=GOOGLE_CLOUD_REGION \
  ...
  --system-component-tolerations=COMPONENT_TOLERATION \

次のように置き換えます。

  • CLUSTER_NAME: クラスタの名前。
  • GOOGLE_CLOUD_REGION: クラスタを管理する Google Cloud リージョン。
  • COMPONENT_TOLERATION: 追加する toleration のカンマ区切りリスト。キー、値、演算子、効果を次の形式で指定できます。

    • Equal 演算子の場合: key=value:operator:effect 形式を使用します(例: workload=hpc:Equal:NoSchedule。この設定は、taint のキーと値が workload=hpc と完全に一致する場合にのみ Pod が taint を許容することを意味します)。
    • Exists 演算子の場合: key:operator:effect 形式を使用します(例: workload:Exists:NoSchedule。この設定は、workload キーを持つ taint を値に関係なく Pod がノードで許容することを意味します)。
    • 任意のノードでスケジュールする場合: :operator:effect 形式を使用します(例: :Exists:NoSchedule。この設定は、効果が NoSchedule の taint を Pod がノードで許容することを意味します。taint のキーや値は無視されます)。

    使用できる演算子と効果の一覧については、Kubernetes ドキュメントの taint と toleration をご覧ください。

カスタムラベルを追加する

カスタムラベルを指定するには、gcloud container attached clusters register コマンドに --system-component-labels フラグを追加します。

gcloud container attached clusters register CLUSTER_NAME \
  --location=GOOGLE_CLOUD_REGION \
  ...
  --system-component-labels=COMPONENT_LABEL \

次のように置き換えます。

  • CLUSTER_NAME: クラスタの名前。
  • GOOGLE_CLOUD_REGION: クラスタを管理する Google Cloud リージョン。
  • COMPONENT_LABEL: 追加する 1 つ以上のラベルのカンマ区切りリスト。ラベルと値は key=value の形式で指定します(例: env=production,region=us-east-1)。すべてのラベルにキーが必要ですが、そのキーに関連付けられた値は空にできます(例: backend="")。

次のステップ