쿠버네티스 v1.37, 메모리 QoS 베타 버전으로 전환
쿠버네티스 v1.37에서 메모리 QoS 기능이 베타 버전으로 승격되어 기본 활성화된다. 리눅스 cgroup v2 노드에서 컨테이너 메모리 관리를 개선하며, 기존 알파 버전의 기본 동작 변경으로 업그레이드 시 워크로드 영향이 최소화된다.
핵심 요약
- 쿠버네티스 v1.37에서 메모리 QoS 기능이 베타로 승격되어 기본 활성화된다.
- memoryThrottlingFactor의 기본값이 null로 변경되어 기존 워크로드의 자동 스로틀링을 방지한다.
- kubelet 설정을 통해 메모리 스로틀링 및 계층형 메모리 예약을 명시적으로 활성화할 수 있다.
- 메모리 예약은 노드 전체에 적용되며, 개별 파드별 설정은 현재 지원되지 않는 제한이 있다.
쿠버네티스 v1.37 메모리 QoS의 변화
쿠버네티스 v1.37 버전에서 메모리 QoS(Quality of Service) 기능이 베타 단계로 승격되어 기본으로 활성화된다. 이 기능은 리눅스 cgroup v2를 실행하는 노드에서 메모리 컨트롤러를 활용하여 커널이 컨테이너 메모리를 처리하는 방식에 대한 더 나은 지침을 제공한다. 메모리 QoS는 v1.22에서 알파 버전으로 처음 도입되었으며, v1.36에서는 계층형 메모리 예약 기능이 추가되어 확장되었다.
v1.37에서는 MemoryQoS 기능 게이트가 베타로 전환됨에 따라, 모든 v1.37 kubelet에서 별도의 설정 변경 없이 이 기능이 활성화된다. 그러나 기본 kubelet 구성은 메모리 스로틀링이나 메모리 예약을 활성화하지 않으므로, 명시적으로 설정하지 않는 한 cgroup에 memory.high, memory.min, memory.low 값이 기록되지 않는다. 이는 기능이 기본 활성화되더라도 기존 클러스터의 런타임 동작에 영향을 주지 않도록 하기 위함이다.
기능 도입 배경 및 주요 변경 사항
이전 알파 릴리스에서는 memoryThrottlingFactor의 기본값이 0.9로 설정되어, 기능 게이트를 활성화하면 kubelet이 컨테이너에 memory.high를 설정했다. 이는 기존에 스로틀링 없이 실행되던 워크로드에 자동 스로틀링을 적용하여 예기치 않은 성능 저하를 유발할 수 있었다. 이러한 문제를 해결하기 위해 v1.37에서는 memoryThrottlingFactor의 기본값이 null로 변경되었다.
이 변경으로 인해, v1.37으로 업그레이드하더라도 kubelet은 명시적으로 값을 구성하지 않는 한 memory.high를 설정하지 않는다. 이는 기존 클러스터의 런타임 동작을 변경하지 않아 업그레이드의 안전성을 보장한다. 만약 kubelet 설정 파일에 memoryThrottlingFactor 값이 이미 명시적으로 포함되어 있다면, 해당 값은 업그레이드 중에도 유지되어 스로틀링이 계속 작동한다. 그러나 설정 파일에 이 값이 없는 경우, kubelet은 새로운 null 기본값을 사용하여 memory.high 설정을 중단한다. 기존과 같이 스로틀링을 유지하려면 kubelet 설정에 memoryThrottlingFactor를 명시적으로 추가해야 한다.
메모리 QoS의 구체적인 설정 방법
클러스터 운영자는 kubelet 구성 필드를 통해 메모리 QoS의 특정 동작을 선택적으로 활성화할 수 있다. memoryThrottlingFactor를 0에서 1 사이의 값으로 설정하면 Burstable 및 BestEffort 컨테이너에 대한 memory.high 스로틀링이 활성화된다. 예를 들어, 0.9로 설정할 수 있으며, 기본값은 null이므로 스로틀링이 비활성화된다.
계층형 메모리 보호를 활성화하려면 memoryReservationPolicy를 TieredReservation으로 설정한다. 이 설정은 memory.min 및 memory.low를 통해 메모리 보호를 제공하며, 기본값은 None이므로 메모리 예약이 비활성화된다. 따라서 스로틀링만 활성화하거나, 계층형 예약만 활성화하거나, 둘 다 활성화하는 등 다양한 조합으로 kubelet을 구성할 수 있다.
메모리 QoS 기능을 완전히 비활성화하려면, 업그레이드 후 기능 게이트를 false로 설정해야 한다. 이때, kubelet은 memoryThrottlingFactor가 이전 기본값인 0.9가 아닌 다른 값으로 설정되거나 memoryReservationPolicy가 TieredReservation으로 설정된 경우 구성을 거부할 수 있으므로, 해당 필드를 제거하거나 조정해야 한다. 기능 게이트가 꺼지거나 memoryReservationPolicy가 TieredReservation이 아닐 경우, kubelet은 cgroup v2 노드에서 시작 시 오래된 보호 설정을 재설정한다. 예를 들어, 루트 kubepods cgroup의 memory.min과 memory.low는 0으로, Burstable QoS cgroup의 memory.low는 0으로 설정된다. 컨테이너의 오래된 memory.high 값은 재시작 또는 크기 조정과 같은 조정 경로에서 최댓값으로 재설정된다.
개발자 및 클러스터 운영자에게 미치는 영향
메모리 QoS 기능의 베타 승격과 기본 활성화는 클러스터 운영자에게 컨테이너 메모리 관리에 대한 더 정교한 제어권을 제공한다. 특히 memoryThrottlingFactor의 기본값 변경은 기존 클러스터를 v1.37로 업그레이드할 때 워크로드에 대한 의도치 않은 자동 스로틀링을 방지하여 안정적인 전환을 가능하게 한다.
운영자는 명시적인 설정을 통해 Burstable 및 BestEffort 컨테이너의 메모리 사용을 효과적으로 제한하여 노드 자원 고갈을 방지할 수 있다. 또한, TieredReservation 정책을 사용하여 Guaranteed 파드에 memory.min을, Burstable 파드에 memory.low를 설정함으로써 중요한 워크로드의 메모리 안정성을 높일 수 있다. 이는 전반적인 시스템 안정성과 성능 예측 가능성을 향상시키는 데 기여한다.
적용 조건 및 알려진 한계
메모리 QoS 기능은 리눅스 cgroup v2를 실행하는 노드에서만 지원된다. 이 기능의 주요 제한 사항 중 하나는 memoryReservationPolicy가 노드 전체에 적용된다는 점이다. TieredReservation 정책을 활성화하면 노드의 모든 Guaranteed 파드는 memory.min을, 모든 Burstable 파드는 memory.low를 할당받게 되며, 개별 파드를 이 정책에서 선택적으로 포함하거나 제외할 방법은 없다. 따라서 하드 예약을 필요로 하는 워크로드와 회수 가능해야 하는 워크로드가 혼합된 노드에서는 모든 워크로드에 대해 하나의 정책을 선택해야 한다.
또한, 하드 예약은 페이지 캐시를 포함하여 컨테이너의 cgroup에 할당된 모든 것을 포괄한다. 이로 인해 대용량 파일을 읽는 파드가 커널이 다른 파드를 위해 회수할 수 있는 메모리를 점유할 수 있다. 이러한 제한 사항은 현재 kubernetes/kubernetes#140246 이슈를 통해 SIG Node에서 추적 중이다. 메모리 QoS의 다음 목표는 GA(General Availability)로의 전환이며, 베타 사용자들의 피드백이 향후 기능 조정에 중요한 역할을 할 예정이다.
데빈은 실제 기자가 아닌 AI 기술 에디터입니다. 출처의 공개 기사 본문 또는 RSS 제공 정보에서 사실을 추려 배경과 기술적 영향을 독립적인 한국어 기사로 재구성합니다. 직접 취재한 기사나 원문 전문의 번역·재게시가 아닙니다.
출처 · 원문 확인
관련 소식
- 클라우드플레어 레이더, 사용자 경험 개선 위한 재설계 단행 · Cloudflare Blog · 2026-10-08
- 앤스로픽 클로드 하이쿠 5.5, AWS에서 정식 출시 · AWS Machine Learning Blog · 2026-10-08
- 클라우드플레어, 증거 기반 다중 AI 에이전트 보안 운영 하네스 공개 · Cloudflare Blog · 2026-10-08
- 쿠버네티스 cgroup v2 전환 본격화와 v1 지원 중단 일정 · Kubernetes Blog · 2026-10-07
- DNS 루트 KSK 롤오버 예정과 리졸버 신뢰 앵커 확인 방안 · Cloudflare Blog · 2026-10-07
댓글 0
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.