15장 : Auto-scaling of Pod and Cluster Node
15장에서 다루는 내용
- CPU 사융률을 기반으로 포드의 수평적 오토스케일링 구성
- 사용자 지정 메트릭을 기반으로 포드의 수평적 오토스케일링 구성
- 포드의 수평적 스케일링 한계 이해
- 클러스터 노드의 수평적 오토스케일링 이해
FEATURE STATE: Kubernetes 1.11
deprecated
힙스터에서 메트릭 가져오기는 Kubernetes 1.11에서 사용 중단(deprecated)됨.
15.1 포드의 수평적 오토스케일링
Horizontal Pod Autoscaler는 어떻게 작동하는가?
Horizontal Pod Autoscaler는 컨트롤러 관리자의 --horizontal-pod-autoscaler-sync-period
플래그(기본값은 15초)에 의해 제어되는 주기를 가진 컨트롤 루프로 구현된다.
각 주기 동안 컨트롤러 관리자는 각 HorizontalPodAutoscaler 정의에 지정된 메트릭에 대해 리소스 사용률을 질의한다. 컨트롤러 관리자는 리소스 메트릭 API(파드 단위 리소스 메트릭 용) 또는 사용자 지정 메트릭 API(다른 모든 메트릭 용)에서 메트릭을 가져온다.
15.1.1 오토스케일링 프로세스
- HPA continuously checks metrics values you configure during setup AT A DEFAULT 15 SEC intervals
- HPA는 설치 중에 구성한 메트릭 값을 지속적으로 확인합니다. (기본 15 SEC 간격)
- HPA attempts to increase the number of pods If the SPECIFIED threshold is met
- SPECIFIED 임계 값이 충족되면 HPA는 포드 수를 늘리려고합니다.
알고리즘 세부정보
가장 기본적인 관점에서, Horizontal Pod Autoscaler 컨트롤러는 원하는(desired) 메트릭 값과 현재(current) 메트릭 값 사이의 비율로 작동한다.
ceil[현재 레플리카 수 * ( 현재 메트릭 값 / 원하는 메트릭 값 )] = 원하는 레플리카 수
[3 * 200m / 100m ] = 6 (복제본 수가 두 배가 된다.)
[6 * 50m / 100m ] = 3 (복제본 수가 반이 된다.)
- HPA mainly updates the number of replicas inside the deployment or replication controller
- HPA는 배포 또는 복제 컨트롤러 내부의 복제본 수를 업데이트합니다.
- The Deployment/Replication Controller WOULD THEN roll-out ANY additional needed pods
- Deployment/Replication Controller 에서 추가로 필요한 포드를 롤아웃 합니다.
Pods RollOut
- When enabled, the cluster autoscaler algorithm checks for pending pods.
- 활성화되면 "클러스터 자동 스케일 알고리즘"이 보류중인 "포드"를 확인합니다.
- The cluster autoscaler requests a newly provisioned node if: 1) there are pending pods due to not having enough available cluster resources to meet their requests and 2) the cluster or node pool has not reached the user-defined maximum node count.
- Kubernetes detects the new node once it is provision by the underlying infrastructure, e.g. GCP
- The Kubernetes scheduler allocates the pending pods to the new node.
- Go back to Step 1 if there are still pods in a pending state.
오토스케일러 목록 조회
- kubectl get hpa
오토스케일러 상세 확인
- kubectl describe hpa
오토스케일러 삭제
- kubectl delete hpa
CLI를 통한 오토스케일러 설정
- kubectl autoscale rs foo --min=2 --max=5 --cpu-percent=80