여러 Config Connector 인스턴스와의 충돌 관리

이 페이지에서는 여러 인스턴스로 동일한 인스턴스를 관리할 수 있는 사례를 Config Connector에서 처리하는 방법에 대해 설명합니다.

Config Connector는 Kubernetes 리소스 이름, 컨테이너 주석 및 해당되는 경우 리전 또는 위치의 조합을 매핑하여 리소스를 관리 또는 획득합니다. 가장 간단한 사례에서는 Google Cloud 프로젝트를 사용하여 리소스를 구성합니다.

Google Cloud는 프로젝트 범위를 넘어 추가적인 계층 구조 수준(폴더, 프로젝트, 조직)을 지원합니다. 주석으로 폴더, 프로젝트, 조직에 리소스를 매핑할 수 있습니다. Config Connector를 사용하여 주석 없이 리소스를 만들 때는 리소스의 네임스페이스를 공유하는 프로젝트에 리소스가 생성됩니다.

동일한 Google Cloud 리소스를 관리하는 다른 네임스페이스에 두 개의 Config Connector 리소스를 만들 수는 있지만 권장하지는 않습니다. Config Connector는 Google Cloud 리소스에 대한 임대를 얻을 수 있고 충돌 방지가 사용 설정된 경우에만 해당 Google Cloud 리소스를 관리합니다.

임대는 네임스페이스 범위입니다. 네임스페이스 범위 임대를 얻기 위해 Config Connector는 리소스에 다음 두 개의 라벨을 추가합니다.

  1. 네임스페이스 cnrm-lease-holder-id)의 전역 고유 ID
  2. Unix epoch 시간의 만료 시간(cnrm-lease-expiration).

다음 중 하나에 해당하면 Config Connector는 이러한 값을 업데이트할 수 있습니다.

  • cnrm-lease-holder-id의 값은 네임스페이스의 전역 고유 ID와 일치합니다.
  • cnrm-lease-holder-id의 값이 비어 있거나 존재하지 않습니다.
  • cnrm-lease-expiration의 값이 이전 시점에 있습니다.

Config Connector 인스턴스가 리소스 임대를 획득하면 만료 시간은 향후 40분으로 설정됩니다. 리소스가 네임스페이스에 있는 한 Config Connector의 동일한 인스턴스는 관리를 유지합니다. 남은 시간이 20분 미만이면 Config Connector는 만료 시간을 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