목록으로

Programming Notes

# 노드 준비성 컨트롤러를 선보입니다

표준 쿠버네티스 모델에서, 노드의 워크로드 적합성은 단일 이진 "Ready" 조건에 달려 있습니다. 하지만, 현대 쿠버네티스 환경에서 노드는 네트워크 에이전트, 스토리지 드라이버, GPU 펌웨어 또는 사용자 정의 상태 점검과 같은 복잡한 인프라 종속성이 완전히 작동해야만...

Logo for node readiness controller

표준 쿠버네티스 모델에서, 노드의 워크로드 적합성은 단일 이진 "Ready" 조건에 달려 있습니다. 하지만, 현대 쿠버네티스 환경에서 노드는 네트워크 에이전트, 스토리지 드라이버, GPU 펌웨어 또는 사용자 정의 상태 점검과 같은 복잡한 인프라 종속성이 완전히 작동해야만 안정적으로 파드를 호스팅할 수 있습니다.

오늘, 쿠버네티스 프로젝트를 대표하여 노드 준비성 컨트롤러를 발표합니다. 이 프로젝트는 노드 테인트를 관리하기 위한 선언적 시스템을 도입하여, 표준 조건을 넘어 노드 부트스트래핑 중 준비성 보호 장치를 확장합니다. 사용자 정의 상태 신호에 기반하여 테인트를 동적으로 관리함으로써, 이 컨트롤러는 모든 인프라별 요구 사항을 충족한 노드에만 워크로드가 배치되도록 보장합니다.

노드 준비성 컨트롤러가 필요한 이유

코어 쿠버네티스 노드의 "Ready" 상태는 복잡한 부트스트래핑 요구 사항이 있는 클러스터에는 종종 불충분합니다. 운영자는 노드가 스케줄링 풀에 진입하기 전에 특정 데몬셋(DaemonSet)이나 로컬 서비스가 정상 상태인지 확인하는 데 어려움을 겪는 경우가 많습니다.

노드 준비성 컨트롤러는 운영자가 특정 노드 그룹에 맞춰 사용자 정의 스케줄링 게이트를 정의할 수 있도록 하여 이러한 격차를 해소합니다. 이를 통해 이기종 클러스터 전반에 걸쳐 고유한 준비성 요구 사항을 적용할 수 있습니다. 예를 들어, GPU가 장착된 노드는 특수 드라이버가 확인된 후에만 파드를 수락하고, 범용 노드는 표준 경로를 따르도록 보장할 수 있습니다.

이것은 세 가지 주요 이점을 제공합니다:

  • 사용자 정의 준비성 정의: 플랫폼에 맞는 '준비' 상태를 정의합니다.
  • 자동화된 테인트 관리: 컨트롤러는 조건 상태에 따라 노드 테인트를 자동으로 적용하거나 제거하여, 준비되지 않은 인프라에 파드가 배치되는 것을 방지합니다.
  • 선언적 노드 부트스트래핑: 다단계 노드 초기화를 안정적으로 관리하며, 부트스트래핑 프로세스에 대한 명확한 가시성을 제공합니다.

핵심 개념 및 기능

이 컨트롤러는 노드에 대한 선언적 게이트를 정의할 수 있게 해주는 NodeReadinessRule (NRR) API를 중심으로 작동합니다.

유연한 강제 적용 모드

컨트롤러는 두 가지 고유한 운영 모드를 지원합니다:

연속적 강제 적용 (Continuous enforcement)
노드의 전체 수명 주기 동안 준비성 보장을 적극적으로 유지합니다. 장치 드라이버와 같은 중요한 종속성이 나중에 실패하면, 노드는 새로운 스케줄링을 방지하기 위해 즉시 테인트됩니다.
부트스트랩 전용 강제 적용 (Bootstrap-only enforcement)
무거운 이미지 사전 풀링이나 하드웨어 프로비저닝과 같은 일회성 초기화 단계를 위한 것입니다. 조건이 충족되면 컨트롤러는 부트스트랩이 완료되었음을 표시하고 해당 노드에 대한 특정 규칙 모니터링을 중단합니다.

조건 보고

컨트롤러는 자체적으로 상태 점검을 수행하는 대신 노드 조건에 반응합니다. 이러한 분리된 설계 덕분에 에코시스템에 존재하는 다른 도구 및 사용자 정의 솔루션과 원활하게 통합될 수 있습니다:

  • Node Problem Detector (NPD): 기존 NPD 설정 및 사용자 정의 스크립트를 사용하여 노드 상태를 보고합니다.
  • Readiness Condition Reporter: 프로젝트에서 제공하는 경량 에이전트로, 로컬 HTTP 엔드포인트를 주기적으로 확인하고 그에 따라 노드 조건을 패치하도록 배포할 수 있습니다.

드라이 런(Dry Run)을 통한 운영 안전성

전체 노드에 새로운 준비성 규칙을 배포하는 것은 내재된 위험을 수반합니다. 이를 완화하기 위해, 드라이 런 모드는 운영자가 클러스터에 미칠 영향을 먼저 시뮬레이션할 수 있도록 합니다. 이 모드에서 컨트롤러는 의도된 작업을 기록하고 실제 테인트를 적용하지 않고도 영향을 받는 노드를 표시하도록 규칙의 상태를 업데이트하여, 강제 적용 전에 안전한 유효성 검사를 가능하게 합니다.

예시: 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: ""

데모:

참여 방법

노드 준비성 컨트롤러는 이제 막 시작 단계에 있으며, 초기 릴리스가 출시된 상태로 로드맵을 개선하기 위한 커뮤니티 피드백을 기다리고 있습니다. KubeCon NA 2025에서 생산적인 언컨퍼런스(Unconference) 논의를 마친 후, 직접 대면하여 대화를 이어갈 수 있게 되어 기쁩니다.

KubeCon + CloudNativeCon Europe 2026에서 저희 메인테이너 트랙 세션인 비결정적 스케줄링 해결: 노드 준비성 컨트롤러 소개 에 참여해 주세요.

그동안 다음 링크에서 진행 상황을 확인하거나 기여할 수 있습니다: