CloudEngineering (AWS)/EKS

Custom AMI 로 EKS NodeGroup 배포

Halfmoon 2021. 9. 4. 16:15

개요

EKS NodeGroup에 Custom AMI를 배포하는 법을 알아보겠다. EKS NodeGroup 즉, EC2에 각 보안 요소를 적용하거나 에이전트를 설치하여 Golden Image로 운영을 필요로 하는 분들이 많을 것이다. EKS NodeGroup은 기본적으로 AutoScaling이 적용되어 있기 때문에 서버가 Scale IN/OUT 될 때마다 보안 요소를 적용하고 에이전트를 일일이 설치할 수는 없을 것이다.

Custom AMI 생성

노드 그룹에 적용할 Custom AMI는 EKS가 운영되는 클러스터의 버전에 맞는 이미지를 기반으로 생성해야한다.

또한, EKS 클러스터는 주기적으로 버전 업그레이드가 필요하다. 이때 노드 그룹(Data Plane) 또한 버전을 함께 변경해 줘야 한다. Custom AMI를 적용하면 그만큼 관리하기에는 어려운 점이 있을 것이다.

 

아마존 EKS 최적화 아마존 리눅스 AMI - Amazon EKS

이러한 AMI에는 최신AWS CloudFormation노드 템플릿입니다. 이전 버전의 노드 템플릿에는 이러한 AMI를 사용할 수 없습니다. AMI가 클러스터에 조인하는 데 실패합니다. 기존AWS CloudFormation이러한 AMI를

docs.aws.amazon.com

위의 문서에서 각 EKS 버전에 최적화된 AMI를 기반으로 EC2를 생성하여 Agent 및 OS에 보안적인 요소를 적용 한 뒤 Custom 한 Image를 생성한다. 1.19 버전 업그레이드가 예정되어 있으므로 Kubernetes 1.19에 최적화된 AMI를 사용해 보도록 하겠다.

위 문서에서 각 버전과 리전에 맞는 AMI ID 보기 버튼을 선택 해 ami 값을 찾는다.

EC2 생성하기 버튼을 눌러 ami 값을 검색한 뒤 선택한다.

EC2 생성 부분은 생략하도록 하겠다. 해당 AMI로 생성한 EC2 인스턴스에 필요한 보안적 요소나, 데이터 및 Agent를 설치 한 뒤 새로운 이미지를 생성한다.

시작 템플릿 생성

EKS NoeGroup은 기본적으로 Autoscaling이 적용되어 있다. 이 Autoscaling은 시작 탬플릿을 사용한다. 즉 시작 템플릿 - Autoscaling - 노드 그룹 간의 연계가 이어지기 때문에 먼저 시작 템플릿부터 생성해보자.

시작 템플릿은 EC2의 내비게이터 바를 보면 인스턴스 부분에 위치 해 있을 것이다. 위에서 생성한 이미지(AMI)를 선택해준다.

사용자 데이터

사용자 데이터를 아래와 같이 넣어준다. 해당 영역을 사용자 데이터로 작성하여 EC2가 올라올 때 스크립트가 돌아서 Node로서 EKS 클러스터에 조인할 수 있도록 적용한다. 사용자 데이터 영역을 넣어주지 않을 경우 인스턴스는 생성되나 클러스터에 조인되지 않는다. [] 표시된 부분을 환경에 맞게 바꿔주면 된다.

#!/bin/bash
set -ex
/etc/eks/bootstrap.sh [cluster_name] --kubelet-extra-args "--node-labels=alpha.eksctl.io/cluster-name=[cluster_name],alpha.eksctl.io/nodegroup-name=[nodegroup_name],eks.amazonaws.com/nodegroup=[nodegroup_name],eks.amazonaws.com/nodegroup-image=[CustomAmi_Id]"

NodeGroup 생성

노드 그룹 생성에서 시작 템플릿 사용을 눌러 이전에 생성했던 시작 템플릿을 선택해 주고 Deploy 시킬 시작 템플릿의 버전도 선택한 뒤에 노드 그룹 조정 구성, 업데이트 구성, 서브넷도 정해준다.

생성한 뒤에 인스턴스가 정상적으로 올라오는지 확인하고 node가 클러스터에 정상적으로 Join이 됐는지 kubectl 명령어로 확인한다.

$ kubectl get nodes
NAME                                               STATUS   ROLES    AGE     VERSION
ip-10-***-***-48.ap-northeast-2.compute.internal   Ready    <none>   115d    v1.18.9-eks-d1db3c
ip-10-***-***-70.ap-northeast-2.compute.internal   Ready    <none>   2m26s   v1.19.6-eks-49a6c0
ip-10-***-***-90.ap-northeast-2.compute.internal   Ready    <none>   123d    v1.18.9-eks-d1db3c
ip-10-***-***-81.ap-northeast-2.compute.internal   Ready    <none>   2m24s   v1.19.6-eks-49a6c0

주의사항

시작 템플릿을 사용하는 데 각종 제약이 있다. 아래의 문서를 참고하여 내용을 숙지하고 생성하는 것이 좋을 듯하다.

 

시작 템플릿 지원 - Amazon EKS

사용자 지정 AMI 사용하는 경우 Amazon EKS는 사용자 데이터를 병합하지 않습니다. 오히려 클러스터에 가입하기 위해 노드에 필요한 부트스트랩 명령을 제공해야 합니다. 노드가 클러스터에 조인하

docs.aws.amazon.com