4월 22일 릴리스 예정인 쿠버네티스 1.36 체인지로그를 훑다가, DRA(Dynamic Resource Allocation) 쪽 변경사항에서 멈췄다. GPU 디바이스에 taint를 걸고 toleration으로 제어한다고? 노드가 아니라 디바이스 단위로? 이건 좀 다른 이야기다.
DRA가 뭐가 달라졌나
1.33에서 GA된 DRA가 1.36에서 한 단계 더 간다. 핵심은 세 가지.
디바이스 taint & toleration. 노드에 taint 걸어서 스케줄링 제어하는 건 K8s의 기본기다. 1.36은 이걸 디바이스 레벨로 끌어내렸다. GPU 한 장이 에러를 뱉기 시작하면, 그 디바이스만 taint를 걸어서 일반 워크로드는 자동으로 피하게 하고, 디버깅 용도의 파드만 toleration을 붙여서 접근하게 할 수 있다.
지금까지는 GPU 하나 때문에 노드 전체를 drain해야 했다. 8장짜리 노드에서 1장이 문제면 나머지 7장도 놀게 되는 거였는데, 이제 그 삽질이 끝난다. 새벽 3시에 알람 받고 일어나서 kubectl drain부터 치던 습관도 바뀔 것 같다.
PodResources API 확장. Kubelet의 PodResources API가 DRA 리소스까지 리포팅하게 됐다. 프로메테우스나 NVIDIA DCGM exporter 같은 모니터링 스택에서 "이 파드가 정확히 어떤 GPU를 물고 있는지"를 직접 조회할 수 있다. 여태까지 nvidia-smi랑 파드 스펙을 눈으로 대조하던 짓을 안 해도 된다는 뜻이다. Kubelet 재시작 시에도 DRAManager가 체크포인트를 유지하니까 할당 정보가 날아가지 않는다.
Downward API로 디바이스 속성 노출. 아직 알파지만 방향이 중요하다. 파드 안에서 자기가 할당받은 GPU의 하드웨어 ID, NUMA affinity, 벤더 커스텀 스트링을 환경변수나 볼륨 파일로 읽을 수 있다. 트레이닝 잡에서 GPU 토폴로지를 직접 확인하고 NCCL 설정을 동적으로 잡는 시나리오가 열린다.
사실상 GPU 스케줄링의 재발명
솔직히 말하면, 지금까지 K8s에서 GPU 관리는 반쪽짜리였다. nvidia.com/gpu: 1이라고 리소스 리퀘스트를 넣으면 스케줄러가 알아서 배치해주긴 하는데, 어떤 GPU가 할당됐는지, 그 디바이스의 상태가 어떤지는 파드 입장에서 알 수 없었다. 노드 레벨의 label과 taint로 우회하는 게 최선이었고, device plugin은 구조적으로 한계가 뚜렷했다.
DRA는 이 문제를 근본적으로 풀려는 시도고, 1.36에서 비로소 실무에서 쓸 만한 수준에 도달하는 것 같다. AI 워크로드가 A100 8장, H100 16장을 한꺼번에 요구하는 시대에, 디바이스 단위의 헬스체크와 자동 우회는 선택이 아니라 필수다. MIG(Multi-Instance GPU) 파티션별로 taint를 거는 것도 가능해지면, GPU 활용률을 끌어올리는 데 상당한 도움이 될 거다.
보안: User Namespaces가 드디어 stable
User Namespaces가 stable로 올라간다. 컨테이너 안에서는 root인데 호스트에서는 비특권 사용자로 매핑되는 기능이다. 컨테이너 탈출 공격의 임팩트를 확실히 줄여주는 건데, 이게 왜 이제서야 stable인지 의아할 정도로 오래 걸렸다.
manifest 기반 admission control(KEP-5793)도 알파로 들어온다. etcd 없이도 API 서버 기동 시점부터 보안 정책이 적용된다는 뜻이다. etcd가 날아간 재해 상황에서도 기본 정책이 살아있으니, 클러스터 부트스트랩 보안에서 꽤 의미 있는 한 걸음이다.
OCI 아티팩트 마운트 — LLM 시대의 볼륨
개인적으로 가장 실용적이라고 느낀 건 OCI 아티팩트를 VolumeSource로 마운트하는 기능이다. Hugging Face에서 모델 웨이트를 OCI 아티팩트로 패키징해서 레지스트리에 푸시하면, ConfigMap 마운트하듯 파드에 붙일 수 있다.
initContainer에서 wget으로 모델 다운받거나, 70GB짜리 이미지에 웨이트를 때려박는 야매를 쓰던 팀이라면 이게 게임체인저다. 이미지 풀 시간이 극적으로 줄고, 모델 버전 관리와 컨테이너 이미지 스캐닝을 독립적으로 돌릴 수 있어서 공격 표면도 줄어든다. MLOps 파이프라인에서 모델 아티팩트만 따로 롤백하는 것도 자연스러워진다.
4월 22일 전에 할 일
1.36은 릴리스 노트 전체에 "AI 인프라를 K8s 위에서 제대로 돌려보자"라는 메시지가 깔려있다. DRA 개선, OCI 아티팩트 마운트, 디바이스 속성 노출 — 전부 GPU/TPU 기반 워크로드를 의식한 변화다.
GPU 노드를 운영 중인 팀은 스테이징에서 디바이스 taint 기능부터 테스트해보길 권한다. 지금 kubectl drain으로 처리하고 있는 GPU 장애 대응 플레이북이 있다면, 그게 얼마나 단순해지는지 직접 확인할 수 있을 거다.