본문 바로가기
IT/Kubernetes

EKS Autoscaling(node group)

by rapker 2023. 4. 13.
반응형

참조

EKS는

k8s cluster 생성 때 만들어진 node group에 node의 최소, 최대 설정이 되어 있더라도

node auto scale이 동작하지 않습니다.

cluster-autoscaler가 설치되어 있고 권한 설정까지 되어야 비로소 동작합니다.

node autoscale설정하고 확장/축소 테스트한 내용 기록합니다.

 


리소스 태그 지정

node group 편집에서 아래 태그를 지정합니다.

k8s.io/cluster-autoscaler/my-cluster owned
k8s.io/cluster-autoscaler/enabled true

 

정책 생성 및 권한 부여

 

k8s cluster가 IAM 역할(node 생성/삭제)을 하기위해 위에서 설정한 태그를 갖는 리소스에

권한을 부여해야 합니다.

cluster-autoscaler-policy.json 생성 (아래 내용으로)

<my-cluster> 부분을 eks 이름으로 변경하여 저장합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "autoscaling:SetDesiredCapacity",
                "autoscaling:TerminateInstanceInAutoScalingGroup"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/k8s.io/cluster-autoscaler/<my-cluster>": "owned"
                }
            }
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "autoscaling:DescribeAutoScalingInstances",
                "autoscaling:DescribeAutoScalingGroups",
                "ec2:DescribeLaunchTemplateVersions",
                "autoscaling:DescribeTags",
                "autoscaling:DescribeLaunchConfigurations"
            ],
            "Resource": "*"
        }
    ]
}

 

정책 생성

aws iam create-policy --policy-name AmazonEKSClusterAutoscalerPolicy --policy-document file://cluster-autoscaler-policy.json

정책 생성 후 arn을 복사해 둡니다.

 

OpenID Connect 설정

이 부분은 제가 권한이 없어 관리자 분과 함께 진행 했지만 내용을 캡쳐하지 못했습니다.

(IAM 정책 및 역할 생성 문서의 두 번째 단계인 아래 이미지 내용대로 큰탈없이 설정했습니다.)

 

AmazonEKSClusterAutoscalerRole 생성 확인

 


728x90

 

 

Cluster Autoscaler 배포

cluster-autoscaler 설치 전

kubectl get deploy -n kube-system

 

 

cluster-autoscaler yaml파일 다운로드

curl -o cluster-autoscaler-autodiscover.yaml <https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml>

 

download된 파일을 열고 설치할 cluster의 이름을 적어줍니다.

 

cluster-autoscaler 설치

kubectl apply -f cluster-autoscaler-autodiscover.yaml

 

설치 확인

kubectl get deploy -n kube-system

 

 

 

Annotation 추가

 

먼저 Service Account의 annotation을 추가 합니다.

 

annotation 추가 전 확인

kubectl describe sa cluster-autoscaler -n kube-system

 

annotation 추가

kubectl annotate serviceaccount cluster-autoscaler -n kube-system eks.amazonaws.com/role-arn=arn:aws:iam::<ACCOUNT ID>:role/AmazonEKSClusterAutoscalerRole

 

추가 된 annotation 확인

 

deployment 수정 전 확인 (단순 확인용)

kubectl describe deploy cluster-autoscaler -n kube-system

 

cluster-autoscaler pod에 annotation을 추가하기 위해 deployment 를 수정합니다.

kubectl edit deploy cluster-autoscaler -n kube-system

아래 빨간 영역의 두 부분을 추가 합니다.

(cluster-autoscaler.kubernetes.io/safe-to-evict: false 설정되면 node가 자동으로 축소되지 않습니다.)

cluster-autoscaler.kubernetes.io/safe-to-evict: "false"
- --balance-similar-node-groups
- --skip-nodes-with-system-pods=false

 

annotation 추가 후 확인

kubectl describe deploy cluster-autoscaler -n kube-system

 


반응형

 

Node 확장 확인

현재 설정된 auto scale 확인

  • 희망 1
  • 최소 1
  • 최대 2

 

다량의 pod를 배포

(pending 중인 pod 보여짐)

 

node가 생성되어 사용가능한 상태가 되기 위해 준비 중이고

 

시간이 지나 사용가능 상태가 되면

 

pending이였던 pod들 전부 실행 됩니다.

 

 

하는김에 축소도 확인

 

위에서 autoscale annotation에 설정했던 축소방지를 제거 합니다.

(제거 하거나 값을 true로 변경하거나 선택할 수 있습니다.)

kubectl edit deploy cluster-autoscaler -n kube-system

 

pod들 전부 지우고

 

console에서 node를 확인해보면 (아무런 변화가 없죠)

 

node 확장은 금방되지만 축소에는 시간이 좀 걸리니까 조금 기다려 봅니다.

 

node 축소 확인

반응형
LIST