외부에서 필드 관리

구성 커넥터가 리소스를 만들 때 Google Cloudspec 필드에서 지정되지 않은 필드는 HTTP GET 요청으로 사용할 수 없는 필드와 같이 읽을 수 없는 경우가 아닌 이상 API에서 값을 가져옵니다.

이 경우 Kubernetes가 이 값의 정보 소스가 아니므로 필드는 외부에서 관리 되는 것으로 간주됩니다.

서버 측 적용 동작

서버 측 적용 이 리소스에 대해 사용 설정된 경우 객체의 외부에서 관리되는 필드의 값이 기본 Google Cloud 리소스와 일치하도록 계속 업데이트됩니다.

적용된 구성의 spec 섹션에 필드 값이 있는 경우 해당 필드는 외부에서 관리되지 않습니다.

필드가 삭제된 경우 필드가 외부에서 관리됩니다.

서버 측 미적용 동작

서버 측 적용이 사용 설정되지 않고 리소스가 Merge 채우기 동작을 사용하는 경우 구성 커넥터는 리소스 spec 필드의 지정되지 않은 필드를 Google Cloud API에서 읽은 값으로 채우고 초기에 채워진 값을 적용합니다.

예를 들어 spec 섹션에서 field2 필드의 값을 설정하지 않고 리소스 구성을 적용한다고 가정해 보겠습니다.

spec:
    field1: "value-1"

Google Cloud API에서 field2 필드의 값이 "api-value-1"이면 API 서버 의 리소스가 해당 값으로 채워집니다.

# object in the api-server
spec:
    field1: "value-1"
    field2: "api-value-1"  # populated by first reconciliation

이제 Google Cloud resource가 직접 수정되어 field2 필드가 "api-value-2"가 되도록 구성 커넥터는 Google Cloud 리소스를 리소스 spec 필드 ("api-value-1")에 처음에 채워진 값으로 되돌립니다.

# object in the api-server
spec:
    field1: "value-1"
    # still the originally populated value; overrides the external value
    field2: "api-value-1"

리소스 사양의 목록 필드 동작

구성 커넥터의 기술적 제한으로 인해 리소스가 Merge 채우기 동작을 사용하는 경우 리소스 구성의 목록 필드는 기본적으로 외부에서 관리할 수 없습니다. 이 제한으로 인해 구성 커넥터는 원래 리소스 구성에서 필드를 지정하지 않은 경우에도 리소스 spec 필드의 목록 필드에 대한 소유권을 갖습니다.

리소스 spec 필드를 적용하면 구성 커넥터는 Google Cloud API에서 목록 필드의 값을 읽고 이 초기 값을 정보 소스 및 대상 상태로 처리합니다. 해당 목록 필드의 값이 구성 커넥터 외부에서 변경되면 구성 커넥터가 변경사항을 되돌리려고 시도하지만 이는 의도하지 않은 것일 수 있습니다.

이 제한사항을 우회하고 목록 필드를 외부에서 관리할 수 있게 하려면 cnrm.cloud.google.com/state-into-spec: absent 주석을 사용하여 지정되지 않은 필드를 무시합니다. 이 주석의 값은 구성 커넥터 버전 1.123.1 이상에서 새로 생성된 리소스의 경우 기본적으로 absent로 설정됩니다. 리소스에서 주석을 지원하는지 확인하려면 해당 리소스 참조 페이지를 확인하세요.

이 동작을 구성하려면 리소스 매니페스트에 다음 주석을 추가합니다.

metadata:
  annotations:
    cnrm.cloud.google.com/state-into-spec: absent

state-into-spec 주석의 값을 absent로 설정하면 구성 커넥터는 리소스 구성에 지정되지 않은 목록 필드를 무시하므로 외부에서 관리할 수 있습니다.

주의사항

구성 커넥터에서 관리되고 외부 서비스에서 자동으로 업데이트되는 필드는 기본 API에서 끊임 없는 업데이트 또는 조정 오류를 유발할 수 있습니다. 이러한 문제는 기본 Google Cloud API에 자동 확장 또는 자동으로 업데이트되는 필드가 있고 리소스가 서버 측 적용 없이 cnrm.cloud.google.com/state-into-spec: merge 주석을 사용하는 경우에 발생할 수 있습니다.

예를 들어 SQLInstance 리소스가 cnrm.cloud.google.com/state-into-spec: merge 주석을 사용하는 경우 구성 커넥터 는 인스턴스의 초기 spec.maintenanceVersion 필드를 Kubernetes 리소스 spec 필드에 채웁니다. 나중에 Cloud SQL이 기본 인스턴스에서 자동 유지보수 업데이트를 실행하면 구성 커넥터는 인스턴스를 이전 spec.maintenanceVersion 값 spec 필드에 저장된 값으로 되돌리려고 시도합니다. Cloud SQL은 유지보수 버전 다운그레이드를 거부하므로 UpdateFailed 오류로 인해 조정이 반복적으로 실패합니다.

외부 서비스에서 자동으로 업데이트되는 필드를 관리하도록 하려면 다음을 수행합니다.

  • YAML 구성 파일을 적용할 때 자동으로 업데이트되는 필드를 생략합니다.
  • 다음 중 하나를 수행하여 지정되지 않은 필드를 무시하도록 리소스를 구성합니다.