複数の 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. cnrm-lease-holder-id: Config Controller は、競合防止が有効になっているリソースを管理する Namespace ごとに、一意の ID を生成します。この一意は ID は、cnrm-lease-holder-id の設定使用にされます。Namespace の cnrm-lease-holder-id 値へのマッピングは、cnrm-system 名前空間の namespace-id ConfigMap で確認できます。
  2. cnrm-lease-expiration: Unix エポック時間での有効期限

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: 管理の競合は防止されません。

デフォルト値は 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 リソース名を持つ複数のリソースを作成し、同じ Namespace の下に作成できます。これらのリソースにより、Config Connector で管理できない競合が発生します。