複数の Config Connector リソースとの競合を管理する

このページでは、Config Connector が競合を処理する方法について説明します。同じリソースが複数のリソースによって管理される場合、競合が発生する可能性があります。

Config Connector は、Kubernetes リソース名、コンテナ アノテーション、さらにはリージョンまたはロケーションの組み合わせをマッピングして、リソースを管理または取得します。最も単純なケースでは、Google Cloud のプロジェクトを使用してリソースを整理します。

Google Cloud は、プロジェクトにとどまらないさらに高レベルの階層(フォルダ、プロジェクト、組織)をサポートしています。アノテーションを使用して、フォルダ、プロジェクト、組織にリソースをマッピングできます。Config Connector を使用してアノテーションなしでリソースを作成すると、リソースの Namespace を共有するプロジェクトにリソースが作成されます。

同じ Google Cloud リソースを管理する異なる名前空間に 2 つの Config Connector リソースを作成することは可能ですが、おすすめしません。Config Connector が対応する Google Cloud リソースを管理するのは、Google Cloud リソースのリースを取得でき、競合防止が有効になっている場合のみです。

リースは、Namespace にスコープが設定されています。Namespace にスコープが設定されたリースを取得するために、Config Connector は次の 2 つのラベルをリソースに追加します。

  1. Namespace 用のグローバルに一意の ID(cnrm-lease-holder-id)
  2. Unix エポック時間での有効期限(cnrm-lease-expiration

次のいずれかに該当する場合、Config Connector はこれらの値を更新できます。

  • cnrm-lease-holder-id の値は、Namespace のグローバルに一意の ID と一致する。
  • cnrm-lease-holder-id の値が空であるか、存在しない。
  • cnrm-lease-expiration の値は過去のものである。

Config Connector インスタンスがリソースのリースを取得すると、有効期限は 40 分後に設定されます。Config Connector の同じインスタンスは、リソースが名前空間に存在する限り管理を維持します。Config Connector により、有効期限の残り時間が 20 分未満になると 40 分延長されます。

Config Connector が特定のリソースのリースを取得できない場合、リソースの kubectl describe の出力には、ManagementConflict のステータスが表示されます。

競合防止の修正

次のいずれかの値を使用してリソースに cnrm.cloud.google.com/management-conflict-prevention-policy アノテーションを追加することで、競合防止を制御できます。

  • resource: 前のセクションで説明したとおり、リソースに適切なリースラベルを保存することにより、リソースレベルで管理の競合が防止されます。
  • none: 管理の競合は防止されません。

デフォルト値は、Config Connector のリソースがラベルをサポートしているかどうかによって異なります。リソースがラベルをサポートしている場合、デフォルト値は resource です。リソースがラベルをサポートしていない場合、デフォルト値は none です。

次の例では、デフォルトの ComputeNetwork のマニフェストでは none の管理ポリシーを使用しています。つまり、競合は阻止されません。

apiVersion: compute.cnrm.cloud.google.com/v1beta1
kind: ComputeNetwork
metadata:
 annotations:
   cnrm.cloud.google.com/management-conflict-prevention-policy: "none"
   cnrm.cloud.google.com/project-id: "PROJECT-ID"
   cnrm.cloud.google.com/deletion-policy: "abandon"
 name: default
spec:
 description: Default network for the project

制限事項

競合の防止には以下の制限事項があります。

  • ラベルをサポートしていないリソースで競合防止は機能しません。値を none から resource に変更しても、機能しません。

  • resourceID フィールドでリソースを管理する場合、同じ Google Cloud リソース名を持つ複数のリソースを作成し、同じ名前空間の下に作成できます。これらのリソースにより、Config Connector で管理できない競合が発生します。