CloudNet@ 팀의 가시다님께서 Leading 하시는 AEWS Study 5주차 스터디 내용 정리
이번 포스팅에서는 EKS AutoScaling 중 Node 오토스케일링 기능인 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