CPA(클러스터 비례 자동 스케일러)는 클러스터의 노드 수에 따라 복제본을 확장하는 수평적 포드 자동 스케일러
비례 자동 스케일러 컨테이너는 클러스터의 스케줄링 가능한 노드와 코어 수를 감시하고 레플리카의 크기를 조정
이 기능은 클러스터의 노드/포드 수에 따라 확장되는 CoreDNS 및 기타 서비스와 같이 클러스터의 크기에 따라 자동 확장되어야 하는 애플리케이션에 적합
CPA는 API 서버에 연결하고 클러스터의 노드 및 코어 수를 폴링하는 포드 내부에서 실행되는 Golang API 클라이언트를 가지고 있습니다.
스케일링 매개변수와 데이터 포인트는 컨피그맵을 통해 오토스케일러에 제공되며, 오토스케일러는 원하는 최신 스케일링 매개변수로 최신 상태가 되도록 매 폴링 간격마다 매개변수 테이블을 새로 고칩니다.
다른 오토스케일러와 달리 CPA는 메트릭 API에 의존하지 않으며 메트릭 서버가 필요하지 않습니다.
CPA의 주요 사용 사례는 다음과 같습니다:
오버프로비저닝
핵심 플랫폼 서비스 스케일 아웃
메트릭 서버나 Prometheus 어댑터가 필요하지 않으므로 워크로드를 스케일아웃하는 간단하고 쉬운 메커니즘
💠 Cluster Proportional Autoscaler 에서 사용하는 스케일링 방법
Linear
이 스케일링 방법은 클러스터에서 사용 가능한 노드 또는 코어 수에 정비례하여 애플리케이션을 스케일링
coresPerReplica 또는 nodesPerReplica 중 하나를 생략할 수 있습니다.
preventSinglePointFailure가 true 로 설정된 경우, 컨트롤러는 노드가 두 개 이상인 경우 최소 2개의 복제본을 보장
includeUnschedulableNodes 를 true로 설정하면 총 노드 수에 따라 레플리카의 크기가 조정, 그렇지 않으면 레플리카는 스케줄링 가능한 노드 수에 따라서만 스케일링됩니다(즉, 코딩된 노드와 드레인 노드는 제외됨).
최소, 최대, preventSinglePointFailure, includeUnschedulableNodes 는 모두 선택 사항입니다. 설정하지 않으면 min은 기본값이 1로 설정되고, preventSinglePointFailure 는 기본값이 false 로 설정되며, includeUnschedulableNodes 는 기본값이 false 로 설정됩니다.
코어당 복제본과 노드당 복제본은 모두 float 입니다.
ConfigMap for Linear
The Equation of Linear Control Mode
Ladder
단계 함수를 사용하여 노드:레플리카 및/또는 코어:레플리카의 비율을 결정
스텝 래더 함수는 컨피그맵에서 코어 및 노드 스케일링에 데이터 포인트를 사용
더 많은 수의 레플리카를 산출하는 룩업이 목표 스케일링 숫자로 사용
코어당 레플리카 또는 노드당 레플리카 중 하나를 생략할 수 있습니다.
리플리카를 0으로 설정할 수 있습니다(리니어 모드와 달리).
클러스터가 성장함에 따라 선택적 기능을 활성화하기 위해 복제본을 0으로 확장할 수 있습니다
ConfigMap for Linear
Horizontal Pod Autoscaler 와 비교
Horizontal Pod Autoscaler 는 최상위 쿠버네티스 API 리소스
HPA는 폐쇄형 피드백 루프 오토스케일러로, 파드의 CPU/메모리 사용률을 모니터링하고 자동으로 레플리카 수를 확장
HPA는 메트릭 API에 의존하고 메트릭 서버가 필요한 반면, Cluster Proportional Autoscaler 는 메트릭 서버나 메트릭 API를 사용하지 않습니다.
Cluster Proportional Autoscaler 는 Kubernetes 리소스로 확장되지 않고 대신 플래그를 사용하여 대상 워크로드를 식별하고 구성 확장을 위해 컨피그맵을 사용
CPA는 클러스터 크기를 감시하고 대상 컨트롤러를 스케일링하는 간단한 제어 루프를 제공
CPA의 입력은 클러스터의 스케줄 가능한 코어와 노드 수입니다.
💠 CPA 설치
실습에서는 아래 배포 리소스의 주요 부분인 Kustomize 매니페스트를 사용하여 CPA를 설치
클러스터에 적용
Deployment 가 kube-시스템 네임스페이스에 생성
CPA가 시작되면 자동으로 컨피그맵을 생성하고 이를 수정하여 구성을 조정할 수 있습니다:
💠 자동 확장 CoreDNS
코어DNS는 파드에서 실행되는 쿠버네티스의 기본 DNS 서비스로, 레이블이 k8s-app=kube-dns
이 실습에서는 클러스터의 스케줄링 가능한 노드와 코어 수에 따라 코어DNS를 자동 확장
클러스터 비례 자동 스케일러는 코어DNS 레플리카의 크기를 조정
현재 3노드 클러스터를 실행 중
컨피그맵에 정의된 자동 스케일링 파라미터에 따라 클러스터 비례 자동 스케일러가 CoreDNS를 2개의 레플리카로 확장하는 것을 확인
EKS 클러스터의 크기를 5노드로 늘리면 Cluster Proportional Autoscaler가 이를 수용하기 위해 CoreDNS의 복제본 수를 확장