연재 시리즈

EKS 스터디 - 5주차 2편 - CPA

악분 2023. 5. 21. 11:58
반응형

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개수가 일치하지 않습니다.

반응형