Node Readiness Controller 소개
Source: Kubernetes Blog
Source: …
Node Readiness Controller는 왜 필요한가?
핵심 Kubernetes 노드 Ready 상태는 복잡한 부팅 요구 사항을 가진 클러스터에 충분하지 않은 경우가 많습니다. 운영자는 종종 특정 DaemonSet이나 로컬 서비스가 정상인지 확인한 뒤에야 노드를 스케줄링 풀에 넣어야 하는 어려움을 겪습니다.
Node Readiness Controller는 이러한 격차를 메워 주며, 운영자가 특정 노드 그룹에 맞춘 맞춤형 스케줄링 게이트를 정의할 수 있게 합니다. 이를 통해 이기종 클러스터 전반에 걸쳐 서로 다른 준비 요구 사항을 강제할 수 있습니다. 예시:
- GPU 장착 노드는 특수 드라이버가 검증된 후에만 파드 수락.
- 범용 노드는 표준 경로를 따름.
주요 장점
- 맞춤형 준비 정의 – 플랫폼에 맞는 “준비 완료” 의미를 정의합니다.
- 자동 Taint 관리 – 컨트롤러가 조건 상태에 따라 노드 taint를 자동으로 적용하거나 제거하여, 준비되지 않은 인프라에 파드가 배치되는 것을 방지합니다.
- 선언형 노드 부팅 – 다단계 노드 초기화를 신뢰성 있게 관리하고, 부팅 과정에 대한 명확한 가시성을 제공합니다.
핵심 개념 및 기능
컨트롤러는 NodeReadinessRule (NRR) API를 중심으로 하며, 이를 통해 노드에 대한 게이트를 선언할 수 있습니다.
유연한 적용 모드
| Mode | Description |
|---|---|
| Continuous enforcement | 노드 전체 수명 주기 동안 준비 상태 보장을 적극적으로 유지합니다. 중요한 종속성(예: 디바이스 드라이버)이 나중에 실패하면, 노드는 즉시 taint가 적용되어 새로운 스케줄링을 방지합니다. |
| Bootstrap‑only enforcement | 한 번만 수행되는 초기화 단계(예: 대용량 이미지 사전 풀링 또는 하드웨어 프로비저닝)를 위해 설계되었습니다. 조건이 충족되면 컨트롤러는 부트스트랩을 완료된 것으로 표시하고 해당 노드에 대한 특정 규칙 모니터링을 중단합니다. |
조건 보고
컨트롤러는 자체적으로 건강 검사를 수행하는 대신 Node Conditions에 반응합니다. 이러한 분리된 설계는 기존 도구 및 맞춤형 솔루션과의 원활한 통합을 가능하게 합니다:
- Node Problem Detector (NPD) – 기존 NPD 설정 및 맞춤 스크립트를 사용하여 노드 상태를 보고합니다.
- Readiness Condition Reporter – 프로젝트에서 제공하는 경량 에이전트로, 로컬 HTTP 엔드포인트를 주기적으로 확인하고 이에 따라 노드 조건을 패치할 수 있습니다.
드라이 런을 통한 운영 안전성
전체 클러스터에 새로운 준비 규칙을 배포하는 것은 본질적인 위험을 수반합니다. Dry‑run mode를 사용하면 적용 전에 영향을 시뮬레이션할 수 있습니다:
- 컨트롤러는 의도된 작업을 로그에 기록합니다.
- 실제 taint를 적용하지 않고 영향을 받는 노드를 표시하도록 규칙 상태를 업데이트합니다.
이를 통해 프로덕션 롤아웃 전에 안전한 검증이 가능합니다.
예시: CNI 부트스트래핑
다음 NodeReadinessRule은 CNI 에이전트가 정상 작동할 때까지 노드가 스케줄되지 않도록 보장합니다. 컨트롤러는 사용자 정의 cniplugin.example.net/NetworkReady 조건을 모니터링하고, 상태가 True가 되면 readiness.k8s.io/acme.com/network-unavailable 테인트를 제거합니다.
apiVersion: readiness.node.x-k8s.io/v1alpha1
kind: NodeReadinessRule
metadata:
name: network-readiness-rule
spec:
conditions:
- type: "cniplugin.example.net/NetworkReady"
requiredStatus: "True"
taint:
key: "readiness.k8s.io/acme.com/network-unavailable"
effect: "NoSchedule"
value: "pending"
enforcementMode: "bootstrap-only"
nodeSelector:
matchLabels:
node-role.kubernetes.io/worker: ""
참여하기
Node Readiness Controller는 이제 막 시작 단계입니다. KubeCon NA 2025에서의 생산적인 Unconference 토론에 이어, 우리는 직접 만나 대화를 이어가고 싶습니다.
- 예정 세션: KubeCon + CloudNativeCon Europe 2026 – Addressing Non‑Deterministic Scheduling: Introducing the Node Readiness Controller
- GitHub:
- Slack:
#sig-node-readiness-controller채널에서 대화에 참여하세요 - 문서: Getting Started (link to docs)