devnoong.log
article thumbnail
728x90

Cluster Autoscaler란?

이전 글에서 파드에 오토 스케일링을 적용해봤습니다.

https://devnoong.tistory.com/28

 

[EKS 웹 애플리케이션 구축] HPA 적용하기

쿠버네티스 오토 스케일링이란? 오토 스케일링 서비스는 사용자가 정의한 주기 및 이벤트에 따라 서버를 자동으로 생성하거나 삭제하는 기능을 의미합니다. 오토 스케일링을 사용함으로써 애

devnoong.tistory.com

 

하지만 트래픽에 따라 파드가 올라가는 워커 노드 자원이 모자라게 되는 경우도 발생하게 됩니다.

 

즉, 워커 노드가 가득 차서 파드가 스케줄될 수 없는 상태가 되기때문에  Cluster Autoscaler(CA) 사용합니다.

1. ASG(Auto Scaling Group) 값 확인

현재 클러스터의 워커노드에 적용된  ASG(Auto Scaling Group)의 값을 확인합니다.

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

2. ClusterAutoScaler  정책 생성

 IAM 정책에 접속하여 ClusterAutoScaler 라는 이름을 가진 IAM 정책을 생성합니다. 

JSON 탭에서 아래의 내용을 붙여줍니다.

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

 

해당 정책을 통해, 오토 스케일링 기능을 활성화할 수 있습니다.

3. 워커 노드 생성

EC2 클릭하여 클러스터를 선택한 후, configuration 클릭 compute 탭에서 워커 노드를 클릭합니다.

 

 

노드 그룹 접속 후 하단의 Node IAM Role ARN 을 클릭합니다.

 

 

권한 추가 - 정책 연결을 클릭하여 IAM Role에 위에서 생성한 Cluster AutoScaler 정책을 붙이도록 하겠습니다.

 

정책 목록중 AUTOCALER 선택 후 정책 연결 버튼을 클릭합니다.

 

4. 워커 노드 details 업데이트

Auto Scaling Groups 페이지에서 워커노드에 적용된 ASG를 클릭한 후, Group details 값을 아래와 같이 업데이트합니다.

 

5. 배포 예제 파일 다운로드

Cluster Atuoscaler 프로젝트에서 제공하는 배포 예제 파일을 다운로드합니다.

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

 

다운로드한 yaml 파일을 열고 클러스터 이름(eks-demo)을 설정한 후, 배포합니다.

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/eks-demo
kubectl apply -f cluster-autoscaler-autodiscover.yaml
728x90