[Kubernetes] EKS 생성하기

2021. 11. 18. 10:01Kubernetes/Kubernetes_Service

반응형

안녕하세요, 달콤한달팽이입니다.🐌🙂

 

이제 실제로 AWS에서 사용하는 관리형 쿠버네티스 도구인 EKS에 대하여 알아보고,

생성하는 방법에 대하여 알아보겠습니다.


EKS란?

EKS란, 쿠버네티스 컨트롤 플레인이나 워커 노드를 설치 및 운영할 필요 없이

AWS 환경만을 통해 쿠버네티스를 손쉽게 실행할 수 있도록 지원하는 관리형 서비스를 의미합니다.

 

즉, 앞서 구성한 kubeadm과 같이 서버 생성, 컨트롤 플레인 생성 등의 복잡하고 귀찮은 과정을 AWS가 대신 지원해주고

관리 역시 AWS에서 진행하는 것을 의미합니다.


1) VPC 

EKS 클러스터를 생성하기 위해선, VPC측에서 DNS를 확인하고, 호스트 이름을 활성화하는 작업이 필요합니다.

 

VPC 설정 편집 탭에서 DNS와 관련된 설정은 모두 활성화시켜주세요!

 

2) 서버 생성 및 환경설정

EKS의 특성상 컨트롤 플레인은 AWS에서 관리하며,

이 때문에 kubeadm처럼 콘솔을 통해 컨트롤 플레인을 접근 할 수 없습니다.

 

때문에 EKS 클러스터에 kubectl 명령어를 전달할 서버가 필요합니다.

이를 위한 서버를 생성하고, 차례대로 환경설정을 진행해보도록 합시다!

 

[IAM Role 부여]

서버에 Access Key를 등록하는 방법도 있지만, 

Key 사용을 줄이기 위해 이번 실습에서는 EC2에 Role을 부여하는 방법을 사용해보겠습니다!

 

ec2-admin이라는 Role은 EKS에 대한 전체 권한과, assumerole, ec2, eks에 대한 신뢰 관계를 맺고 있습니다.

 

[CLI 버전 확인]

eksctl 명령어 사용을 위해선 cli의 버전이 2 이상이어야 합니다.

 

때문에 아래 명령어를 통해 CLI의 버전을 확인해주세요!

aws --version

 

만약 CLI의 버전이 2 이상이 아닐 경우, CLI를 최신 버전으로 설치하거나 업데이트해주세요!

만약 기억이 나지 않는다면.,.?!

 

[kubectl 설치]

kubectl은 쿠버네티스 API를 사용하여 쿠버네티스 클러스터의 컨트롤 플레인과 통신하기 위한 툴입니다.

 

즉, Pod을 생성하거나, 삭제하는 등

쿠버네티스에 대한 전반적인 명령어를 수행하기 위해 사용되는 명령어입니다.

 

아래 명령어를 참고하여 kubectl를 설치해주세요!

(버전에 따라 curl 명령어 위치가 변경될 수 있습니다!)

## 최신버전의 kubectl 다운로드 및 권한변경
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.28.2/2023-10-17/bin/linux/amd64/kubectl.sha256
chmod +x ./kubectl

## 환경변수 설정
mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$HOME/bin:$PATH

## kubectl 버전 확인
kubectl version --client

 

[eksctl 설치]

eksctl은 AWS API를 사용하여 EKS 클러스터를 보다 쉽게 컨트롤하기 위한 툴입니다.

 

즉, 클러스터를 생성하거나, 삭제하는 등

EKS에 대한 전반적인 명령얼르 수행하기위해 사용되는 명령어입니다. 

 

아래 명령어를 참고하여 kubectl를 설치해주세요!

## eksctl 다운로드 및 경로변경
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
mv -v /tmp/eksctl /usr/local/bin

## eksctl 버전 확인
eksctl version


3) EKS 클러스터 생성

EKS 클러스터를 생성하는 방법은 크게 콘솔과 AWS CLI로 구분지을 수 있습니다.

 

EKS는 처음 클러스터를 생성한 User 혹은 Role에게만 마스터 권한이 부여되므로,

어떠한 User나 Role이 클러스터를 생성하는지 잘 파악해두시길 바랍니다!

 

[콘솔 생성]

EKS 서비스에서 클러스터를 생성할 경우, 가장 처음 클러스터 구성 환경을 보게 됩니다.

해당 탭에서는 클러스터의 이름과 버전, 그리고 역할을 설정할 수 있습니다.

  1) 이름: 클러스터의 이름이 되며, ID와 동일한 역할을 수행합니다.

  2) 버전: 최대 6개의 버전이 제공되며, 이중 최신 버전을 선택했습니다.

  3) 역할: EKS-Cluster-Policy에는 "AmazonEKSClusterPolicy"라는 AWS 관리형 정책이 연결되어 있습니다.

 

이후 네트워킹 탭에서는 클러스터에 사용될 ENI가 생성될 서브넷을 지정합니다.

  1) VPC & Subnet: 컨트롤 플레인과 워커노드가 통신할 ENI가 생성될 서브넷을 지정합니다.

  2) 보안그룹: 워커 노드 서브넷에서 생성된 ENI에 적용될 보안 그룹을 선택합니다.

 

이후 EKS를 어디서 접근할 것인지 설정하는 클러스터 엔드포인트 액세스를 설정해야합니다.

 

EKS의 컨트롤 플레인이 AWS에 있기 때문에, 별도의 설정 없이는 프라이빗 사용이 불가합니다.

때문에 이번 실습에서는  퍼블릭 및 프라이빗을 선택했습니다!

 

이후 설정은 모두 Default로 설정한 후 생성을 진행해주세요!

약 5-10분간의 대기시간 이후 상태가 활성으로 변경되면, 생성이 완료되면 EKS 생성 완료입니다!

 

[CLI 생성]

만약 CLI로 생성하고 싶을 경우, 아래의 명령어를 서버에서 실행시켜주세요!

앞서 콘솔에서 생성한 것과 동일하게 생성될 것입니다!

eksctl create cluster --name {클러스터명} --region {리전} --vpc-private-subnets {서브넷 ID1},{서브넷 ID2} --without-nodegroup

4) 클러스터 등록

EKS 클러스터 생성이 완료되었다면,

앞서 생성한 서버가 클러스터를 사용할 수 있도록 클러스터를 등록해주는 과정이 필요합니다.

 

아래 명령어를 사용하여 클러스터를 등록해주세요!

aws eks update-kubeconfig --region {리전} --name {클러스터명}

 

이후 쿠버네티스의 설정값을 관리하는 config 파일을 확인하면 아래와 같이 사용자가 등록된 것을 알 수 있습니다.

cat .kube/config

 

이제 kubectl를 사용하여 Pod을 확인해보도록 합시다.

(Pod이 무엇인지는 다음 글에서 다룰 예정이므로, 우선 따라해주세요!)

kubectl get pods -A

 

kubectl 명령어는 정상적으로 작동했지만, coredns라는 이름의 Pod 2개가 모두 0/1 상태로 비정상임을 알 수 있습니다!

 

이는 노드가 없어 발생하는 이슈이므로, 다음 스탭을 참고하여 워커 노드 그룹을 생성해주도록 합시다.


5) 노드 그룹 생성

EKS의 워커 노드는 EC2 혹은 Fargate를 사용해 구성이 가능하며, 이번 실습에선 EC2를 사용할 예정입니다.

 

노드 그룹은 EKS 클러스터와 별도의 Role을 가지고 수행되므로, 노드에 사용될 Role을 우선 생성해주도록 해주세요!

노드 그룹에 사용될 IAM Role은 최소 아래와 같은 정책을 가지고 있어야합니다.

 1) AmazonEc2ContainerRegistryReadOnly

 2) AmazonEKS_CNI_Policy

 3) AmazonEKSWorkerNodePolicy

 

이제 EKS 클러스터의 컴퓨팅 탭에서 노드 그룹 추가를 진행해주세요!

이때, IAM 역할은 앞서 생성한 Role을 선택해주세요.

 

이후 노드 그룹의 유형과 조정을 구성해주세요.

노드 그룹 컴퓨팅 구성은 노드의 AMI 타입, 용량, 타입, 디스크 크기를 선택할 수 있고,

 

노드 그룹 조정 구성은 AutoScaling과 같이 최소, 최대, 원하는 크기를 선택할 수 있습니다.

 

만약 노드 그룹 버전 업데이트가 진행될 경우, 사용 불가한 노드의 수를 지정할 수 있습니다.

(즉, 지정한 대수만큼의 노드에서 업데이트가 진행됩니다.)

 

이후 노드가 생성될 위치를 선택합니다.

 

생성될 때까지 약 10분정도의 소요 시간이 필요하며,

생성이 완료되었을 때 EC2 탭에서 이름없는 신규 인스턴스가 생성된 것을 확인할 수 있습니다.

(만약, 이름 지정을 원할 경우 노드 그룹 생성 시 Name 태그를 추가해주세요!)


6) 결과확인

이후 Pod를 확인하면, 워커 노드가 생성되었고 coredns가 정상화 되었음을 확인 가능합니다.


이제 EKS를 제대로 사용할 준비가 완료되었습니다!

 

다음 실습에서는 Pod, Replicaset, Deployment 등을 구성해보며 쿠버네티스와 친해지는 시간을 가져보도록 하겠습니다!

 

감사합니다!

반응형