1. AutoScaling
- HPA (Horizontal Pod Autoscaler)
RC / RS / Deploymen를 통해 실행되는 Pod의 Scaling이다. 설정된 주기(Default 30초)마다 CPU 사용률등의 Metric을 모니터링하며, DaemonSet에는 적용되지 않는다.
apiVersion: autoscaling/v2alpha1
kind: HorizontalPodAutoscaler
metadata:
name: hpa-ex
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1beta1
kind: Deployment
name: hpa-ex
minReplicas: 3
maxRelpicas: 9
metircs:
- type: Resource
reousrce:
name: cpu
targetAverageUtilization: 65
- VPA (Vertical Pod Autoscaler)
Pod의 Resource에 대한 Scaling으로 Auto와 Manual 2가지 모드가 있다.
- Auto : Pod를 모니터링하여 Resource size를 분석하고 request 값을 수정하여, Sacling을 실행한다.
(변경된 request 값을 반영하기 위해 Pod Restart 발생)
- Manual : 분석하여 산출한 request 값만 출력하고 Scaling을 실행하지는 않는다
apiVersion: autoscaling.k8s.io/v1beta2
kind: VerticalPodAutoscaler
metadata:
name: api-server
spec:
targetRef:
apiVersion: "extensions/v1beta1"
kind: Deployment
name: api-server
updatePolicy:
updataMode: "Auto"
* HPA와 VPA를 동시에 사용하는 것은 K8s가 혼동할 수 있기 때문에 권고되지 않는다.
* 서비스 환경에서는 HPA, 개발 환경에서는 VPA의 Manual 모드를 통한 성능 튜닝이 적합하다
- CA (Clutser Autoscaler) - Node Scaling
Pod가 생성될 때, 노드의 리소스 부족으로 Pod의 상태가 Pending이 되면 Node Scale-Out이 Trigger 된다. - Overcommitted state와는 별개
- Node Scale-In
리소스 모니터링 중 Scale-In이 Trriger되면 Pod를 Restart를 통해 Node를 비우는 작업을 진행하는데, 원하지 않는 Restart가 발생할 수 있어 주의가 필요하다. 이를 방지하기 위해서 아래와 같은 설정을 하는것이 좋다.
- Locat Storage를 사용하는 Pod에 대해서는 'cluster-autoscaler.kubernetes.io/safe-to-svict: "true"' 설정을 통해 Pod가 제거되는 것을 방지한다.
- Stateful한 Pod의 경우 Contoller의 관리에서 벗어나도록 하는 경우도 있다. 관리 밖의 Pod는 한 번 Eviction되면 다시 Restart될 수 없기때문에 강제적으로 Eviction되지 않는다.
- PDB를 통해 Pod의 Restart나 Eviction이 발생하여도 다른 Replica가 생성되기 까지 기다려서 서비스 중단이 없도록 한다
* PDB(Pod Disruption Budget) : Node 내에 최소로 유지되는 Pod의 개수(Quorum) 설정
2. Reference
Kubernetes Advanced Workshop
조대협의 블로그
'System Engineering > Kubernetes' 카테고리의 다른 글
Kubernetes Authentication (0) | 2022.09.11 |
---|---|
Kubernetes Lease (Node Heartbeat) (0) | 2022.01.10 |
7. K8s Resource / Scheduling (0) | 2021.04.05 |
6. K8s Volume (0) | 2021.04.05 |
5. K8s Lifecycle / Configmap (0) | 2021.04.02 |