새소식

AWS/EKS

[EKS Study 5주차] EKS AutoScaling - CA

  • -

CloudNet@ 팀의 가시다님께서 Leading 하시는 AEWS Study 5주차 스터디 내용 정리

이번 포스팅에서는 EKS AutoScalingNode 오토스케일링 기능인 CA 에 대해 알아보겠습니다.

 

1. CA (Cluster Autoscaler)

 

 

이전까지 Cluster 에 올라가는 Pod 의 AutoScaling 을 알아보았습니다.

경우에 따라서는 Pod 가 배포될 Node 의 리소스가 부족해질 때도 있는데, 이 때 CA 를 사용하게 됩니다.

 

CA 는 Pending 상태의 Pods 가 존재할 경우 Node 를 Scale Out 하며 AWS 에서는 AutoScaling Group 을 사용합니다.

 

1.1. EKS Tag 확인

 

CA 는 EKS Node 의 Tag 를 확인하여 Scaling을 해줍니다.
다음의 Tag 가 적용되어 있는 지 확인합니다.

k8s.io/cluster-autoscaler/enabled : true
k8s.io/cluster-autoscaler/<CLUSTER_NAME> : owned

 

 

1.2. CA 설치

 

CA 는 Helm 으로 설치가 가능합니다.

 

cluster-autoscaler 9.29.0 · kubernetes/cluster-autoscaler

Scales Kubernetes worker nodes within autoscaling groups.

artifacthub.io

 

이번에는 CA 에서 제공하는 배포 예제 파일로 설치하겠습니다.

# CA 배포 파일 다운로드
curl -s -O https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml

# Cluster 명 적용
sed -i "s/<YOUR CLUSTER NAME>/$CLUSTER_NAME/g" cluster-autoscaler-autodiscover.yaml

# 배포
kubectl apply -f cluster-autoscaler-autodiscover.yaml

 

1.3. ASG 설정 변경

 

다음의 명령어로 ASG 설정을 확인해봅니다. [Min/Desired/Max]

aws autoscaling describe-auto-scaling-groups \
    --query "AutoScalingGroups[? Tags[? (Key=='eks:cluster-name') && Value=='myeks']].[AutoScalingGroupName, MinSize, MaxSize,DesiredCapacity]" \
    --output table

 

 

테스트를 위해 ASG 의 Max Node 숫자를 6으로 변경합니다.

export ASG_NAME=$(aws autoscaling describe-auto-scaling-groups --query "AutoScalingGroups[? Tags[? (Key=='eks:cluster-name') && Value=='myeks']].AutoScalingGroupName" --output text)
aws autoscaling update-auto-scaling-group --auto-scaling-group-name ${ASG_NAME} --min-size 3 --desired-capacity 3 --max-size 6

 

 

1.4. Sample App 배포

 

CA 테스트를 위해 CPU/Memory 리소스를 500m 이상 요구하는 nginx 파드를 배포합니다.

cat <<EoF> nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-to-scaleout
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        service: nginx
        app: nginx
    spec:
      containers:
      - image: nginx
        name: nginx-to-scaleout
        resources:
          limits:
            cpu: 500m
            memory: 512Mi
          requests:
            cpu: 500m
            memory: 512Mi
EoF
kubectl apply -f nginx.yaml

 

Pod 개수를 늘려 Node 리소스가 부족하게 만들어 CA 를 동작시킵니다.

kubectl scale --replicas=15 deployment/nginx-to-scaleout && date

 

Node AutoScaling 

 

 

참고 문서

https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/README.md

Contents

포스팅 주소를 복사했습니다