외부에서 필드 관리

Config Connector가 Google Cloud에서 리소스를 만들 때 사양에 지정되지 않은 필드는 읽을 수 없는 경우가 아닌 이상 API에서 값을 가져옵니다. (예를 들어 GET HTTP 요청을 사용할 수 없습니다.)

이 경우 Kubernetes는 이 값의 출처가 아니므로 이 필드는 '외부 관리'로 간주됩니다.

서버 측 적용 동작

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

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

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

서버 측 미적용 동작

서버 측 적용을 사용 설정하지 않으면 리소스 사양의 지정되지 않은 필드가 Google Cloud API에서 읽은 값으로 채워지고 Config Connector는 초기에 채워진 값을 적용합니다.

예를 들어 사용자가 사양에서 bar 값을 설정하지 않고 리소스 구성을 적용하는 경우:

spec:
    foo: "foo"

bar 필드의 값이 Google Cloud API에서 baz이면 api-server의 리소스가 해당 값으로 채워집니다.

# object in the api-server
spec:
    foo: "foo"
    bar: "baz"  # populated by first reconciliation

bar가 이제 baz-2이 되도록 Google Cloud 리소스를 직접 수정하면 Google Cloud API가 처음에 리소스 사양 baz에 채워진 값으로 수정됩니다.

# object in the api-server
spec:
    foo: "foo"
    bar: "baz"  # still the originally populated value, and overrides the Google Cloud value

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

Config Connector의 기술적 제한으로 인해 리소스 구성의 목록 필드는 기본적으로 외부에서 관리할 수 없습니다. 즉, 필드가 원본 리소스 구성에 지정되지 않은 경우에도 Config Connector는 항상 리소스 사양의 목록 필드에 대한 소유권을 갖습니다.

리소스 사양이 적용되면 Config Connector는 Google Cloud API에서 목록 필드의 값을 읽고 이 초기 값을 정보 소스 및 원하는 상태로 처리합니다. 해당 목록 필드의 값이 Config Connector 외부에서 수정되면 Config Connector가 이 값을 다시 변경하려고 시도하지만 이는 바람직하지 않을 수 있습니다.

이 제한을 우회하고 목록 필드를 외부에서 관리할 수 있도록 하려면 다음 주석을 사용합니다.

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

state-into-spec의 값을 absent로 설정하면 Config Connector가 목록 필드를 리소스 구성에 지정하지 않으면 무시합니다. 이렇게 하면 리소스의 목록 필드가 외부에서 관리됩니다.

주의사항

Config Connector에서 관리되고 외부 서비스에서 자동으로 업데이트되는 필드는 기본 API에서 끊임 없는 업데이트를 유발할 수 있습니다. 기본 API에 자동 확장 처리 또는 자동 업데이트 필드가 포함된 경우에 이러한 문제가 발생할 수 있습니다. 리소스에 대해 서버 측 적용을 사용 설정하고 적용 시 구성 파일 외부에 필드를 두어 이러한 필드가 외부적으로 관리되는 것으로 처리되도록 해야 합니다.