01무엇이 열렸나
이 섹션은 해석 없이 사실만 정리합니다. 무엇을, 어디까지, 어떤 방식으로 설정할 수 있는지입니다.
Amazon EKS는 2026-08-12에 Advanced Kubernetes control plane configuration 기능을 출시했습니다. EKS가 관리하는 컨트롤 플레인(클러스터의 결정을 내리는 관리 계층 - API 서버, 스케줄러, 컨트롤러 매니저)의 파라미터 4종을 고객이 직접 설정할 수 있습니다.
아래 표에서 볼 것은 세 가지입니다. 어느 컴포넌트의 어떤 파라미터인지, 허용 범위가 얼마나 좁은지, 그리고 horizontalPodAutoscalerSyncPeriod 하나만 Provisioned Control Plane (컨트롤 플레인 용량을 사전 할당하는 모드, 이하 PCP)을 요구한다는 점입니다.
| 컴포넌트 | 파라미터 | 허용 범위 | 기본값 | PCP 필요 |
|---|---|---|---|---|
| kube-scheduler | nodeResourcesFit.scoringStrategy | LeastAllocated, MostAllocated | LeastAllocated (cpu:1, memory:1) | 아니요 |
| kube-controller-manager | horizontalPodAutoscalerSyncPeriod | 10s ~ 15s | 15s | 예 |
| kube-apiserver | eventTtl | 10m ~ 60m | 60m | 아니요 |
| kube-apiserver | serviceNodePortRange | minPort/maxPort 각 10260 ~ 32767 | 30000 ~ 32767 | 아니요 |
설정 방식은 신규 API가 아니라 기존 API의 확장입니다. CreateCluster와 UpdateClusterConfig 오퍼레이션에 컴포넌트별 파라미터가 추가되었고, 콘솔, AWS CLI, SDK, CloudFormation에서 같은 방식으로 쓸 수 있습니다.
통제 장치 세 가지가 함께 붙어 있습니다. 각 파라미터는 EKS가 검증한 범위(validated range) 안의 값만 받고, 모든 변경은 CloudTrail에 기록되며, 설정은 항상 클러스터 전역입니다. 네임스페이스나 워크로드 단위로 스코프를 좁히는 방법은 없습니다.
지원 대상은 Kubernetes 1.31 이상의 신규 및 기존 클러스터이고, 모든 AWS 상용 리전과 GovCloud, 중국 리전에서 쓸 수 있습니다. 추가 요금은 없습니다. 단 표의 마지막 열이 보여주듯 HPA sync period 하나만 PCP(티어 시간당 과금)를 요구합니다.
이 기능의 출시 자체는 기존 클러스터의 동작을 바꾸지 않습니다. 파라미터를 명시적으로 설정하기 전까지 모든 클러스터는 기본값으로 동작합니다. 즉 "업그레이드했더니 스케줄링이 달라졌다" 같은 경로는 이 기능에는 없습니다.
02왜 의미가 있나
파라미터 4개는 숫자로 보면 작은 개방입니다. 그런데 관리형 Kubernetes에서 고객과 서비스 제공자를 나누던 통제 경계가 컨트롤 플레인 안쪽으로 움직였다는 점에서 의미가 있습니다.
2.1 지금까지 컨트롤 플레인 플래그는 EKS의 영역이었습니다
직접 설치한 Kubernetes에서는 kube-scheduler나 kube-apiserver의 플래그를 운영자가 정합니다. EKS 같은 관리형 서비스에서는 그 결정권이 서비스 쪽에 있었습니다. EKS가 컨트롤 플레인의 가용성을 책임지는 대신 컴포넌트 설정도 EKS가 정하는 구조였습니다.
이 경계가 실제로 아팠던 지점이 스케줄러 점수 전략입니다. 노드를 채워서 쓰는 MostAllocated 방식으로 컴퓨트 비용을 줄이고 싶어도 관리형 컨트롤 플레인의 스케줄러 설정에는 손댈 방법이 없었습니다. 이번 기능은 그 요구를 관리형 서비스의 API 안으로 가져왔습니다.
2.2 완전 개방이 아니라 검증된 범위 안의 개방입니다
설계를 보면 EKS가 무엇을 지키려 했는지 드러납니다. 개방된 것은 컴포넌트 플래그 전체가 아니라 파라미터 4종이고, 각 파라미터의 폭도 좁습니다. HPA sync period는 10s에서 15s 사이 5초 폭이고, eventTtl은 기본값 60m에서 줄이는 방향만 열려 있으며, serviceNodePortRange의 상한은 32767로 고정되어 있습니다.
스케줄러 전략도 같은 패턴입니다. 업스트림 Kubernetes의 scoringStrategy 가운데 RequestedToCapacityRatio는 지원하지 않고, LeastAllocated와 MostAllocated 두 가지만 받습니다. 검증된 범위 안에서만 값을 받는 이 구조는 컨트롤 플레인의 안정성 책임을 EKS가 계속 지겠다는 설계로 읽힙니다. 이 문장은 공식 문서의 표현이 아니라 허용 범위의 모양에서 끌어낸 해석입니다.
2.3 버전별 기본값은 DescribeClusterVersions가 기준입니다
표 1의 기본값과 허용 범위는 발행 시점의 Kubernetes 버전(EKS 1.31 이상) 기준이고, 이후 버전에서 바뀔 수 있습니다. AWS 문서가 지정한 버전별 source of truth는 DescribeClusterVersions API입니다. 버전마다 defaultValue와 constraints를 반환하므로, IaC나 자동화에 기본값을 하드코딩하지 말고 이 API를 조회하는 편이 안전합니다.
03파라미터별 심층 분석
파라미터 4종을 하나씩 봅니다. 각 파라미터마다 무엇을 바꾸는지, 언제 조정할 가치가 있는지, 어떤 함정이 있는지 순서로 정리합니다.
3.1 kube-scheduler - nodeResourcesFit scoringStrategy
스케줄러는 두 단계로 동작합니다. filter 단계에서 pod를 실행할 수 있는 노드를 골라내고, score 단계에서 후보 노드에 점수를 매겨 최고점 노드에 배치합니다. 자원 확인과 점수화는 nodeResourcesFit 플러그인이 담당하는데, 이번에 열린 것은 그중 score 단계의 전략입니다. filter 단계는 바뀌지 않습니다.
실행 가능 노드 선별"] F --> S["score
nodeResourcesFit 점수화"] S --> B["최고점 노드에 배치"]
전략은 두 가지 중에서 고릅니다. 기본값 LeastAllocated는 할당이 적은 노드를 선호해 워크로드를 분산하고, MostAllocated는 할당이 많은 노드를 선호해 워크로드를 집적합니다. 집적하면 가볍게 쓰이는 노드에 새 워크로드가 가지 않으므로, consolidation을 지원하는 노드 풀이 그 노드를 제거해 컴퓨트 비용을 줄일 수 있습니다. 업스트림 Kubernetes의 RequestedToCapacityRatio 전략은 지원하지 않습니다.
scoringStrategy.resources에는 cpu, memory와 가속기 3종(nvidia.com/gpu, aws.amazon.com/neuron, aws.amazon.com/neuroncore)을 가중치 1~100으로 나열할 수 있습니다. 가중치는 상대값입니다. cpu 100, memory 1로 두어도 memory가 무시되는 것이 아니라 cpu가 100배 가중될 뿐이고, 모든 후보 노드의 CPU 가용량이 같다면 사실상 memory가 배치를 결정합니다.
resources 배열을 지정하면 나열한 리소스만 점수화하고, 뺀 리소스는 계산에서 완전히 제외됩니다. cpu 100만 쓰면 memory의 영향은 0이 됩니다. 영향을 줄이되 유지하고 싶다면 낮은 가중치로라도 나열해야 합니다.
가속기 가중치는 해당 리소스를 resources.requests로 선언한 pod에만 영향을 줍니다. 가속기 3종은 extended resource라서 device plugin이 kubelet에 광고해야 점수화 대상이 되고, 드라이버만으로 노출된 리소스는 nodeResourcesFit에 보이지 않습니다. DRA로 관리되는 리소스는 별도 플러그인이 스케줄링하므로 이 점수화와 무관합니다.
운영 관점의 주의점은 세 가지입니다.
- 실행 중인 pod는 이동하지 않습니다. 전략은 향후 스케줄링에만 영향을 주고, 기존 pod를 재배치하려면 evict나 재시작이 필요합니다.
- MostAllocated는 blast radius를 집중시킵니다. 노드나 AZ 장애 시 동시에 영향받는 pod가 늘어나고, churn이 높은 클러스터에서는 Pending pod가 증가할 수 있습니다.
- 스케줄러와 노드 관리는 다른 계층입니다. 이 설정은 EKS Auto Mode나 Karpenter의 프로비저닝과 제거 방식을 바꾸지 않으므로, 결합했을 때의 동작을 직접 검증해야 합니다.
3.2 kube-controller-manager - HPA sync period
HPA 컨트롤러가 각 HorizontalPodAutoscaler 객체의 메트릭을 조회하고, 원하는 replica 수를 계산해 변경이 필요하면 업데이트하는 주기입니다. 허용 범위는 10s에서 15s, 기본값은 15s입니다. 단축하면 부하 증가 후 더 빨리 스케일합니다.
이 파라미터만 Provisioned Control Plane이 필수인 이유가 있습니다. 주기 단축은 모든 HPA 객체의 reconcile 빈도를 올려 API 서버 요청을 늘립니다(reconcile당 최소 1개 요청, replica 변경 시 2개 추가). PCP는 용량을 미리 할당하는 모드라 이 증가를 흡수할 수 있고, Standard 모드에서 설정하면 실패합니다. 또 15s에서 10s로 최대 단축하면 같은 큐를 처리할 시간이 줄어, 지원 가능한 HPA 객체 수가 약 1/3 감소합니다. 사전에 kubectl get hpa --all-namespaces로 객체 수를 확인하세요.
EKS는 클러스터의 HPA 객체 수 대비 검증을 하지 않습니다. 지원 한도를 초과한 상태여도 설정 변경은 성공합니다. 초과하면 일부 객체가 제때 reconcile되지 않는데, 경보도 Kubernetes 이벤트도 없습니다. 증상은 "오토스케일이 기대보다 느려짐"으로, 주기를 줄인 의도와 정반대입니다. 이 증상이 관찰되면 15s로 복원하는 것이 권장됩니다.
Provisioned Control Plane이 이 부하를 흡수하는 근거는 티어별 사전 할당 용량입니다. 아래 표에서 티어별 API 동시성과 함께, HPA 객체를 병렬로 처리하는 워커 수인 HPA sync concurrency를 볼 수 있습니다. 업스트림 Kubernetes 기본값이 5인 것과 비교하면 PCP 티어는 10배에서 40배 높게 튜닝되어 있습니다.
| 티어 | API 요청 동시성 (seats) | pod 스케줄링 (개/초) | HPA sync concurrency |
|---|---|---|---|
| XL | 2,000 | 167 | 50 |
| 2XL | 4,000 | 283 | 100 |
| 4XL | 8,000 | 400 | 200 |
| 8XL | 16,000 | 400 | 200 |
티어 수치는 Kubernetes 버전에 따라 다르므로(1.30에서 1.33은 API 동시성이 더 낮습니다), 정확한 값은 DescribeClusterVersions로 조회하는 것이 안전합니다.
3.3 kube-apiserver - eventTtl
Kubernetes 이벤트(pod 스케줄링, 이미지 pull, 헬스체크 실패, 스케일링 등)의 보존 기간입니다. 허용 범위는 10m에서 60m, 기본값은 60m입니다. 대규모 배치, AI, CI/CD, 잦은 CronJob 같은 고churn 워크로드는 이벤트를 수천 개씩 빠르게 누적시켜 etcd 공간을 잠식하고 list 오퍼레이션 비용을 키웁니다. 이럴 때 단축을 검토합니다.
단축이 맞는 조건은 세 가지입니다. 이벤트를 다량 생성하는 워크로드가 있고, etcd 스토리지가 한도를 향해 성장하는 것이 관찰되며, 이벤트를 외부 시스템으로 내구성 있게 수집해 kubectl get events 히스토리에 의존하지 않는 경우입니다.
이벤트의 만료 시점은 생성 시점에 결정됩니다. 기존 이벤트는 기존 TTL대로 만료되므로 스토리지 감소는 점진적입니다. 삭제된 이벤트는 복구할 수 없고, etcd lease 갱신(리더 선출 중) 때문에 설정값보다 약간 오래 남을 수 있습니다. kubectl get events와 describe의 디버깅 윈도우가 줄고, 모니터링 도구가 수집하는 데이터도 감소합니다.
3.4 kube-apiserver - serviceNodePortRange
NodePort 서비스(기본 설정에서는 LoadBalancer 타입 포함)에 할당하는 포트 범위입니다. minPort와 maxPort 각각 10260에서 32767 사이로 설정할 수 있고, 기본값은 30000에서 32767입니다. minPort가 maxPort보다 크면 거부됩니다.
용도는 조직 네트워크와 방화벽 정책에 맞춘 정렬, 범위 확장을 통한 클러스터당 서비스 수 증가, 그리고 특히 마이그레이션입니다. 고정 포트를 기대하는 앱과 클라이언트가 기본 범위 밖 포트를 쓰면 기존에는 앱 수정이나 프록시 추가가 필요했는데, 범위를 앱이 쓰는 포트에 맞추면 재작성이나 추가 네트워크 컴포넌트 없이 이전할 수 있습니다.
경계값에는 근거가 있습니다. 하한 10260은 노드에서 도는 Kubernetes 시스템 컴포넌트의 포트 (kubelet 헬스 10248, kube-proxy 헬스체크 10256)를 회피합니다. 상한 32767은 통상 32768에서 시작하는 Linux ephemeral port 범위를 회피합니다. NodePort가 ephemeral 범위 안에 있으면 커널이 아웃바운드 연결에 같은 포트를 선택해 충돌할 수 있기 때문입니다.
범위를 바꿔도 기존 서비스는 할당받은 포트를 유지합니다. 범위를 축소해도 동작하고 kube-proxy 라우팅도 유지되며, EKS가 재할당하지 않습니다. 단 서비스를 재생성하면 범위 밖 포트는 다시 받을 수 없으므로, 배포 프로세스가 서비스를 재생성한다면 주의해야 합니다. 범위 밖 신규 할당과 명시적 nodePort 지정은 모두 API 서버 검증에서 거부됩니다. 변경 전에는 보안 그룹과 NACL이 새 범위의 트래픽을 허용하는지, 노드의 다른 소프트웨어와 포트 충돌이 없는지 확인하세요.
04운영 시 알아야 할 것
어느 파라미터를 조정하든 공통으로 적용되는 운영 규칙입니다. 공식 문서의 Considerations를 기준으로 정리했습니다.
4.1 리셋 오퍼레이션이 없습니다
설정을 초기화하는 별도 오퍼레이션은 없습니다. 업데이트에서 필드를 생략하면 현재 값이 유지될 뿐 클리어되지 않습니다. 기본값으로 되돌리려면 기본값을 명시적으로 설정해야 하고, 버전별 기본값은 DescribeClusterVersions로 조회합니다.
업데이트는 병합(merge) 방식입니다. 지정한 필드만 바뀌고, 이 규칙은 컴포넌트 사이에서도 한 컴포넌트 안에서도 동일합니다. 현재 실행 구성 전체는 describe-cluster가 반환합니다. 커스터마이즈하지 않은 파라미터를 포함해 kubeSchedulerConfig, kubeControllerManagerConfig, kubeApiServerConfig 최상위 필드가 항상 존재합니다.
4.2 변경은 롤링 업데이트로 적용됩니다
설정 변경은 즉시 적용되지 않습니다. 컨트롤 플레인 롤링 업데이트로 수 분에 걸쳐 적용되고, 업데이트 타입은 ControlPlaneComponentConfigUpdate입니다. 진행 상태는 describe-update로 추적하고 (InProgress에서 Successful 또는 Failed로 전이), 완료되면 클러스터가 ACTIVE로 복귀합니다.
# 스케줄러 점수 전략을 MostAllocated로 변경
aws eks update-cluster-config --name "$CLUSTER" \
--kube-scheduler-config '{"nodeResourcesFit":{"scoringStrategy":{"type":"MostAllocated"}}}'
# 롤링 업데이트 완료까지 대기
aws eks wait cluster-active --name "$CLUSTER"
# 버전별 기본값(defaultValue)과 허용 범위(constraints) 조회
aws eks describe-cluster-versions --cluster-versions 1.35 \
--query 'clusterVersions[0].controlPlaneComponentConfig'
CLI에서는 컴포넌트별 플래그(--kube-scheduler-config, --kube-controller-manager-config, --kube-api-server-config)에 인라인 JSON을 넘기고, 한 번의 호출에 복수 컴포넌트를 함께 지정할 수 있습니다. 콘솔, eksctl, AWS CLI, EKS API, CloudFormation, CDK는 출시 시점부터 지원하고 ACK와 Terraform은 coming soon 상태입니다.
4.3 PCP에는 탈출 제약이 있습니다
HPA sync period가 기본값(15s) 이외로 설정된 동안에는 Provisioned에서 Standard로 복귀할 수 없습니다. 먼저 15s로 되돌린 후에 티어를 변경해야 합니다. 별도로 etcd 사용량이 8GB를 초과한 상태에서도 Standard 복귀가 불가하므로, PCP 진입 전에 되돌아올 경로까지 계획에 넣어야 합니다.
05상황별 적용 가이드
기본값이 곧 안전값입니다. 아래 표의 상황에 해당하고 목적이 명확할 때만 조정을 검토하세요.
| 상황 | 조정 | 함께 확인할 것 |
|---|---|---|
| 노드를 채워 써서 컴퓨트 비용을 줄이고 싶다 | scoringStrategy를 MostAllocated로 | consolidation 노드 풀과의 결합 동작 검증, 노드나 AZ 장애 시 blast radius 집중 |
| 부하 증가에 더 빨리 스케일하고 싶다 | syncPeriod를 15s에서 10s로 | PCP 필수(티어 시간당 과금), HPA 객체 수 사전 확인, 한도 초과 시 조용한 저하 |
| 이벤트가 etcd 공간을 잠식한다 (대규모 배치, CI/CD, 잦은 CronJob) | eventTtl 단축 (10m~60m) | 새 이벤트에만 적용되어 감소는 점진적, 디버깅 윈도우 축소, 외부 이벤트 수집 여부 |
| 마이그레이션에서 기본 범위 밖 고정 NodePort가 필요하다 | serviceNodePortRange 조정 | 보안 그룹과 NACL의 새 범위 허용, 노드 소프트웨어와 포트 충돌, 서비스 재생성 시 범위 밖 포트 재할당 불가 |
어느 경우든 조정 전에 describe-cluster-versions로 해당 버전의 기본값과 허용 범위를 확인하고, 변경 후에는 describe-cluster로 실행 구성을 검증하는 절차를 IaC나 런북에 포함하는 것이 안전합니다.
--참고 자료
핵심 출처
- Advanced Kubernetes control plane configuration - Amazon EKS User Guide, AWS https://docs.aws.amazon.com/eks/latest/userguide/control-plane-configuration.html
- Amazon EKS now supports advanced Kubernetes control plane configuration parameters - AWS What's New (2026-08-12) https://aws.amazon.com/about-aws/whats-new/2026/08/amazon-eks-control-plane-configuration-parameters/
공식 문서
- Get started with advanced control plane configuration - Amazon EKS User Guide, AWS https://docs.aws.amazon.com/eks/latest/userguide/control-plane-configuration-getting-started.html
- Provisioned Control Plane - Amazon EKS User Guide, AWS https://docs.aws.amazon.com/eks/latest/userguide/eks-provisioned-control-plane.html
- Scheduling Framework - Kubernetes Documentation https://kubernetes.io/docs/concepts/scheduling-eviction/scheduling-framework/
- Amazon EKS pricing - AWS https://aws.amazon.com/eks/pricing/