複数の Config Connector インスタンスとの競合の管理

このページでは、複数のインスタンスで同じリソースを管理できる場合の Config Connector の処理方法について説明します。

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

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

同じ Google Cloud リソースを管理する異なる Namespace に 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 の同じインスタンスは、リソースが Namespace にある限り管理を維持します。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