0. VPA(Vertical Pod Autoscaling)이란
Vertical Pod Autoscaling은 Node에 배포된 Pod의 CPU 사용량(또는 베타 지원의 다른 애플리케이션 지원 메트릭)을 관찰하여 Pod에 선언된 Resource Request를 적절하게 조정하거나 적정 Resource Request를 추천한다.
Request 조정을 통해 클러스터 리소스 사용률을 개선하고 다른 포드를 위한 CPU 및 메모리를 확보할 수 있다.
1. Metric Server 설치
Horizontal Pod Autoscaling 적용하기
1번을 참조한다.
2. CPU 리소스 확인
Horizontal Pod Autoscaling 적용하기
2번을 참조한다.
3. Vertical Pod Autoscaler 배포
하단의 명령어를 입력하여 Autoscaler 리포지토리를 다운받고, VPA를 설치할 shell script 파일이 있는 디렉토리로 이동한다.
git clone https://github.com/kubernetes/autoscaler.git cd autoscaler/vertical-pod-autoscaler/ |
하단의 shell script 실행 명령어를 통해서 VPA를 배포할 수 있다.
만약 기존에 설치된 VPA를 삭제하고 싶다면 vpa-down.sh 명령어를 실행한다.
./hack/vpa-up.sh ./hack/vpa-down.sh |
vpa-up.sh 스크립트 실행을 통해 아래와 같이 세 개의 pod이 생성된다.
VPA의 아키텍처는 아래와 같이 구성되어있다.
VPA Admission Controller는 컨테이너의 리소스를 VPA Recommender에서 설정한 추천 값으로 override하는 역할을 한다.
VPA Recommender은 모든 pod을 감시하면서 최적의 리소스 추천값을 갱신하고, 이를 각 Pod의 VPA에 저장한다.
VPA Updater는 Pod의 Real-time Update에 관여하는 컴포넌트로, updateMode가 Auto일 시 Recommender에서 추천한 Resource값으로 Pod을 업데이트한다.
4. Pod별 VPA 선언
VPA가 설치되었으면, Pod별로 Vertical Pod Autoscaler를 선언해 주어야 한다.
아래의 명령어로 yaml파일을 생성한다.
apiVersion: "autoscaling.k8s.io/v1beta2" kind: VerticalPodAutoscaler metadata: name: app-vpa namespace: default spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: app #vpa를 적용하고자 하는 deployment명 namespace: default resourcePolicy: containerPolicies: #pod내의 container에 대한 정책을 설정할 수 있는 옵션 - containerName: xray-daemon mode: "Off" #off옵션은 해당 container는 recommendation정보를 저장하지 않겠다는 옵션 - containerName: envoy mode: "Off" updatePolicy: updateMode: "Off" #updateMode의 off 옵션은 VPA가 직접 pod의 리소스를 변경하여 pod를 갱신하지 않고, 리소스 추천값만 보여줌 #자동으로 리소스를 업데이트하려면 updateMode를 "Auto"로 설정한다. |
하단의 명령어로 yaml파일을 적용한다.
kubectl apply -f vpa.yaml |
아래의 명령어를 입력하면 vpa가 생성된다.
vpa가 Pod의 리소스를 확인할 수 있는 몇 분의 시간이 흐른 뒤, kubectl describe 명령어를 입력한다
그 후에 vpa의 status의 Recommendataion을 확인해 보면 VPA Recommender에서 수집한 Resource가 나온다.
kubectl describe vpa |
Lower Bound, Upper Bound는 각각 최저/최고 CPU, Memory 사용량이다.
Target은 VPA Recommender에서 추천한 최적의 resource request값이다.
5. 주의사항
현재 CPU와 메모리와 관련하여 VPA는 HPA와 함께 사용할 수 없다. 그러므로 UpdateMode를 Off로 설정하여 VPA의 추천 리소스 값만 확인하고, HPA를 적용해 주는 것이 바람직하다.
또한, 사이드 카(위의 예시에서 envoy와 xray-daemon)에 대해서는 VPA를 적용할 수 없으므로, resourePolicy.containerPolicies에서 사이드카 컨테이너의 mode를 Off로 설정해 주어야 한다.
'Kubernetes' 카테고리의 다른 글
Istio Envoy Proxy의 TCP Dump 수집 (0) | 2021.12.24 |
---|---|
Pod Affinity를 적용하여 Pod 분산 배포하기 (0) | 2021.09.01 |
Horizontal Pod Autoscaling 적용하기 (0) | 2021.08.31 |
EKS에 EFS Mount하기 (0) | 2021.08.31 |
Blue/Green Deployment with Istio (0) | 2021.08.31 |