기능 게이트 활성화 또는 비활성화하기

기능 게이트 활성화 또는 비활성화하기 (Enable Or Disable Feature Gates)

이 페이지는 클러스터에서 특정 쿠버네티스 기능을 제어하기 위해 기능 게이트(feature gates)를 활성화하거나 비활성화하는 방법을 보여 줘요. 기능 게이트를 활성화하면 일반 사용 가능(GA)이 되기 전에 Alpha 또는 Beta 기능을 테스트하고 사용할 수 있어요.

출처: 문서

본문

참고:

시작하기 전에

쿠버네티스 클러스터가 필요하고, kubectl 명령줄 도구가 클러스터와 통신하도록 설정돼 있어야 해요. 이 튜토리얼은 제어 플레인 호스트 역할을 하지 않는 노드가 최소 두 개 있는 클러스터에서 실행하는 것을 권장해요. 아직 클러스터가 없다면 minikube를 사용하거나 다음 쿠버네티스 플레이그라운드 중 하나를 사용해 만들 수 있어요.

  • iximiuz Labs
  • Killercoda
  • KodeKloud

다음도 필요해요.

  • 클러스터에 대한 관리자 접근 권한
  • 활성화하려는 기능 게이트에 대한 지식(기능 게이트 참조 문서 참고)

참고:

기능 게이트 성숙도 이해하기

기능 게이트를 활성화하기 전에 기능의 성숙도 수준을 위해 기능 게이트 참조 문서를 확인하세요.

  • Alpha: 기본적으로 비활성화, 버그가 있을 수 있음. 테스트 클러스터에서만 사용.
  • Beta: 보통 기본적으로 활성화, 잘 테스트됨.
  • GA: 항상 기본적으로 활성화. GA 후 한 릴리스 동안 비활성화될 수 있음.

어떤 구성 요소가 기능 게이트를 필요로 하는지 확인하기

서로 다른 기능 게이트는 서로 다른 쿠버네티스 구성 요소에 영향을 줘요.

  • 일부 기능은 여러 구성 요소(예: API 서버와 컨트롤러 매니저)에서 게이트를 활성화해야 해요.
  • 다른 기능은 단일 구성 요소(예: kubelet만)에서만 게이트가 필요해요.

기능 게이트 참조 문서는 보통 각 게이트가 영향을 받는 구성 요소를 나타내요. 모든 쿠버네티스 구성 요소는 같은 기능 게이트 정의를 공유하므로 모든 게이트가 help 출력에 나타나지만, 관련 게이트만 각 구성 요소의 동작에 영향을 줘요.

구성 (Configuration)

클러스터 초기화 중

관련 구성 요소 전반에 걸쳐 기능 게이트를 활성화하는 구성 파일을 만들어요.

apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
apiServer:
  extraArgs:
    feature-gates: "FeatureName=true"
controllerManager:
  extraArgs:
    feature-gates: "FeatureName=true"
scheduler:
  extraArgs:
    feature-gates: "FeatureName=true"
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
featureGates:
  FeatureName: true

클러스터를 초기화해요.

kubeadm init --config kubeadm-config.yaml

기존 클러스터에서

kubeadm 클러스터의 경우 기능 게이트 구성은 매니페스트 파일, 구성 파일, kubeadm 구성 등 여러 위치에서 설정할 수 있어요.

/etc/kubernetes/manifests/의 제어 플레인 구성 요소 매니페스트를 편집하세요.

kube-apiserver, kube-controller-manager 또는 kube-scheduler의 경우 command에 플래그를 추가해요.

spec:
  containers:
  - command:
    - kube-apiserver
    - --feature-gates=FeatureName=true
    # ... other flags

파일을 저장하세요. 파드가 자동으로 재시작돼요.

kubelet의 경우 /var/lib/kubelet/config.yaml을 편집하세요.

apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
featureGates:
  FeatureName: true

kubelet을 재시작하세요.

sudo systemctl restart kubelet

kube-proxy의 경우 ConfigMap을 편집하세요.

kubectl -n kube-system edit configmap kube-proxy

구성에 기능 게이트를 추가하세요.

featureGates:
  FeatureName: true

DaemonSet을 재시작하세요.

kubectl -n kube-system rollout restart daemonset kube-proxy

여러 기능 게이트 구성하기

명령줄 플래그에는 쉼표로 구분된 목록을 사용하세요.

--feature-gates=FeatureA=true,FeatureB=false,FeatureC=true

구성 파일을 지원하는 구성 요소(kubelet, kube-proxy)의 경우:

featureGates:
  FeatureA: true
  FeatureB: false
  FeatureC: true

참고:

기능 게이트 구성 확인하기

구성 후 기능 게이트가 활성화되었는지 확인하세요. 다음 방법은 제어 플레인 구성 요소가 정적 파드로 실행되는 kubeadm 클러스터에 적용돼요.

제어 플레인 구성 요소 매니페스트 확인

정적 파드 매니페스트에 구성된 기능 게이트를 확인해요.

kubectl -n kube-system get pod kube-apiserver-<node-name> -o yaml | grep feature-gates

kubelet 구성 확인

kubelet의 configz 엔드포인트를 사용하세요.

kubectl proxy --port=8001 &

curl -sSL "http://localhost:8001/api/v1/nodes/<node-name>/proxy/configz" | grep featureGates -A 5

또는 노드에서 구성 파일을 직접 확인하세요.

cat /var/lib/kubelet/config.yaml | grep -A 10 featureGates

메트릭 엔드포인트로 확인

기능 게이트 상태는 쿠버네티스 구성 요소가 Prometheus 스타일 메트릭으로 노출해요(쿠버네티스 1.26+에서 사용 가능). 메트릭 엔드포인트를 쿼리해 어떤 기능 게이트가 활성화됐는지 확인하세요.

kubectl get --raw /metrics | grep kubernetes_feature_enabled

특정 기능 게이트를 확인하려면:

kubectl get --raw /metrics | grep kubernetes_feature_enabled | grep FeatureName

메트릭은 활성화된 게이트에 1, 비활성화된 게이트에 0을 보여 줘요.

참고:

/flagz 엔드포인트로 확인

구성 요소의 디버깅 엔드포인트에 접근할 수 있고, 그 구성 요소에 ComponentFlagz 기능 게이트가 활성화되어 있다면 /flagz 엔드포인트를 방문해 구성 요소를 시작하는 데 사용된 명령줄 플래그를 검사할 수 있어요. 명령줄 플래그로 구성된 기능 게이트가 이 출력에 나타나요.

/flagz 엔드포인트는 쿠버네티스 z-pages의 일부로, 핵심 구성 요소에 대한 사람이 읽을 수 있는 런타임 디버깅 정보를 제공해요.

자세한 내용은 z-pages 문서를 참고하세요.

구성 요소별 요구 사항 이해하기

구성 요소별 기능 게이트의 몇 가지 예시:

  • API 서버 중심: StructuredAuthenticationConfiguration 같은 기능은 주로 kube-apiserver에 영향을 줘요.
  • kubelet 중심: GracefulNodeShutdown 같은 기능은 주로 kubelet에 영향을 줘요.
  • 여러 구성 요소: 일부 기능은 구성 요소 간 조정을 필요로 해요.

주의:

항상 비프로덕션 환경에서 기능 게이트를 먼저 테스트하세요. Alpha 기능은 예고 없이 제거될 수 있어요.

더 알아보기 (Learn more)