본문 바로가기
Amazon AWS/EKS

EKS Managed node group 구성

by 홍띠 2022. 8. 28.

쿠버네티스 클러스터는 여러개의 노드로 이루어져 있는것인데, AWS EKS를 이용한다면 Master Node는 AWS 에서 제공 및 관리해주므로 Worker node들만 구성해 주면 된다. 

이때, AWS에서는 노드의 유형을 세가지를 제공한다. 여기서는 EKS 관리형 노드그룹(Managed Node group)을 사용한다. 관리형 노드그룹은 나머지 두개의 노드유형인 자체관리형 노드그룹AWS Fargate 의 중간 기능(?)의 유형이다. 관리형 노드 그룹은 클러스터의 노드(Amazon EC2 인스턴스) 프로비저닝 및 수명 주기 관리를 자동화하여 자체관리형 노드그룹보다 관리가 간편하다. AWS Fargate는 직접 최적화 및 설정을 할 필요 없이 AWS에서 완전히 관리해 주는 서비스이나, 다른 노드유형보다 제약이 많다. 자세한 설명은 공식 홈페이지를 참고하면 된다. 
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/eks-compute.html

관리형 노드그룹은 eksctl 또는 AWS Management Console을 사용하여 생성할 수 있다. 여기서는 eksctl을 사용해서 생성 할 것이므로, eksctl을 먼저 설치한다.

#eksctl 설치확인
$ eksctl version
#eksctl 최신버전 다운로드 및 압축해제
$ curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
#바이너리 파일 이동
$ sudo mv /tmp/eksctl /usr/local/bin
#설치 확인
$ eksctl version
0.107.0

eksctl 설치가 끝났다면, 이제 노드그룹을 생성해 주면 된다. 노드그룹을 생성하기 위해서 여기서는 시작템플릿( launch template)을 작서해서 사용한다. 시작 템플릿 없이 명령어로 간편하게 설정해서 생성 할 수도 있다.

시작 템플릿에서는 이전에 만들었던 VPC(EKS Cluster 배포를 위한 VPC 구성 참고)의 정보를 작성해주어 해당 VPC에 클러스터가 구성되도록 한다. 만약 미리 만들어둔 VPC가 없다면, 리전만 지정해주어도 자동으로 VPC를 생성한다. 커스터마이징이 필요하지 않은 경우, 자동생성되도록 해도 될 듯 하다.

VPC 정보를 모두 입력 했으면, 노드그룹을 정의해 주면 된다. 여기서는 프라이빗 서브넷에 위치하는 노드그룹 한개만 생성한다. 추후에 필요한 경우 추가할 수 있다. 

중요한 부분은 노드그룹에 구성되는 노드의 갯수의 범위를 설정하는 것이다. 노드는 오토스케일링으로 관리되지만 여기에 설정된 값의 범위 내에서 늘어나고 축소된다.

아래와 같이 시작 템플릿을 작성해서 eksctl 명령어로 노드그룹을 생성 해 주면 된다.

eksctl create cluster \
	--config-file=~/demo/config/clusterConfig.yml

시작 템플릿 예시:

---
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: demo-EKSCluster
  region: us-east-2
  version: "1.22"
vpc: 
  id: vpc-xxxxxxxxxxx
  subnets:
    public:
      PublicSubnet01:
        az: us-east-2a
        id: subnet-xxxxxxxxxxx
      PublicSubnet02:
        az: us-east-2b
        id: subnet-xxxxxxxxxxx
    private:
      PrivateSubnet01:
        az: us-east-2a
        id: subnet-xxxxxxxxxxx
      PrivateSubnet02:
        az: us-east-2b
        id: subnet-xxxxxxxxxxx

managedNodeGroups:
    - name: managed-ng-private
      instanceType: t3.small
      subnets:
        - !Ref PrivateSubnet01
        - !Ref PrivateSubnet02
      privateNetworking: true
      #노드 갯수 범위 설정
      desiredCapacity: 2
      minSize: 1
      maxSize: 9
      #인스턴스 설정
      volumeSize: 50
      volumeType: gp3
      amiFamily: AmazonLinux2
      labels:
          nodegroup-type: "managed-private-workloads"
      #EC2인스턴스에 연결할 키페어 지정
      ssh: 
          publicKeyPath: "~/demo-EKSCluster/demoEksCluster.pub"
      tags: {nodegroup-role: private-ng}
      iam:
          attachPolicyARNs:
          withAddonPolicies:
              autoScaler: true
              ebs: true
              efs: true

 

참고:

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/create-managed-node-group.html