[AWS] EKS Cluster 생성 (with AWS Console)

Jeongtae Kim·2023년 9월 11일
0

AWS

목록 보기
10/13
post-thumbnail

컨테이너 오케스트레이션 도구 중 가장 많이 쓰이는 것은 Kubernetes 입니다. Kubernetes를 EC2로 사용하려면 컨트롤 플레인을 직접 구성하고 노드도 직접 연결하며 운영 및 유지 관리도 개인이 혼자서 해야합니다. EKS 를 사용하면 이런 귀찮은 작업들을 AWS에 맡길 수 있고 가용성, 확장성, 보안 등을 보장받을 수 있습니다.

그럼 간단하게 EKS Cluster 하나를 생성해봅시다.

0. 사전 인프라 구성

먼저, VPC를 생성하겠습니다. VPC and more 을 선택하여 자동으로 public subnet과 private subnet을 생성하겠습니다.

리소스들의 이름 시작을 demo 로 설정하며, VPC CIDR을 10.0.0.0/16 으로 설정하였습니다. IPv6는 고려하지 않았습니다.

AZ는 2개(A, C)를 사용하며 public subnet, private subnet 각각 2개씩 사용합니다. 비용 절약을 위해 NAT는 하나만 사용하겠습니다.

VPC Endpoint는 사용하지 않고, Create VPC 를 눌러 VPC를 생성합니다.

VPC 생성이 완료되었습니다.

추가로, public subnet들은 서브넷 설정에서 Enable auto-assign public IPv4 address 옵션에 체크하여 자동으로 공인 IPv4가 부여되게 설정하는 것이 좋습니다.

1. EKS Cluster 생성

EKS Console에서 Add cluster > Create 를 누릅니다.

이름을 적고 쿠버네티스 버전을 고릅니다. 또한, 쿠버네티스 컨트롤 플레인이 AWS 리소스를 관리하도록 허용하기 위해서 Cluster service role을 따로 생성해야 합니다.

IAM Role을 생성할 때, AWS Service에서 EKS 를 선택하고 Use case는 EKS - Cluster 을 선택합니다.

계속 Next 를 누르고, Role name을 정한 다음 Create role 을 눌러 IAM Role을 생성합니다. Cluster service role로 생성한 IAM Role을 선택합니다. 이제 Next 를 누릅니다.

생성했던 VPC를 선택하고, Worker Node와 통신하기 위해 사용할 private subnet 두 개를 선택합니다. 컨트롤 플레인 보안 그룹을 따로 생성하겠습니다.

보안 그룹의 이름을 설정하고, Inbound rules로 443 포트를 곧 생성할 EC2 인스턴스의 보안 그룹한테만 오픈하게 합니다. Create security group 을 누르고 생성한 보안 그룹을 선택합니다.

Cluster endpoint access 에서 public한 endpoint access가 필요없기 때문에 Private 을 선택하겠습니다. 다시 Next 를 누릅니다.

Control plane logging 설정은 모두 켜주고, Next 를 누르겠습니다.

Amazon GuardDuty EKS Runtime Monitoring 애드온은 사용하지 않기 때문에 그대로 놔두고 Next 를 누르겠습니다.

애드온 버전은 기본으로 놔두고 Next 를 누릅니다.

Review를 완료하고 Create 를 누르면 Cluster 생성이 진행됩니다.

약 10분 정도 대기하면 Cluster 생성이 완료됩니다.

2. EKS 액세스 EC2 Instance 생성

이제 EKS Cluster에 접근할 EC2 Instnace를 생성하겠습니다. 다른 설정은 상황에 맞게 알아서 설정하고 몇 가지만 고정적으로 설정하겠습니다.

  1. AMI는 Amazon Linux 2023 을 사용합니다.

  2. 생성한 VPC, public subnet 하나, SSH를 허용하는 보안 그룹을 각각 선택합니다.
    (컨트롤 플레인 보안그룹의 443 포트 접근이 가능한 보안 그룹)

  3. User data에는 다음과 같은 스크립트를 작성합니다.

#!/bin/bash
# awscli 2 설치
yum update -y
yum remove -y awscli
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
./aws/install
# docker 설치
yum install -y docker
systemctl start docker
systemctl enable docker
usermod -a -G docker ec2-user
# kubectl 1.27 버전 다운로드
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.27.1/2023-04-19/bin/linux/amd64/kubectl
chmod +x ./kubectl
HOME=/home/ec2-user
mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
# kubectl 자동완성 설정
kubectl completion bash | tee /etc/bash_completion.d/kubectl > /dev/null
# helm 설치
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
# eksctl 설치
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
mv /tmp/eksctl /usr/local/bin

kubectl 다른 버전 : https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/install-kubectl.html

이제 Launch instance 를 눌러 인스턴스를 생성합니다.

3. EKS Cluster 액세스

  1. EC2 Instance에 SSH로 접근합니다.
ssh ec2-user@(Public IPv4 address) -i (Key pair file)

  1. EKS Cluster을 생성한 User한테서 Access Key를 발급받고, aws configure 로 발급 받은 Access Key ID와 Secret Access Key를 입력합니다. 리전과 output format도 설정해줍니다.
    (해당 Access Key는 실습 이후 삭제했습니다.)
aws configure

  1. kubeconfig 파일을 업데이트하여 EKS Cluster에 액세스 할 수 있도록 합니다.
aws eks update-kubeconfig --name DemoCluster

  1. EKS Cluster에 접근이 되는지 확인합니다.
kubectl get svc

오늘의 글은 여기까지입니다. 감사합니다!

profile
유용할지도 모른다.

0개의 댓글