CPA란?
CPA(cluster-proportional-autoscaler)는 노드 개수에 비례(proportional)하여 pod 개수 관리합니다.
예를 들어 노드가 추가될 때마다 coredns pod개수 증가시켜, coredns부하를 줄일 수 있습니다. CPA를 사용하면 node개수가 2개일 때 coredns 1개를, node개수가 5개일 때 coredns를 3개 등을 설정할 수있습니다.
CPA는 의존성이 적습니다. Metrics server 등을 사용하지 않고 kubapi server API를 사용합니다. 여러분은 노드 개수에 비례하여 pod를 얼마나 배포할지만 규칙만 설정하면 됩니다.
CPA사용 기대효과
노드 개수가 증가되면, 전체 pod개수도 많아집니다. pod개수가 많아질수록 어느 특정 서비스가 부하가 걸릴 수 있는데, VPA로 pod개수를 증가시켜 부하를 줄일 수 있는 기대효과가 있는 것 같습니다.
설치방법
CPA는 helm 차트로 쉽게 설치 가능합니다.
helm 차트를 추가합니다.
helm repo add cluster-proportional-autoscaler https://kubernetes-sigs.github.io/cluster-proportional-autoscaler
helm repo update
helm 차트 디폴트 values는 CPA규칙이 없습니다. 그래서 아무런 규칙을 설정하지 않으면 helm 차트가 릴리즈 되지 않습니다. 다음 [예제 챕터]에서 CPA규칙을 설정하고 helm차트를 릴리즈해보겠습니다.
helm upgrade --install cluster-proportional-autoscaler \
cluster-proportional-autoscaler/cluster-proportional-autoscaler
예제
예제는 노드 개수에 따라 nginx pod개수를 설정합니다. nginx는 deployment로 배포합니다. 예제를 실습하기 위해 워커노드 1개 또는 2개가 필요합니다.
nginx deployment배포
nginx deployment를 배포합니다. replica는 1개로 설정합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
resources:
limits:
cpu: "100m"
memory: "64Mi"
requests:
cpu: "100m"
memory: "64Mi"
ports:
- containerPort: 80
CPA 규칙설정
CPA규칙은 helm 차트 values에서 config와 options필드로 설정합니다. options필드에 CPA를 적용할 쿠버네티스 리소스를 설정합니다. config 필드에는 CPA정책과 노드개수에 따른 pod개수를 설정합니다.
- 규칙
- 노드개수 1개 -> nginx pod 1개 실행
- 노드개수 2개 -> nginx pod 2개 실행
cat <<EOF > values.yaml
config:
ladder:
nodesToReplicas:
- [1, 1]
- [2, 2]
options:
namespace: default
target: "deployment/nginx-deployment"
EOF
helm차트 릴리즈
helm차트를 릴리즈하여 CPA를 설치합니다. 이전 단계에서 만든 CPA규칙을 오버라이딩합니다.
helm upgrade --install cluster-proportional-autoscaler \
-f values.yaml \
cluster-proportional-autoscaler/cluster-proportional-autoscaler
nginx pod개수 확인
CPA를 배포하고 nginx pod를 확인해보세요. 저는 워커노드가 2개여서, nginx pod 1개가 추가로 생성되었습니다.
CPA pod로그를 확인하면, CPA가 pod를 추가한 로그가 보입니다.
kubectl logs -l app.kubernetes.io/instance=cluster-proportional-autoscaler
결과적으로 nginx deployment는 CPA가 pod를 추가했기 때문에, deploment.replica와 pod개수가 일치하지 않습니다.
'연재 시리즈' 카테고리의 다른 글
EKS 스터디 - 6주차 2편 - EKS pod가 IMDS API를 악용하는 시나리오 (2) | 2023.05.28 |
---|---|
EKS 스터디 - 6주차 1편 - 미흡한 kubelet 인증/인가 설정의 위험 (0) | 2023.05.27 |
EKS 스터디 - 5주차 1편 - VPA (2) | 2023.05.21 |
EKS 스터디 - 4주차 3편 - AMP에 EKS메트릭 저장 (0) | 2023.05.14 |
EKS 스터디 - 4주차 2편 - pod로깅 (2) | 2023.05.07 |