Custom AMI 로 EKS NodeGroup 배포
개요
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를 기반으로 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
주의사항
시작 템플릿을 사용하는 데 각종 제약이 있다. 아래의 문서를 참고하여 내용을 숙지하고 생성하는 것이 좋을 듯하다.