Horizontal Pod Autoscaling(CPU)

Hoju·2022년 8월 25일
0
post-custom-banner

현재 Pod(cotainer)가 실행되면서 CPU 값이 급등하게 증가하게 되면 자동으로 Pod를 Scaling 하고자합니다. 즉, Pod에 부하가 발생시 Pod를 자동으로 Auto Scaling을 구현하도록 합니다.

Metrics Server Deploy

  1. 먼저 Kubernetes metrics Server를 생성합니다. 매우 중요!!! Metrics Server가 없으면 Pod에 CPU값을 확인할 수 없어요
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
  1. Metrics Server가 정상적으로 생성되었는지 확인합니다.(한 14초 정도 걸림)
kubectl get deployment metrics-server -n kube-system

또는
kubectl top pods -n kube-system
  • 실행 중
  • CPU 및 메모리 확인

Deployment Object Pod에 CPU값 할당하기

  1. 컨테이너에 필요한 리소스 CPU 값을 업데이트합니다.(deployment.yaml)
#수정합니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend-deployment
  namespace: wsi-skills-namespace-2
  labels:
    app: backend-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: backend-deployment
  template:
    metadata:
      labels:
        app: backend-deployment
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: worker2 #Node Key
                operator: In
                values:
                - backend #Node Value
      containers:
      - name: backend-dockerimages
        image: [[DockerImage]]
        ports:
        - containerPort: 8080
        resources: #이 부분을 꼭 지정해줘야합니다
          requests:
            cpu: "150m"
          limits:
            cpu: "250m"

kubectl apply -f deployment.yaml
  1. 할당을 확인합니다.
kubectl get pods [[PodFullName]] --namespace=wsi-skills-namespace-2 -o yaml | grep resources -C 8

  1. HPA 설정(hpa.yaml)
cat << EOF > hpa.yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: backend-end-hpa-k8s
  namespace: wsi-skills-namespace-2 #Namespace를 지정해줘야합니다 중요!!!!
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: backend-deployment
  minReplicas: 2 #Pod minSize
  maxReplicas: 5 #Pod MaxSize
  targetCPUUtilizationPercentage: 30
EOF

kubectl apply -f hpa.yaml
  1. kubectl get hpa -n wsi-skills-namespace-2 → HPA 상태 확인(처음에 10초정도 걸림 그 뒤 0%뜸)
  2. hpa 부하를 테스트 하기위해 hpa 명령을 백그라운드로 실행
kubectl get hpa -w -n wsi-skills-namespace
  1. 부하 테스트(부하가 늘어나는 것을 확인합니다)
sudo yum install -y httpd-tools
#이 테스트는 internal 기존에 부하 시키기
ab -c 200 -n 200 -t 30 http://$(kubectl get ingress/[[ingressName]] -o jsonpath='{.status.loadBalancer.ingress[*].hostname}')/대상그룹HealthCheckPath

#이 테스트는 리다이렉션해서 부하시키기
while true;do curl -L wsi-match-alb-1805030163.ap-northeast-2.elb.amazonaws.com/?type=test; sleep 0; done


7. Pod의 갯수를 확인합니다. Pod에 갯수가 늘어나는 것을 확인할 수 있습니다.

kubectl get deployment backend-deployment --namespace=wsi-skills-namespace
  • 결과

  1. 부하를 안주게되면 다시 CPU 사용률이 줄어듭니다.

  2. 삭제하는 방법도 있어야겠죠?
kubectl get hpa
kubectl delete hpa [[HPAName]]
profile
Devops가 되고 싶은 청소년
post-custom-banner

0개의 댓글