여러 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를 생성합니다. 이 고유 ID는 cnrm-lease-holder-id를 설정하기 위해 사용됩니다. cnrm-lease-holder-id 값에 대한 네임스페이스 매핑을 보려면 cnrm-system 네임스페이스에서 namespace-id ConfigMap을 참조할 수 있습니다.
  2. cnrm-lease-expiration: Unix 에포크 시간의 만료 시간입니다.

다음 중 하나에 해당하면 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: 관리 충돌이 방지되지 않습니다.

기본값은 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가 관리할 수 없는 충돌이 발생합니다.