이전까지는 EKS Cluster와 AWS 리소스 접근을 위한 OIDC 설정을 하였다. EKS Cluster에 pod가 동작할 수 있는 환경을 다음과 같이 세 가지 제공한다.
- 관리형 노드 그룹
- EKS가 Cluster에 조인 될 수 있도록 인스턴스를 생성, 업데이트 종료 가능
- 서버유형, 노드 그룹 크기 조정 필요 (AutoScaler 설정 가능) - 자체 관리형 노드
- 사용자가 인스턴스를 수동 구성하여 EKS Cluster에 조인되도록 설정 가능
- 서버유형, 노드 그룹 크기 조정 필요 (AutoScaler 설정 가능) - AWS Fargate
- AWS에서 실행될 pod에 대해 적정 크기의 컴퓨팅 용량을 제공하는 방법
- AWS의 영역에서 리소스를 사용하므로 서버유형, 노드 그룹 크기 조정 필요 X
- GPU, Daemonset 지원 X
이번 포스팅에서는 간편하게 EKS Cluster에 조인될 수 있는 관리형 노드 그룹을 생성하겠다.
1. Node Group 역할 생성
EKS 노드 그룹으로 생성될 노드(인스턴스)에 적용될 역할을 생성한다. 이 역할에는 기본적으로 아래 두 정책이 필요하며 추가적으로 개발하며 AWS의 다른 리소스를 사용하고자 할 때에는 이 역할에 정책을 추가하면 된다.
- AmazonEKSWorkerNodePolicy: EC2 인스턴스와 EKS Cluster의 기본적 정보를 확인할 수 있는 권한 -> EKS Cluster에 worker node가 연결할 수 있도록 함
- AmazonEC2ContainerRegistryReadOnly: ECR (EC2 Container Registry) 읽기권한
2. Node Group 생성
앞서 생성한 역할로 Node Group을 생성한다. 이에대한 설정은 다음과같다.
인스턴스 타입: t3.medium
2.1 노드그룹 설정
노드그룹 이름과 1에서 생성한 노드에대한 IAM 역할을 선택한다.
기존에 EKS를 위해 구성해둔 시작 템플릿이 존재한다면 선택하여 사용할 수 있다. 하지만 본 포스팅에서는 EKS에서 이를 자동으로 구성하도록 한다.
2.2 컴퓨팅 및 조정 구성 설정
이 곳에서 설정한 값에 기반하여 EKS는 노드 그룹에 대한 시작 템플릿과 오토 스케일링 그룹을 생성하고 이들을 통해 노드그룹의 노드들을 관리한다.
먼저, 노드 그룹에 대한 컴퓨팅 자원에대해 설정한다.
- AMI type: 노드그룹을 생성할 AMI 지정 (Amazon Linux2, GPU, ARM, Bottlerocket 지원)
- Capacity type: EC2 사용 방법 선택 (On-Demand / Spot 지원)
- Instance type: 생성될 노드의 인스턴스 타입 지정
- Disk size: 노드에 생성될 EBS의 용량 지정
노드 그룹 조정 구성의 초기 값을 설정한다.
- Minimum size: 노드 그룹이 유지할 최소 노드 수
- Maximum size: 노드 그룹이 제한할 최대 노드 수
- Desired size: 노드 그룹 내 현재 생성할 노드 수
노드 그룹을 운영하다보면, EKS 버전 업그레이드, 시작 템플릿 설정 변경 반영 등 노드에대한 업데이트가 필요하다. 이때 한번에 여러 노드에 대해 반영하게되면 서비스 중단이 발생할 수 있는데, Auto Scaling Group은 이러한 상황에 대해 노드 그룹 업데이트 설정을 지원한다. 이 설정은 노드 그룹 내 업데이트 발생시 허용되는 사용 불가능 노드 최대 수 / 백분율에따라 순차적으로 노드 업데이트를 진행하는 옵션이다.
2.3 네트워크 설정
이 단계에서는 노드 그룹이 구성 될 서브넷 선택하고 노드에 대한 접근 설정을 한다.
이 때 서브넷은 클러스터 구성시 선택한 서브넷들 중에 선택이 가능하며 앞서 총 4개의 서브넷 (public 2개, private 2개)를 선택하였다. 본 포스팅에서는 노드 그룹의 서브넷은 각 노드를 private 서브넷에 구성하기 위해 private 서브넷 2개를 선택한다. (az-a, az-c)
- ssh access to nodes: 각 worker 노드에 ssh 접근을 허용하는 설정
- security groups: 노드그룹 생성시 각 노드마다 ***remoteAccess***의 이름이 포함된 보안그룹이 자동으로 생성되는데, remoteAccess 보안그룹에 여기서 선택한 보안그룹의 ssh 접속 허용이 추가됨
3. kubectl 사용 설정
Kubernetes는 클러스터 API 서버와 통신하기 위해 kubectl을 사용한다. 이제 생성된 EKS Cluster에대해 kubectl 명령을 사용할 수 있도록 설정한다. 앞선 포스팅에서 API 서버 접근 엔드포인트 설정을 다뤘다. 이때 설정에 따라 API 서버 접근 방법에 차이가 있다.
- public: 사용자 개인 PC와같이 외부에서 인터넷을 사용하여 kubectl 명령어 사용 가능 (내부망에서 접근 불가능)
- private: 내부망의 PC, 서버에서 kubectl 명령어 사용 가능 (외부 공인망에서 접근 불가능)
- public and private: 내부망과 인터넷 사용자 모두 kubectl 명령어 사용 가능
이제 각자 선택한 환경과 EKS 버전에 맞게 kubectl 을 설치한다. 본 포스팅에서는 EKS 1.19 버전을 사용하므로 이에 맞는 kubectl을 설치했다.
# kubectl 설치
curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.19.6/2021-01-05/bin/darwin/amd64/kubectl
# 실행권한 부여
chmod +x ./kubectl
# 이진파일 복사, 환경변수 등록
mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$HOME/bin:$PATH
이제 kubectl 명령어를 사용하여 EKS를 활용할 수 있게 되었다. 다음 포스팅에서는 ingress에 대한 설명과 ingress를 위해 EKS에서 설정해줘야하는 부분을 다루겠다.
[참고]
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/view-nodes.html
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/install-kubectl.html
'AWS > EKS' 카테고리의 다른 글
[AWS/EKS] Container Insights와 Fluent-bit로 EKS 모니터링, 로그 수집 하기 (0) | 2022.04.26 |
---|---|
[AWS/EKS] AWS IAM 사용자에 대한 RBAC (Role-based Access Control) 설정하기 (0) | 2022.04.11 |
[AWS/EKS] 콘솔로 생성하는 EKS - ④ ingress로 서비스 외부 노출 시키기 (AWS LoadBalancer Controller 설치) (0) | 2022.03.17 |
[AWS/EKS] 콘솔로 생성하는 EKS - ② EKS Cluster 생성, OIDC 구성 (0) | 2022.01.10 |
[AWS/EKS] 콘솔로 생성하는 EKS - ① intro, network 고려사항 (0) | 2022.01.06 |
댓글