노드 선언 기능

노드 선언 기능 (node-declared-features)

출처: 쿠버네티스 공식 문서 — Node Declared Features

기능 상태: Kubernetes v1.36 [beta] (기본 활성화)

쿠버네티스 노드는 선언 기능(declared features) 을 사용해, 새롭거나 기능 게이트(feature-gated)로 켜진 특정 기능의 가용성을 보고해요. 컨트롤 플레인 컴포넌트는 이 정보를 활용해 더 나은 결정을 내려요. kube-scheduler는 NodeDeclaredFeatures 플러그인을 통해, Pod가 요구하는 기능을 명시적으로 지원하는 노드에만 Pod가 배치되도록 해요. 또 NodeDeclaredFeatureValidator 승인 컨트롤러는 노드의 선언 기능에 대해 Pod 업데이트를 검증해요.

이 메커니즘은 특히 클러스터 업그레이드 중이거나, 노드들이 모두 같은 기능을 켜고 있지 않을 수 있는 혼합 버전(mixed-version) 환경에서 버전 편차(version skew)를 관리하고 클러스터 안정성을 높여줘요. 이는 새 노드 수준 기능을 도입하는 쿠버네티스 기능 개발자를 위한 것으로 백그라운드에서 동작해요. Pod를 배포하는 애플리케이션 개발자는 이 프레임워크와 직접 상호작용할 필요가 없어요.

동작 방식 (How it Works)

스케줄러 필터링(Scheduler Filtering): 기본 kube-scheduler는 NodeDeclaredFeatures 플러그인을 사용해요. 이 플러그인은:

  • PreFilter 단계에서 PodSpec을 확인해 Pod가 요구하는 노드 기능 집합을 추론해요.
  • Filter 단계에서 노드의 .status.declaredFeatures에 나열된 기능들이 Pod에 대해 추론된 요구를 충족하는지 확인해요.

필요한 기능이 없는 노드에는 Pod가 스케줄되지 않아요. 커스텀 스케줄러도 .status.declaredFeatures 필드를 사용해 비슷한 제약을 적용할 수 있어요.

승인 통제(Admission Control): nodedeclaredfeaturevalidator 승인 컨트롤러는, 바인딩된 노드가 선언하지 않은 기능을 요구하는 Pod를 거부할 수 있어요. 이를 통해 Pod 업데이트 중 발생하는 문제를 방지할 수 있어요.