데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      [AWS EKS-연재5] AWS EKS 의 Cluster Autoscaler 설정

      Thomas 22.04.07
      6,125 4 0

      AWS EKS 에 상용을 위한 Kubernetes 서비스 설정 시리즈

      1. eksctl을 사용한 AWS EKS 생성

      2. AWS EKS 에 Istio 설치 및 설정

      3. AWS EKS 에서 Istio 와 Application Load Balancer 연결

      4. Kubernetes 의 Resources 설정을 위한 VPA 및 Goldilocks 

      5. AWS EKS 의 Cluster Autoscaler 설정

      6. Loki를 이용한 손쉬운 Kubernetes Logging

      7. Kubernetes/Istio 를 위한 Datadog 설정

      8. Argo CD 설치 및 설정


       

      https://docs.aws.amazon.com/eks/latest/userguide/autoscaling.html 를 참고하여 설정

      VPA 및 Goldilocks를 통해 Kubernetes 의 resource request, limit 설정을 완료하고 HPA를 통해 Pod를 늘리고 결국 Node의 자원이 부족하면 Cluster Autoscaler 를 통해 Node를 추가로 생성하게 된다. Cluster Autoscaler 는 Cloud Vendor 마다 설정 방법이 다르다

      AWS 에서 eksctl 을 이용하여 kubernetes cluster 를 만들었다면 EKS documentation 의 Prerequisites 에 있는 내용은 모두 완료 된 상태이다. 그 아래부터 차례대로 direction을 따라 설정하면 쉽게 Cluster Autoscaler 를 설치할 수 있다.

       

      IAM Policy 및 role 생성

      Cluster Autoscaler 가 IAM role 을 사용하기 위해 필요한 권한을 주기 위해 IAM Policy 생성이 필요하다.

      IAM Policy 생성

      1. 아래와 같이 cluster-autoscaler-policy.json 파일을 생성한다.
        {
           "Version": "2012-10-17",
           "Statement": [
               {
                   "Action": [
                       "autoscaling:DescribeAutoScalingGroups",
                       "autoscaling:DescribeAutoScalingInstances",
                       "autoscaling:DescribeLaunchConfigurations",
                       "autoscaling:DescribeTags",
                       "autoscaling:SetDesiredCapacity",
                       "autoscaling:TerminateInstanceInAutoScalingGroup",
                       "ec2:DescribeLaunchTemplateVersions"
                   ],
                   "Resource": "*",
                   "Effect": "Allow"
               }
           ]
        }
        
      2. 아래와 같이 policy 를 생성한다.
        aws iam create-policy \
           --policy-name AmazonEKSClusterAutoscalerPolicy \
           --policy-document file://cluster-autoscaler-policy.json
        
        위 command 를 실행하고 나오는 output 에서 Amazon Resource Name (ARN)을 아래에서 사용해야 한다.

         

      IAM role 생성

      아래와 같이 eksctl을 사용하여 IAM role을 생성할 수 있다.

      eksctl create iamserviceaccount \
      --cluster=eks-demo \
      --namespace=kube-system \
      --name=cluster-autoscaler \
      --attach-policy-arn=<위에서 생성한 policy의 arn> \
      --override-existing-serviceaccounts \
      --approve
      

       

      Deploy Cluster Autoscaler

      1. 우선 Cluster Autoscaler YALM 파일을 다운로드 한다.
        curl -o cluster-autoscaler-autodiscover.yaml https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml
        
      2. YAML 파일을 열어서 을 찾아서 eks-demo 로 replace 한다.
      3. 그리고 적용한다.

        kubectl apply -f cluster-autoscaler-autodiscover.yaml
        

        ℹ️ 문서에는 이 다음에 service account을 annotate 하는 부분이 있는데 확인해보면 이미 되어있다.

      4. cluster-autoscaler.kubernetes.io.safe-to-evict를 추가하기 위해 아래와 같이 patch 한다.

        kubectl patch deployment cluster-autoscaler \
         -n kube-system \
         -p '{"spec":{"template":{"metadata":{"annotations":{"cluster-autoscaler.kubernetes.io/safe-to-evict": "false"}}}}}'
        
      5. 그리고 cluster-autoscaler deployment를 수정한다.
        kubectl -n kube-system edit deployment.apps/cluster-autoscaler
        
      6. eks-demo 로 수정하고 container command 에 --balance-similar-node-groups 와 --skip-nodes-with-system-pods=false 를 추가하여 아래와 같이 수정한다.
           spec:
             containers:
             - 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/
               - --balance-similar-node-groups
               - --skip-nodes-with-system-pods=false
        
      7. Cluster Autoscaler release 페이지를 열어서 설치한 kubernetes 버전의 최신 cluster autoscaler 를 확인한다.
      8. 위에서 확인한 버전을 아래와 같이 적용한다. (v1.21.2를 가정한다.)
        kubectl set image deployment cluster-autoscaler \
         -n kube-system \
         cluster-autoscaler=k8s.gcr.io/autoscaling/cluster-autoscaler:v1.21.2
        

       

      Cluster Autoscaler 로그 확인

      Cluster Autoscaler 를 deploy 한 후에 로그를 확인하여 제대로 동작하는지 확인한다.

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

       

      ✋ 참고로 최근에는 Karpenter가 나와서 Cluster Autoscaler 대신 이걸 활용 할 수도 있다.

       

       

       

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      Thomas 님의 최신 블로그

      더보기