외부에서 필드 관리


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

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

서버 측 적용 동작

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

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

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

서버 측 미적용 동작

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

예를 들어 사용자가 사양에서 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

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

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

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

이 제한사항을 우회하고 목록 필드를 외부에서 관리할 수 있게 하려면 cnrm.cloud.google.com/state-into-spec 주석을 사용합니다. 이 주석은 모든 리소스에 지원되지 않습니다. 리소스에서 주석을 지원하는지 확인하려면 해당 리소스 참조 페이지를 확인하세요.

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

state-into-spec의 값을 absent로 설정하면 리소스 구성에 목록 필드를 지정하지 않은 경우 구성 커넥터가 목록 필드를 무시합니다. 이렇게 하면 리소스의 목록 필드를 외부에서 관리할 수 있습니다.

주의사항

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