노드 선언형 기능

기능 상태: Kubernetes v1.36 [beta](enabled by default)

쿠버네티스 노드는 새로운 기능이나 기능 게이트가 적용된 특정 기능의 가용성을 보고하기 위해 선언형 기능(declared features) 을 사용한다. 컨트롤 플레인의 구성 요소는 이 정보를 활용하여 더 나은 결정을 내린다. kube-scheduler는 NodeDeclaredFeatures 플러그인을 통해 파드가 요구하는 기능을 명시적으로 지원하는 노드에만 배치되도록 보장한다. 또한, NodeDeclaredFeatureValidator 승인 컨트롤러는 파드 업데이트 시 노드의 선언형 기능을 기준으로 검증을 수행한다.

이 메커니즘은 특히 클러스터 업그레이드 시나, 모든 노드에 동일한 기능이 활성화되어 있지 않을 수 있는 혼합 버전 환경에서 버전 불일치를 관리하고 클러스터 안정성을 높이는 데 도움이 된다. 이 기능은 새로운 노드 수준의 기능을 도입하는 쿠버네티스 기능 개발자를 위해 고안되었으며, 백그라운드에서 작동한다. 파드를 배포하는 애플리케이션 개발자는 이 프레임워크와 직접 상호작용할 필요가 없다.

작동 방식

  1. Kubelet 기능 보고: 시작 시, 각 노드의 kubelet은 현재 활성화된 관리형 쿠버네티스 기능을 감지하고 노드의 .status.declaredFeatures 필드에 보고한다. 이 필드에는 현재 활발히 개발 중인 기능만 포함된다.
  2. 스케줄러 필터링: 기본 kube-scheduler는 NodeDeclaredFeatures 플러그인을 사용한다. 이 플러그인은
    • PreFilter 단계에서 PodSpec을 확인하여 파드가 필요로 하는 노드의 기능 집합을 추론한다.
    • Filter 단계에서 노드의 .status.declaredFeatures에 나열된 기능이 파드에서 추론된 요구사항을 충족하는지 확인한다. 파드는 필요한 기능이 없는 노드에 스케줄링되지 않는다. 사용자 정의 스케줄러도 .status.declaredFeatures 필드를 활용하여 유사한 제약 조건을 강제할 수 있다.
  3. 승인 제어: nodedeclaredfeaturevalidator 승인 컨트롤러는 바인딩된 노드가 선언하지 않은 기능을 요구하는 파드를 거부할 수 있으며, 이를 통해 파드 업데이트 중 발생하는 문제를 방지한다.

노드 선언형 기능 활성화

노드 선언형 기능을 사용하려면, kube-apiserver, kube-scheduler, 그리고 kubelet의 구성 요소에서 NodeDeclaredFeatures 기능 게이트를 활성화해야 한다.

다음 내용