Amazon EKS에서 Cluster Autoscaler를 설정하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 8월 13일

Amazon Elastic Kubernetes Service(Amazon EKS)에서 Cluster Autoscaler를 설정하고 싶습니다.

간략한 설명

Kubernetes Cluster Autoscaler는 다음 중 한 가지 조건을 충족할 때 Kubernetes 클러스터 크기를 자동으로 조정합니다.

  • 리소스 부족으로 인해 클러스터에서 실행되지 않은 포드가 있습니다.
  • 클러스터에 장시간 활용되지 않는 노드가 있고 이러한 노드의 포드를 기존의 다른 노드에 배치할 수 있습니다.

Cluster Autoscaler는 지정된 Auto Scaling 그룹 내의 작업자 노드를 조정하며 클러스터에서 배포로 실행됩니다.

참고: 다음 해결 방법에서는 활성 Amazon EKS 클러스터가 AWS CloudFormation 템플릿으로 생성된 작업자 노드에 연결되어 있다고 가정합니다. 이 해결 방법은 자동 검색 설정을 사용하지만 하나 이상의 Auto Scaling 그룹을 지정하여 Cluster Autoscaler를 구성할 수도 있습니다.

해결 방법

자동 검색 설정

1.    AWS CloudFormation 콘솔을 열고 스택을 선택한 다음 [Resources] 탭을 선택합니다.

2.    스택을 사용하여 생성된 Auto Scaling 그룹 리소스를 찾으려면 [Logical ID] 열에서 [NodeGroup]을 찾습니다. 자세한 내용은 자체 관리형 Amazon Linux 2 노드 시작을 참조하세요.

3.    Amazon Elastic Compute Cloud(Amazon EC2) 콘솔을 열고 탐색 창에서 [Auto Scaling 그룹]을 선택합니다.

4.    [Tags] 탭을 선택한 다음 [Add/Edit] 태그를 선택합니다.

5.    [Add/Edit Auto Scaling Group Tags] 창에서 awsExampleClusterName을 Amazon EKS 클러스터 이름으로 바꿉니다. 그런 다음 [Save]를 선택합니다.

Key: k8s.io/cluster-autoscaler/enabled
Key: k8s.io/cluster-autoscaler/awsExampleClusterName

참고: 입력한 태그에 대한 키에는 값이 없습니다. Cluster Autoscaler는 키의 값 세트를 무시합니다.

IAM 정책 생성

1.    다음의 예제를 기반으로 ClusterAutoScaler라는 AWS Identity and Access Management(IAM) 정책을 생성합니다. 이렇게 하면 Cluster Autoscaler를 실행하는 작업자 노드가 필수 리소스와 작업에 액세스할 수 있습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "autoscaling:DescribeAutoScalingGroups",
                "autoscaling:DescribeAutoScalingInstances",
                "autoscaling:DescribeLaunchConfigurations",
                "autoscaling:DescribeTags",
                "autoscaling:SetDesiredCapacity",
                "autoscaling:TerminateInstanceInAutoScalingGroup",
                "ec2:DescribeLaunchTemplateVersions"
            ],
            "Resource": "*"
        }
    ]
}

참고: 위의 정책을 작업자 노드 역할에 추가하면 해당하는 EC2 인스턴스에서 실행되는 모든 포드 또는 애플리케이션에서 추가 IAM 권한을 사용할 수 있습니다.

2.    Amazon EKS 작업자 노드에 연결된 인스턴스 역할에 새 정책을 연결합니다.

Cluster Autoscaler 배포

1.    GitHub에서 Cluster Autoscaler 프로젝트를 통해 제공되는 배포 예제 파일을 다운로드하려면 다음 명령을 실행합니다.

wget https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml

2.    다운로드한 YAML 파일을 열고 다음의 예제에 따라 클러스터 이름(awsExampleClusterName)을 설정합니다. 그런 다음 변경 사항을 저장합니다.

...          
          command:
            - ./cluster-autoscaler
            - --v=4
            - --stderrthreshold=info
            - --cloud-provider=aws
            - --skip-nodes-with-local-storage=false
            - --expander=least-waste
            - --node-group-auto-discovery=asg:tag=k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/awsExampleClusterName
...

3.    Cluster Autoscaler 배포를 생성하려면 다음 명령을 실행합니다.

kubectl apply -f cluster-autoscaler-autodiscover.yaml

4.    Cluster Autoscaler 배포 로그에서 배포 오류를 확인하려면 다음 명령을 실행합니다.

kubectl logs -f deployment/cluster-autoscaler -n kube-system

작업자 노드 확장 테스트

1.    현재 작업자 노드 수를 보려면 다음 명령을 실행합니다.

kubectl get nodes

2.    작업자 노드 수를 늘리려면 다음 명령을 실행합니다.

kubectl create deployment autoscaler-demo --image=nginx
kubectl scale deployment autoscaler-demo --replicas=50

참고: 위의 명령은 Kubernetes 클러스터에서 직접 NGINX 이미지를 사용하여 autoscaler-demo라는 이름의 배포를 생성한 후 포드 50개를 시작합니다.

3.    배포 상태를 확인하고 증가하는 포드 수를 보려면 다음 명령을 실행합니다.

kubectl get deployment autoscaler-demo --watch

4.    사용 가능한 포드 수가 50개가 되면 다음 명령을 실행하여 작업자 노드 수를 확인합니다.

kubectl get nodes

테스트 배포 정리

1.    이전에 생성된 autoscaler-demo 배포를 삭제하여 작업자 노드 수를 축소하려면 다음 명령을 실행합니다.

kubectl delete deployment autoscaler-demo

2.    작업자 노드 수를 보려면 약 10분간 기다린 후 다음 명령을 실행합니다.

kubectl get nodes

이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?