devnoong.log
article thumbnail
728x90

쿠버네티스 오토 스케일링이란?

오토 스케일링 서비스는 사용자가 정의한 주기 및 이벤트에 따라 서버를 자동으로 생성하거나 삭제하는 기능을 의미합니다.

오토 스케일링을 사용함으로써 애플리케이션은 트래픽에 따라 탄력적으로 대응할 수 있습니다.

 

쿠버네티스에는 크게 두 가지의 오토 스케일링 기능이 있습니다.

  • HPA(Horizontal Pod AutoScaler)
  • Cluster Autoscaler

 

HPA는 CPU 사용량 또는 사용자 정의 메트릭을 관찰하여 파드 개수를 자동으로 스케일합니다.

그러나 해당 파드가 올라가는 EKS 클러스터 자체 자원이 모자라게 되는 경우, Cluster Autoscaler를 고려해야 합니다.

 

 

먼저 HPA를 사용하여 파드 스케일링 적용해보도록 하겠습니다.

 

HPA(Horizontal Pod Autoscaler) 컨트롤러는 메트릭 값에 값에 따라 파드의 개수를 할당합니다.

파드 스케일링을 적용하기 위해 컨테이너에 필요한 리소스 양을 명시하고, HPA를 통해 스케일할 조건을 작성해야 합니다.

 

1. metrics server 생성하기

 

Metrics Server는 쿠버네티스 클러스터 전체의 리소스 사용 데이터를 집계합니다.

각 워커 노드에 설치된 kubelet을 통해서 워커 노드나 컨테이너의 CPU 및 메모리 사용량 같은 메트릭을 수집하는 기능을 합니다.

 

아래의 명령어를 통해 metrics server를 생성하도록 하겠습니다.

 

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

 

생성된 서버 확인하기

kubectl get deployment metrics-server -n kube-system

2. flask deployment yaml 수정

 

레플리카를 1로 설정하고 컨테이너에 필요한 리소스 양을 설정합니다.

cd /home/ec2-user/environment/manifests
cat <<EOF> flask-deployment.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-flask-backend
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo-flask-backend
  template:
    metadata:
      labels:
        app: demo-flask-backend
    spec:
      containers:
        - name: demo-flask-backend
          image: $ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/demo-flask-backend:latest
          imagePullPolicy: Always
          ports:
            - containerPort: 8080
          resources:
            requests:
              cpu: 250m
            limits:
              cpu: 500m
EOF

 

yaml 파일을 적용하여 변경 사항을 반영합니다.

 

kubectl apply -f flask-deployment.yaml

3. flask hpa 파일 생성 및 적용

hpa을 설정하기 위한 구성파일을 생성해주고 반영해줍니다.

cat <<EOF> flask-hpa.yaml
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: demo-flask-backend-hpa
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: demo-flask-backend
  minReplicas: 1
  maxReplicas: 5
  targetCPUUtilizationPercentage: 30
EOF
kubectl apply -f flask-hpa.yaml

4. flask hpa 확인

부하 주기 전 사용량 확인

kubectl get hpa -w

 

 

부하를 줘보도록 하겠습니다.

ab -c 200 -n 200 -t 30 http://$(kubectl get ingress/backend-ingress -o jsonpath='{.status.loadBalancer.ingress[*].hostname}')/contents/aws

부하에 따라 REPLICAS 값이 최대 5까지 변경 됨을 파악할 수 있습니다.

728x90