피드로 돌아가기
Kubernetes BlogDevOps
원문 읽기
Kubernetes v1.34가 CSI 드라이버의 동적 노드 볼륨 용량 업데이트 기능을 베타로 승격시켜 정적 정보로 인한 Pod 스케줄링 실패 감소
Kubernetes v1.34: Mutable CSI Node Allocatable Graduates to Beta
AI 요약
Context
Kubernetes CSI 드라이버는 초기화 시 정적 최대 볼륨 첨부 제한을 보고하므로, 노드 라이프사이클 중 실제 용량이 변할 때 스케줄러가 오래된 정보로 Pod을 배치하게 되어 ContainerCreating 상태에서 영구히 멈추는 문제가 발생했다. 이는 수동/외부 작업, 동적 네트워크 인터페이스 추가, 다중 CSI 드라이버 간섭 등으로 인해 발생한다.
Technical Solution
- CSI 드라이버가 nodeAllocatableUpdatePeriodSeconds를 설정하여 주기적 업데이트 메커니즘 활성화: kubelet이 CSI driver의 NodeGetInfo 메서드를 설정된 간격(최소 10초)으로 호출하여 할당 가능 볼륨 수 갱신
- ResourceExhausted 에러(gRPC 코드 8)를 즉시 감지하는 반응형 업데이트 도입: 다음 주기 업데이트를 기다리지 않고 즉시 할당 가능 용량을 업데이트하고 영향받은 Pod을 Failed로 표시
- MutableCSINodeAllocatableCount 기능 게이트를 kube-apiserver 및 kubelet 컴포넌트에서 활성화하여 베타 기능 사용 가능
- CSI 드라이버 설정 예시: apiVersion: storage.k8s.io/v1에서 nodeAllocatableUpdatePeriodSeconds: 60으로 지정하여 60초마다 노드의 할당 가능 볼륨 수 갱신
Key Takeaway
정적 리소스 정보를 동적으로 업데이트하는 이중 메커니즘(주기적 + 반응형)은 스케줄러의 정확도를 높이면서도 최소 업데이트 간격으로 오버헤드를 제한하는 설계 원칙을 보여준다.
실천 포인트
Kubernetes 환경에서 CSI 드라이버를 사용 중인 팀은 v
1.34 업그레이드 후 MutableCSINodeAllocatableCount 기능 게이트를 활성화하고 CSI 드라이버 설정에서 nodeAllocatableUpdatePeriodSeconds를 10~60초 범위로 구성하면, Pod 스케줄링 실패로 인한 ContainerCreating 상태 문제를 줄일 수 있다.