[AWS]EKS NodeGroup생성 전략 3가지
IT/AWS

[AWS]EKS NodeGroup생성 전략 3가지

반응형

Intro

  • 오늘은 EKS NodeGroup생성 전략 3가지를 알려 드리고
  • AWS console에서 생성한 예시를 보여드리도록 하겠습니다.

EKS Node Group생성 전략 기준

  • Managed Nodegroup : 일반적인 NodeGroup생성 방법
  • Managed NodeGroup with Launch Template : WorkerNode Instance를 LaunchTemplate으로 관리하는 방법
  • Managed AMI : WorkerNode Instance의 AMI를 AWS에서 관리해주는 방법
  • Custom AMI : WorkerNode Instance의 AMI를 사용자가 직접 관리하는 방법 (이 방법은 곧 LaunchTemplate을 사용하겠다는 것임)

EKS의 Node Group생성 전략 3가지

  • 전략을 결정하여 구축하게되면 다른 전략으로의 수정이 불가능 하므로 Node Group을 새로 생성해야합니다
  • 1,2,3번 전략 모두 eksctl에서 지원이 가능하므로 쉽게 구축이 가능합니다.
  • eksctl을 사용하여 3가지 전략으로 구축하는 방법 참고 URL

1번 전략 - Managed NodeGroup + Managed AMI

  • 장점
    • 3가지 중 구축/관리가 가장 쉽습니다. (AWS console, eksctl, terraform 모두 구축이 쉬움)
    • AWS에서 제공하는 AMI버전 업데이트 기능을 사용하여 쿠버네티스 버전 관리가 용이합니다. (Rolling/Force Update)
  • 단점
    • WorkerNode Instance 수정이 불가능합니다. (AMI image, Instance Type, Storage, SecurityGroup, UserData 등)
    • 따라서 WorkerNode Instance에 대해 스펙 변경하고 싶다면 수동으로 NodeGroup 생성/dranning/삭제 작업이 필요합니다.

2번 전략 - Managed NodeGroup with Launch Template + Managed AMI

  • 장점
    • WorkerNode Instance 수정을 Launch Template의 버전으로 관리가 가능합니다.(AMI image, Instance Type, Storage, SecurityGroup, UserData 등)
    • AWS에서 제공하는 NodeGroup Launch Template 버전 업데이트 기능으로 WorkerNode Instance의 수정이 용이합니다.
    • AWS에서 제공하는 AMI버전 업데이트 기능을 사용하여 쿠버네티스 버전 관리가 용이합니다. (Rolling/Force Update)
  • 단점
    • 3가지 중 구축/관리가 비교적 어렵습니다.
    • Launch Template의 관리가 필요하므로 NodeGroup생성에 필요한 IAM Role, Security Group등을 생성/관리해야합니다.

3번 전략 - Managed NodeGroup with Launch Template + Custom AMI

  • 장점
    • WorkerNode Instance 수정을 Launch Template의 버전으로 관리가 가능합니다.(AMI image, Instance Type, Storage, SecurityGroup, UserData 등)
    • AWS에서 제공하는 NodeGroup Launch Template 버전 업데이트 기능으로 WorkerNode Instance의 수정이 용이합니다.
    • Custom AMI를 사용할 수 있으므로 OS보안 조치 또는 각종 Agent를 미리 설치하여 관리 할 수 있습니다.
  • 단점
    • 3가지 중 구축/관리가 가장 어렵습니다.
    • Launch Template의 관리가 필요하므로 NodeGroup생성에 필요한 IAM Role, Security Group등을 생성/관리해야합니다.
    • Kubnernetes버전에 맞추어 지속적인 cumtom AMI의 업데이트가 필요합니다.

[생성 예시] 1번 전략 - Managed NodeGroup + Managed AMI

  • AWS Managed Console - Services - EKS - Cluster - Configuration - Compute - Add node Group
  • 아래 그림에서 Name, IAM Role을 알맞게 선택하고, Launch Template을 선택하지 않음
  • Launch Template는 Node instance생성에 대한 정보들을 담고 있습니다. (AMI Image/Instance Type/Storage/Network 등)
  • LT를 선택하지 않으면 아래와 같이 다음 step2와 step3 에서 AMI type/Instance types/Disk size/Min/Max/Desire/Subnets/SSH Kepair 를 입력하여 Nodegroup을 생성할 수 있습니다.

  • Nodegroup이 생성되면, 아래 이미지와 같이 자동으로 Autoscaling Group이 "eks-난수"로 생성이 되고 초기 생성에 필요한 Launch Template이 자동으로 생성이 됩니다.

  • AMI release version항목의 UpdateNow 버튼을 통해서 kubernetes버전을 관리할 수 있습니다

[생성 예시] 2번 전략 - Managed NodeGroup with Launch Template + Managed AMI

1) LaunchTemplate 생성

  • AWS Managed Console - Services - EC2 - Launch Template 을 선택
    1) Launch template name를 알맞게 입력
    2) AMI이미지는 선택하지 않음
    3) Instance Type/Keypair/Storage/SecurityGroup정보 입력 ( Storage의 Device 정보는 /dev/xvda 으로 입력 )
    4) Advanced details - UserData 에 아래 정보 입력
MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==MYBOUNDARY==" 
--==MYBOUNDARY== 
Content-Type: text/x-shellscript; charset="us-ascii" 
#!/bin/bash 
echo "Running custom user data script" 
--==MYBOUNDARY==--\

2) NodeGroup 생성

  • AWS Managed Console - Services - EKS - Cluster - Configuration - Compute - Add node Group
  • 아래 그림에서 Name, IAM Role을 알맞게 선택하고, 위에서 생성한 Launch Template을 선택
  • step1,step2,step3 에서 Name/IAM Role/NodeGroup Scaling/Networking 정보를 입력하여 생성완료
  • 아래 이미지에서 test-lt-managed-ami가 3번 전략 방식으로 생성된 NodeGroup입니다.
  • AMI release version항목의 UpdateNow 버튼을 통해서 kubernetes 버전을 관리할 수 있습니다.
  • Launch template의 Change version버튼을 통해 LT의 버전 업데이트가 가능합니다.

[생성 예시] 3번 전략 - Managed NodeGroup with Launch Template + Custom AMI

  • 2) LaunchTemplate 생성
  • AWS Managed Console - Services - EC2 - Launch Template 을 선택
    1. Launch template name를 알맞게 입력
    2. 위에서 찾은 AMI이미지를 입력
    3. Instance Type/Keypair/SecurityGroup정보 입력 (Storage의 Device 정보는 /dev/xvda로 자동입력됨 )
    4. Advanced details - UserData 에 아래 정보 입력
    * 여기서 맨 아래 bootstrap.sh정보가 중요함 <> 안에 있는 정보는 알맞게 변경해야합니다. *
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="

--==MYBOUNDARY==
Content-Type: text/x-shellscript; charset="us-ascii"

#!/bin/bash
/etc/eks/bootstrap.sh <MY_EKS_NAME> --kubelet-extra-args '--node-labels=eks.amazonaws.com/nodegroup=<MY_NODE_GROUP_NAME>,eks.amazonaws.com/nodegroup-image=<MY_CUSTOM_IMAGE>'

--==MYBOUNDARY==--\

3) NodeGroup 생성

  • AWS Managed Console - Services - EKS - Cluster - Configuration - Compute - Add node Group
  • 아래 이미지에서 Name, IAM Role을 알맞게 선택하고, 위에서 생성한 Launch Template을 선택
  • step1,step2,step3 에서 Name/IAM Role/NodeGroup Scaling/Networking 정보를 입력하여 생성완료
  • 아래 이미지의 test-lt-custom-ami가 4번전략으로 생성된 NodeGroup입니다.
  • AMI release version항목의 UpdateNow 버튼이 없으며 대신에 AMI ID값이 표기됩니다.
  • Launch template의 Change version버튼을 통해 LT의 버전 업데이트가 가능합니다.
반응형