Among Us - Yellow Crewmate [EKS] AWS EKS를 사용하여 클러스터 구성하기

DevOps/Kubernetes

[EKS] AWS EKS를 사용하여 클러스터 구성하기

감쟈! 2021. 4. 26. 23:53

이번에 해볼것은 AWS EKS를 사용해서 클러스터를 구성해 볼 것이다.

 

EKS를 사용해서 클러스터 구성하는 방법은 다음과 같다.

1. eksctl 사용하기

2. AWS Management Console 사용하기

 

이번에 내가 사용할 방법은 AWS Management Console 사용하여 구성할 것이다.

 

이 실습의 진행순서는 다음과 같다

 

1. AWS CLI 설치하기

2. AWS CLI Configure 구성

3. Kubectl 설치하기

4. EKS 클러스터 IAM 역할 생성

5. EKS 워커노드 IAM 역할 생성

6. VPC 및 서브넷 생성

7. EKS 클러스터 생성

8. kubeconfig 생성

9. 노드 그룹 생성


 

1. AWS CLI 설치하기

로컬환경에 AWS CLI를 설치하자.

AWS CLI를 사용해서 자격증명을 해야만 로컬에서 eks 클러스터로 접속이 가능하다.

 

아래 링크에서 본인의 운영체제에 맞는 버전으로 다운로드해주자.

 

docs.aws.amazon.com/ko_kr/cli/latest/userguide/install-cliv2.html

 

AWS CLI 버전 2 설치, 업데이트 및 제거 - AWS Command Line Interface

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com


 

2. AWS CLI Configure 구성

이번 실습에 사용할 Configure 구성은 AWS 루트 계정으로 진행하도록 할 예정이다.

AWS 루트 계정으로 로그인한 후, 우측 상단 내 계정에서 > My Security Credentials > Access Key를 확인하자

Access Key 확인

 

 

 

Access Key와 Secret Key를 확인한 후 터미널을 열어서 aws configure 명령어를 입력하자

내 로컬은 현재 Windows 10이고 Git bash 에서 작업할 예정이다.

aws configure 자격증명


 

3. Kubectl 설치하기

kubectl은 쿠버네티스에서 클러스터를 제어하기 위한 커맨드라인 도구이다.

로컬에서 쿠버네티스 클러스터를 kubectl로 제어해야 하기때문에 kubectl의 설치가 필요하다.

 

아래의 링크에서 쿠버네티스 버전에 맞게 다운로드 받아주도록 하자.

docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html

 

Installing kubectl - Amazon EKS

You must use a kubectl version that is within one minor version difference of your Amazon EKS cluster control plane. For example, a 1.18 kubectl client works with Kubernetes 1.17, 1.18 and 1.19 clusters.

docs.aws.amazon.com

curl로 kubectl 설치

curl -o kubectl.exe https://amazon-eks.s3.us-west-2.amazonaws.com/1.19.6/2021-01-05/bin/windows/amd64/kubectl.exe

 

환경변수 추가

kubectl 실행을 위해서 환경변수 (path)를 추가해준다.

내 PC > 시스템 속성 > 환경변수 > Path 편집 > kubectl 설치경로 추가

 

환경변수 설정

 

환경변수 설정을 마쳤으면 kubectl 이 제대로 실행되는지 확인해주자

# kubectl 설치 확인
kubectl version

 

4. EKS 클러스터 IAM 역할 생성

EKS 생성하기 위해서는 IAM 역할이 필요하다. 그렇기 때문에 EKS 를 생성하기전 미리 IAM 역할을 생성해두자.

 

AWS Console 에서 IAM > Roles > Create role 클릭해서 IAM 역할을 생성해주도록 하자

 

 

IAM 역할 생성 과정에서  use case로 EKS > EKS Cluster를 선택해주자

 

 

역할에 AmazonEKSClusterPolicy  정책을 추가한다.

 


 

5. EKS 워커노드 IAM 역할 생성

 

EKS는 클러스터를 생성해주는 것이고 워커노드는 EC2 인스턴스로 따로 구성된다.

이 때, 사용되는 인스턴스의 역할을 생성해주는 것이다.

 

 

아까와 마찬가지로 IAM roles > Create role 에서 새 역할을 생성해주어야 한다.

워커노드가 EC2에서 동작하기 때문에 EC2를 선택해주자.

 

 

 

다음과 같이 3개의 정책을 추가하고 역할을 생성해주자

  • AmazonEKS_CNI_Policy
  • AmazonEKSWorkerNodePolicy
  • AmazonEC2ContainerRegistryReadOnly


6. VPC 및 서브넷 생성

 

EKS에 사용되는 VPC와 서브넷을 생성해주어야 한다.

 

VPC 구성하는 과정에 대해서는 이 글에서는 다루지 않을 예정이다. 만약 VPC를 직접 구성하고 싶으신 분들은 VPC 생성하는 다른 게시물을 참고하도록 하자.

 

 

아래는 EKS를 사용하는데 필요한 VPC 구성을 AWS에서 CloudFormation Stack 으로 제공하고 있다. 

https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-06-10/amazon-eks-vpc-private-subnets.yaml

 

CloudFormation 에서 S3 URL에 위의 주소를 적어주면 스택이 생성된다.

 

 

다음과 같이 사용할 vpc의 cidr 대역과 서브넷 cidr 대역을 설정해주도록 하자 


7. EKS 클러스터 생성

 

다음으로 본격적으로 EKS를 생성할 시간이다.

 

AWS Console에서 EKS를 선택하고 Create Cluster을 클릭해서 클러스터를 생성해주자.

Create Cluster

 

  • Name - 클러스터의 이름
  • Kubernetes version - 쿠버네티스 버전
  • Cluster Service Role - 이전에 생성했던 클러스터 IAM 역할

 

 

  • VPC - 생성해둔 VPC 지정
  • Subnet - 생성해둔 Private subnet 2개
  • Security groups - 생성해둔 sg그룹 
  • Cluster endpoint access - Public and private :  VPC 내부뿐만 아니라 내 pc의 로컬에서도 접근해야 하기때문에 Public and private로 지정한다

 

 

이 설정부분은 CloudWatch log로 모니터링 할 것인지 선택하는 과정이다.

이번 실습에서는 Control Plane Logging 은 모두 비활성화로 작업할 것이다. 

활성화하게 된다면 로그가 자동으로 CloudWatch logs로 전송되며 CloudWatch logs의 데이터 수집 및 스토리지 비용이 추가적으러 발생하게된다.

 

 

다음과 같이 설정을 끝마치게 되면 EKS 클러스터가 생성되기 까지 몇분의 시간이 소요된다.

생성이 안된다고 조급해 하지 말고 느긋하게 기다려주자.


8. kubeconfig 생성

 

EKS 클러스터가 생성 되었다면, 로컬환경에서도 kubectl 명령어를 사용하여 쿠버네티스 클러스터에 접근하기 위해서 config 파일을 생성해주어야 한다. 

 

다음과 같은 명령어를 수행하여 config 파일을 생성해주자. 파일을 생성하면  ~/.kube 디렉토리에 config파일이 생성되며 kubectl 을 통해서 클러스터에 접근할 수 있게된다.

$ aws eks --region ap-northeast-2 update-kubeconfig --name my-eks

 

config 파일이 생성 되었다면  아래와 같은 명령어로 kubectl이 정상적으로 작동하는지 확인해주자.

아래와 같이 뜬다면 정상적으로 작동하는 것이다. 현재 상태가 Pending인 이유는 아직 워커 노드 그룹을 생성하지 않았기 때문이다.

$ kubectl get pod --all-namespaces
NAMESPACE     NAME                      READY   STATUS    RESTARTS   AGE
kube-system   coredns-y2d6f86o9-on12a   0/1     Pending   0          3m
kube-system   coredns-y2d6f86o9-bn18w   0/1     Pending   0          3m

9. 워커 노드 그룹 생성

 

지금까지 EKS 클러스터 구성이 완료되었다. 다음으로는 클러스터에서 동작할 워커노드를 생성해주도록 하자

 

 

워커노드를 생성할 EKS 클러스터에서 > Compute >  Add Node Group 을 클릭하여 워커노드그룹을 생성해주도록 하자

 

 

Name : 노드그룹의 이름 지정

Node IAM Role : 이전에 생성했던 노드그룹 IAM 역할

 

 

 

 

AMI type : Amazon Linux 2

Capacity type : On-Damand

Instance types : t3.medium ( 이보다 낮은 유형 선택시 성능에 문제 생길 수 있음)

Disk size : 20 GiB

 

Node Group Scaling Configuration - 워커 노드가 생성되는 인스턴스 갯수를 설정한다

Minimum size : 2 nodes (최솟값)

Maximum size : 2nodes (최댓값)

Desired size : 2nodes (기본값)

 

 

 

Subnets : EKS 클러스터 생성할때와 같은 private subnet 2개

SSH Key Pair : 워커노드에 접근할 Key Pair

Security groups : 워커노드에 적용되는 보안그룹

 

 

이제 설정을 모두 끝마치고 생성이 시작되면 몇분의 시간이 또 다시 소요된다. 다시 느긋하게 기다려주자.

 

워커노드 그룹이 생성되고 나서 다시 아래의 명령어를 입력해보면 아까 Pending 상태와는 다르게 모두 Running 상태가 된것을 확인할 수 있다.

$ kubectl get po -n kube-system
NAME                       READY   STATUS    RESTARTS   AGE
aws-node-jdmcl             1/1     Running   0          18m
aws-node-kczks             1/1     Running   0          18m
coredns-78fb67b999-5ndb2   1/1     Running   0          26m
coredns-78fb67b999-86rmr   1/1     Running   0          26m
kube-proxy-27k9x           1/1     Running   0          20m
kube-proxy-zf5cj           1/1     Running   0          20m

 

 

 

이제 EKS로 생성한 클러스터와 워커노드로 kubernetes를 마음대로 즐길 수 있다!!