2.7 EKS 클러스터에 Worker 노드 추가하기
위에서 EKS 클러스터를 생성하긴 했지만 아직 Worker 노드가 추가된 것은 아닙니다. Worker 노드를 추가하기 위해서는 별도의 EC2 인스턴스를 생성한 뒤, 이를 EKS에 추가해야하며, 이 또한 AWS에서 제공되는 Cloudformation 템플릿을 통해 손쉽게 작업할 수 있습니다
시작하기 전, Worker 노드의 EC2 인스턴스에 쓰일 AMI를 미리 확인해놓아야 합니다. 이는 AWS Marketplace에서 확인할 수 있습니다.
![](http://k.kakaocdn.net/dn/bAtSdb/btqtXW3cFEF/PrD5YPJ2FIL7hU3APkcNGk/img.png)
AWS Marketplace에서 'eks' 로 검색하면 나오는 Amazon EKS-Optimized Amazon Linux AMI를 클릭합니다.
![](http://k.kakaocdn.net/dn/7Fvkn/btqtYm1GhqZ/Xx1kbY4NrqiJ10chkkkriK/img.png)
Continue to Subscribe를 클릭합니다.
![](http://k.kakaocdn.net/dn/I9LNM/btqtWHTgxT6/c7S5fUukiPWo8vOCPnCaKk/img.png)
Contiune to Configuration을 클릭합니다.
![](http://k.kakaocdn.net/dn/G8uvj/btqtXAszP8d/d09qSBNYKDBtqkQT3fVuAk/img.png)
각 Select Box의 옵션을 적절하게 선택하고 나면 AMI id를 확인할 수 있습니다. 위 예시에서는 1.11 버전-20190211 버전을 선택하였고, AMI ID는 ami-0d87105164496b94b 입니다. 이 ID를 복사해 메모장에 적어놓습니다.
[AWS Web UI]
Cloudformation 페이지에 접속해 새로운 스택을 생성합니다. 이번에는 템플릿의 URL을 아래로 입력합니다.
다음으로 Worker 노드 스택의 세부 정보를 입력해야 합니다. 다양한 정보를 입력해야 하는데, 신경써야 할 부분은 아래와 같습니다. 굵은 글씨로 강조한 옵션이 주의해서 설정해야 하는 항목입니다.
- Cluster Name : 위에서 생성했던 EKS 클러스터의 이름을 입력해야 합니다.
- ClusterControlPlaneSecurityGroup : 위에서 생성했던 eks-vpc-stack으로 시작하는 이름의 보안 그룹을 선택합니다.
- NodeGroupName : 노드 그룹을 식별하기 위한 고유한 이름을 입력합니다.
- NodeAutoScalingGroupMinSize : ASG(Auto Scailing Group)에 의해 최소로 줄어들 수 있는 노드의 갯수입니다.
- NodeAutoScalingGroupDesiredCapacity : 생성 초기에 설정될 노드의 갯수입니다.
- NodeAutoScalingGroupMaxSize : ASG(Auto Scailing Group)에 의해 최대로 늘어날 수 있는 노드의 갯수입니다.
- NodeInstanceType : Worker 노드의 인스턴스 타입을 선택합니다.
- NodeImageId : 위에서 적어두었던 EKS의 AMI ID를 입력합니다.
- NodeVolumeSize : 각 노드의 볼륨 사이즈를 입력합니다. 기본적으로 20이 입력되어 있습니다.
- KeyName : Worker 노드에 배포될 SSH 공개 키를 선택합니다. 기존에 생성해 둔 키 쌍을 선택해도 됩니다.
- VpcId : 위에서 생성했던 eks-vpc-stack으로 시작하는 이름의 VPC를 선택합니다.
- Subnets : 선택한 VPC에 속하는 2개의 Subnet을 선택합니다.
선택적으로, BootstrapArguments를 통해 Kubelet에 전달할 변수를 설정할 수 있다고도 하지만, 저는 입력하지 않았습니다.
제가 테스트를 위해 최종적으로 설정한 옵션은 아래와 같습니다.
![](http://k.kakaocdn.net/dn/CkhDy/btqtVJKSa3L/kh2YykGxvjSoErOg71DjJk/img.png)
![](http://k.kakaocdn.net/dn/wkldX/btqtYmAHVHT/R65pkTaBf7zH8xFU9PlYNk/img.png)
설정을 마쳤다면 '다음' 버튼을 눌러 Worker 노드 그룹을 생성합니다. 마지막 화면에서 체크박스에 체크를 해야 생성이 시작됩니다.
![](http://k.kakaocdn.net/dn/bWq1e6/btqtVIZyDC2/X9osc7wHwxDc5sC0MADU9K/img.png)
이 또한 시간이 5~10분 정도 소요됩니다. Cloudformation 페이지에서 스택의 상태가 CREATE_COMPLETE로 바뀌면, 페이지 하단의 '출력' 탭에서 확인할 수 있는 NodeInstanceRole의 값을 복사해 메모장에 적어놓습니다.
![](http://k.kakaocdn.net/dn/z0aJh/btqtW0rTpNF/1LDodiH2gyRK77J5QkSKnK/img.png)
이 값은 kubectl로 쿠버네티스에 접근하기 위한 권한 (kubeconfig) 을 aws-iam-authenticator를 통해 얻을 때 사용됩니다.
[AWS CLI]
CLI에서 Worker 노드 그룹을 생성하는 것은 조금 귀찮습니다. 그러나 미리 준비만 되어 있다면 그다지 어렵지는 않은 작업입니다.
다만 이번 AWS CLI에서는 Web UI에서 설정한 옵션을 전부 동일하게 설정하지는 않지만, 원한다면 NodeAutoScalingGroupMaxSize 등의 값을 JSON 파일에 별도로 추가해 사용할 수도 있습니다. 기본적으로 최소 1개, 생성 직후 3개, 최대 20개의 t3.medium 노드를 생성하도록 설정되어 있습니다.
아래의 내용을 parameter.json 파일로 작성해 놓겠습니다. <환경 변수 이름> 으로 되어 있는 부분을 여러분의 값에 맞게 교체할것입니다.
아래의 명령어들을 입력해 적절한 환경 변수를 설정합니다. KEY_NAME의 값은 여러분이 기존에 생성해놓은 SSH 키 쌍의 이름을 적절하게 입력하면 됩니다. 저는 기존에 tf-kube라는 이름의 SSH 키 쌍을 만들어놓았기 때문에 이 키의 이름을 입력하였습니다.
보안 그룹과 Subnet ID는 위에서 사용했던 환경 변수를 재활용하겠습니다.
아래의 명령어를 입력해 parameter.json에 값이 입력된 stack_parameter.json 파일을 생성합니다.
생성된 stack_parameter.json 파일을 이용해 Worker 노드 그룹을 Cloudformation에서 생성하겠습니다. 5~10분 정도가 소요됩니다.
아래의 명령어를 입력해 NodeInstanceRole 값을 환경 변수에 저장해놓습니다. 이 값은 kubectl로 쿠버네티스에 접근하기 위한 권한 (kubeconfig) 을 aws-iam-authenticator를 통해 얻을 때 사용됩니다.
2.8 EKS 클러스터에 kubectl으로 접근하기
Worker 노드 그룹까지 생성이 완료됬다면 다음은 kubectl을 통해 쿠버네티스 클러스터에 접근할 차례입니다. 쿠버네티스 클러스터에 접근하기 위해서는 인증 정보 (Credential) 이 필요한데, 이는 aws-iam-authenticator를 통해 얻을 수 있습니다.
먼저, Master에 연결하기 위한 kubeconfig 파일을 설정합니다. 아래의 명령어를 입력하면 ~/.kube/config 파일이 생성됩니다. --name 에는 위에서 생성한 EKS 클러스터의 이름을 입력합니다.
서비스와 같은 쿠버네티스 리소스는 제대로 출력이 되지만, Worker 노드는 아직 출력되지 않는 것을 알 수 있습니다.
드디어 설정의 마지막 단계입니다. 아래의 명령어를 입력해 Auth 샘플 파일을 내려받습니다.
내려 받은 파일의 내용 중, rolearn 이라는 항목이 존재합니다. 위에서 복사했던 NodeInstanceRole의 값을 해당 항목에 입력합니다. AWS CLI를 통해 노드 그룹을 생성했다면 $NODE_INSTANCE_ROLE 환경 변수에 이 값이 존재할 것이니, echo $NODE_INSTANCE_ROLE 명령어로 값을 확인할 수 있습니다.
![](http://k.kakaocdn.net/dn/b9XOjH/btqtYuk1hqb/v3uTRx5FSyVrujGAEio1T0/img.png)
아래의 명령어를 입력하면 설정은 끝이 납니다.
쿠버네티스 Worker 노드가 정상적으로 잡혔는지를 확인해보겠습니다. 처음에는 상태가 Not Ready로 출력될 수 있으나, 어느 정도 시간이 지나면 Ready 상태로 바뀝니다. AWS CLI를 통해 Worker 노드 그룹을 생성했다면 3개의 노드가 출력될 것입니다.