[AEKS2] 5주차 - EKS Autoscaling: CA, CPA
CA(Cluster Autoscaler)
CA는 Node의 정해진 사양에 따라 POD가 더 이상 스케줄링될 수 없어서 Pending 상태에 이르면, Autoscaler가 동작하여 Node의 개수를 증가시킨다.
CA는 AWS ASG를 사용하여 동작하게 된다.
이제 CA 실습을 시작하겠다.
먼저 ASG의 min, max, desired 값 중에 max를 올린다.
awscli를 통해 ASG를 업데이트했다.
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
그 다음 cluster autoscaler pod를 설치한다! 클러스터 이름은 sed를 통해 바꿔주자!
curl -s -O https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml
sed -i "s/<YOUR CLUSTER NAME>/$CLUSTER_NAME/g" cluster-autoscaler-autodiscover.yaml
kubectl apply -f cluster-autoscaler-autodiscover.yaml
그럼 해당 클러스터의 노드가 지정됐다는 것을 태그를 통해 알 수 있다.
그리고 테스트 파드를 생성해서 replicas를 다섯 개로 늘려봤다.
처음에는 배치할 수 있는 노드가 없어서 POD가 Pending 상태였다.
잠시 후에 기존 노드 3개에서 max 값인 6개까지 늘어났고 POD도 Running 상태로 변경되었다!
노드가 스케일아웃되는 것은 확인했으니, 스케일인되는 것도 확인해 봤다.
기본적으로 CA는 아래 옵션으로 스케일인 설정을 조절할 수 있다.
scan-interval
시각은 기본 10초로, scale-down-delay-after-delete
는 10초마다 노드 삭제 이후 체크하게 된다. 또한, scale-down-delay-after-add
로 스케일아웃된 이후로 10분 간격으로 스케일인 여부를 확인한다. scale-down-delay-after-failure
는 노드 삭제가 실패하면 3분마다 다시 체크한다.
autoscaler/cluster-autoscaler/FAQ.md at master · kubernetes/autoscaler
POD를 삭제하고 10분 넘어서 확인해 보니 이미 노드는 줄어져 있었다!
지금 잠깐 실습만 해 봐도 CA의 노드를 늘리는 속도는 정말 느렸다. POD가 Pending 상태를 유지하다가 한참 후에 노드를 추가해 줬다. 이렇게 느린 이유는 ASG에 의존하고 ASG를 통해서 거쳐가기 때문.. 노드 추가/삭제에는 직접 관여하지 않는다.
이런 단점을 보완하기 위해 만들어지게 된 것이 Karpenter라고 한다!
CPA(Cluster Proportional Autoscaler)
CPA는 Node의 스케일링 여부를 고려하여, 성능 처리가 필요한 POD(ex. coredns)의 Replicas를 조절할 수 있다.
실습을 시작하기 위해 규칙이 들어간 values 파일을 생성하였다.
이 규칙은 노드 개수에 따라 POD의 Replicas 개수를 정하는 것이다.
cat <<EOF > cpa-values.yaml
config:
ladder:
nodesToReplicas:
- [1, 1]
- [2, 2]
- [3, 3]
- [4, 3]
- [5, 5]
options:
namespace: default
target: "deployment/nginx-deployment"
EOF
위에 만든 규칙을 적용하기 위해 위 values파일로 CPA 헬름을 생성한다.
helm repo add cluster-proportional-autoscaler https://kubernetes-sigs.github.io/cluster-proportional-autoscaler
helm upgrade --install cluster-proportional-autoscaler -f cpa-values.yaml cluster-proportional-autoscaler/cluster-proportional-autoscaler
해당 규칙이 잘 적용된 점을 확인하였다.
노드를 5개로 증개시켰다.
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 5 --desired-capacity 5 --max-size 5
aws autoscaling describe-auto-scaling-groups --query "AutoScalingGroups[? Tags[? (Key=='eks:cluster-name') && Value=='myeks']].[AutoScalingGroupName, MinSize, MaxSize,DesiredCapacity]" --output table
규칙이 아주 잘 적용되어 테스트 파드가 더 생성되었다!
이 Auto Scaler는 노드 개수에 비례하여 생성해야 하는 중요한 POD일 경우에 사용해도 유용할 듯하다!
Leave a comment