Kubernetes 필드 관리 - Amazon EKS

Kubernetes 필드 관리

Amazon EKS 추가 기능은 표준 모범 사례 구성을 사용하여 클러스터에 설치됩니다. Amazon EKS 추가 기능을 클러스터에 추가하는 방법에 대한 자세한 내용은 Amazon EKS 추가 기능 섹션을 참조하세요.

고급 기능을 사용하도록 Amazon EKS 추가 기능의 구성을 사용자 지정하려 할 수 있습니다. Amazon EKS는 Kubernetes 서버 측 적용 기능을 사용하여 Amazon EKS가 관리하지 않는 설정에 대한 구성을 덮어쓰지 않고도 Amazon EKS의 추가 기능을 관리할 수 있습니다. 자세한 내용을 알아보려면 Kubernetes 설명서의 서버 측 적용이란?을 참조하세요. 이를 위해 Amazon EKS는 설치하는 모든 추가 기능에 대해 최소한의 필드 세트를 관리합니다. Amazon EKS가 관리하지 않는 모든 필드 또는 다른 Kubernetes 컨트롤 플레인 프로세스(예: kube-controller-manager)를 문제 없이 수정할 수 있습니다.

중요

Amazon EKS가 관리하는 필드를 수정하면 Amazon EKS가 추가 기능을 관리할 수 없으며, 추가 기능이 업데이트될 때 변경 내용이 덮어써질 수 있습니다.

필드 관리 상태 보기

kubectl을 사용하여 Amazon EKS 추가 기능을 위해 Amazon EKS가 관리하는 필드를 볼 수 있습니다.

필드의 관리 상태를 보려면
  1. 조사할 추가 기능을 확인합니다. 클러스터에 배포된 모든 deploymentsDaemonSets를 보려면 Kubernetes 리소스 보기 섹션을 참조하세요.

  2. 다음 명령을 실행하여 추가 기능에 대한 관리형 필드를 확인합니다.

    kubectl get type/add-on-name -n add-on-namespace -o yaml

    예를 들어 다음 명령을 사용하여 CoreDNS 추가 기능에 대한 관리형 필드를 볼 수 있습니다.

    kubectl get deployment/coredns -n kube-system -o yaml

    필드 관리는 반환된 출력의 다음 섹션에 나열되어 있습니다.

    [...]
    managedFields:
      - apiVersion: apps/v1
        fieldsType: FieldsV1
        fieldsV1:                        
    [...]               
    참고

    출력에 managedFields가 표시되지 않으면 명령에 --show-managed-fields를 추가하고 다시 실행합니다. 사용 중인 kubectl 버전에 따라 관리형 필드가 기본적으로 반환되는지 여부가 결정됩니다.

Kubernetes API의 필드 관리 구문 이해

Kubernetes 객체에 대한 세부 정보를 볼 때 관리형 및 비관리형 필드 모두 출력에 반환됩니다. 관리형 필드는 다음 유형 중 하나일 수 있습니다.

  • 완전관리형(Fully managed) - 필드의 모든 키를 Amazon EKS에서 관리합니다. 어떤 값이든 수정하면 충돌이 발생합니다.

  • 부분관리형(Partially managed) - 필드의 일부 키를 Amazon EKS에서 관리합니다. Amazon EKS에서 명시적으로 관리하는 키를 수정하면 충돌이 발생합니다.

두 유형의 필드 모두 manager: eks를 사용하여 태그가 지정됩니다.

각 키는 항상 빈 세트에 매핑되는 필드 자체를 나타내는 .이거나, 하위 필드 또는 항목을 나타내는 문자열입니다. 필드 관리에 대한 출력은 다음과 같은 유형의 선언으로 구성됩니다.

  • f:name, 여기서 name은 목록의 필드 이름입니다.

  • k:keys, 여기서 keys는 목록 항목의 필드 맵입니다.

  • v:value, 여기서 value는 목록 항목의 정확한 JSON 형식 값입니다.

  • i:index, 여기서 index는 목록에서 항목의 위치입니다.

CoreDNS 추가 기능에 대한 다음 출력 부분은 이전 선언을 보여줍니다.

  • 완전관리형 필드(Fully managed fields) - 관리형 필드에 f:(필드)가 지정되고 k:(키)가 지정되지 않은 경우 전체 필드가 관리됩니다. 이 필드의 값을 수정하면 충돌이 발생합니다.

    다음 출력에서는 coredns라는 컨테이너가 eks에 의해 관리되는 것을 확인할 수 있습니다. args, imageimagePullPolicy 하위 필드도 eks에서 관리합니다. 이러한 필드의 값을 수정하면 충돌이 발생합니다.

    [...]
    f:containers:
      k:{"name":"coredns"}:
      .: {}
      f:args: {}
      f:image: {}
      f:imagePullPolicy: {}
    [...]
    manager: eks
    [...]
  • 부분관리형 필드(Partially managed fields) - 관리형 키에 값이 지정되면 해당 필드에 대해 선언된 키가 관리됩니다. 지정된 키를 수정하면 충돌이 발생합니다.

    다음 출력에서는 eksname 키로 설정된 config-volumetmp 볼륨을 관리하는 것을 확인할 수 있습니다.

    [...]
    f:volumes:
      k:{"name":"config-volume"}:
        .: {}
        f:configMap:
          f:items: {}
          f:name: {}
        f:name: {}
      k:{"name":"tmp"}:
        .: {}
        f:name: {}
    [...]
    manager: eks
    [...]
  • 부분관리형 필드에 키 추가(Adding keys to partially managed fields) - 특정 키 값만 관리되는 경우, 충돌을 일으키지 않고 인수와 같은 추가 키를 필드에 안전하게 추가할 수 있습니다. 다른 키를 추가하는 경우 먼저 필드가 관리되지 않는지 확인합니다. 관리되는 값을 추가하거나 수정하면 충돌이 발생합니다.

    다음 출력에서는 name 키와 name 필드가 모두 관리되는 것을 알 수 있습니다. 컨테이너 이름을 추가하거나 수정하면 이 관리 키와 충돌이 발생합니다.

    [...]
    f:containers:
      k:{"name":"coredns"}:
    [...]
        f:name: {}
    [...]
    manager: eks
    [...]