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