AWS EKS CLI로 Kubernetes 클러스터 만드는 방법

개발자라면 일반적으로 컨테이너화된 응용 프로그램을 Kubernetes에 배포하고 싶을 것입니다. 그러나 질문은, 어떻게 할까요? 왜 AWS EKS CLI를 시도해 보지 않을까요?

이 튜토리얼에서는 AWS EKS CLI를 설정하여 Kubernetes 클러스터를 생성하는 방법을 배우게 됩니다. 이렇게 하면 인프라 관리 대신 코드에 집중할 수 있습니다.

계속 읽고 오늘부터 클러스터 생성을 시작하세요!

전제 조건

이 튜토리얼은 실습을 위한 것입니다. 따라하려면 PC와 AWS 계정이 있어야 합니다. AWS 계정이 없다면 무료 계정을 사용할 수 있습니다.

관리자 사용자 생성

Kubernetes 클러스터를 생성하기 전에 관리자 사용자를 생성합니다. 관리자 사용자를 사용하면 AWS 콘솔에 로그인하여 클러스터를 구성할 수 있습니다. AWS 콘솔을 통해 관리자 권한을 갖는 사용자를 생성하여 이 튜토리얼을 시작하세요.

1. AWS 콘솔에 로그인하고 IAM 대시보드로 이동합니다.

왼쪽 패널에서 사용자를 클릭한 다음, 오른쪽 상단에 표시된 사용자 추가를 클릭하여 사용자 추가를 초기화합니다.

Initializing User Creation

2. 다음으로, 사용자명 필드에 사용자명을 입력하고, 여기서는 K8-Admin을 사용합니다. 액세스 키 – 프로그래밍 액세스 옵션을 선택하고, 다음: 권한을 클릭합니다.

프로그래밍적으로 액세스할 수 있기 때문에 액세스 키 – 프로그래밍 액세스 옵션을 선택합니다. 이로 인해 응용 프로그램이 AWS에 직접적으로 작업을 지시할 수 있습니다.

Configuring User Details

3. 기존 정책 직접 연결 옵션을 클릭하고, AdministratorAccess 정책을 선택한 후, 다음: 태그를 클릭합니다.

AdministratorAccess 정책은 사용자(K8-Admin)에게 AWS의 모든 액세스 권한과 다음과 같은 추가 권한을 부여합니다:

Setting up AdministratorAccess policies

4. 다음: 검토를 클릭하여 태그 추가를 건너뜁니다.

Skipping the tags screen

5. 마지막으로, 사용자 세부 정보를 검토한 후 사용자 생성을 클릭하여 관리자 사용자를 최종적으로 만듭니다.

Creating the admin user

관리자 사용자 생성이 완료되면, 아래와 같은 화면 상단에 성공 메시지가 표시됩니다. 나중에 로그인에 이러한 키를 사용하므로 액세스 키 ID비밀 액세스 키를 기억해 두세요.

Previewing the admin user keys

EC2 인스턴스 시작

이제 K8-Admin을 생성했으므로 첫 번째 EC2 인스턴스를 생성할 수 있습니다. 이 인스턴스는 클러스터를 만들기 위해 명령을 실행하는 마스터 노드로 사용됩니다.

1. EC2 대시보드로 이동하여 페이지의 가장 오른쪽에 있는EC2를 클릭한 다음 인스턴스 시작을 클릭합니다. 이렇게하면 브라우저가 페이지로 리디렉션되어 Amazon Machine Image (AMI)를 선택할 수 있는 페이지로 이동합니다.

Launching an EC2 Instance

2. 다음으로, 아래에 표시된 것과 같이 목록에서 Amazon Linux 2 AMI (HVM) 옆에 있는 선택을 클릭합니다.

Amazon Linux 2 AMI (HVM)은 최신 하드웨어의 최적 성능을 위해 튜닝된 Linux 커널 5.10을 제공합니다. 이 AMI에는 프로덕션 수준의 Kubernetes 클러스터에서 필요한 많은 기능도 포함되어 있습니다.

Selecting Amazon Linux 2 AMI (HVM)

3. 인스턴스 유형은 기본값인 (t2.micro)을 유지하고 다음: 인스턴스 구성을 클릭하여 인스턴스를 구성합니다.

Previewing the instance type

4. 퍼블릭 IP 자동 할당 옵션을 활성화하고 다음: 스토리지 추가를 클릭합니다. 이 옵션을 사용하면 컨테이너가 Kubernetes 마스터 노드와 EC2 인스턴스의 공개 IP에 액세스할 수 있습니다.

Configuring instance details

5. 기본값(Root)을 유지하고 추가 스토리지 페이지에서 다음을 클릭하세요: 태그 추가. Root 볼륨은 인스턴스 내에서 데이터를 읽고 쓰기 위해 필요합니다.

Configuring the storage

6. 태그 추가를 건너뛰고 다음을 클릭하세요: 보안 그룹 구성.

Previewing the tags

7. 아래와 같이 보안 그룹의 기본값을 유지하고 검토 및 시작을 클릭하세요.

Previewing the Security Group

8. 인스턴스 시작 세부 정보를 검토하고 시작을 클릭하여 인스턴스를 시작하세요. 팝업 창이 나타나며, 기존 키 페어를 선택하거나 새로 생성할 수 있습니다 (9단계).

Launching an instance

9. 대화 상자 팝업에서 다음과 같이 키 페어를 구성하세요:

  • 드롭다운 상자에서 새로운 키 페어 생성을 선택하세요.
  • RSA키 페어 유형으로 선택하세요.
  • 원하는 키 페어 이름을 입력하세요. 하지만 이 튜토리얼에서는 키 페어 이름을 my-nvkp로 설정합니다.
  • 키 페어 다운로드를 클릭한 다음 인스턴스 시작을 클릭하세요.
Creating a new key pair

인스턴스가 완전히 시작되기까지 약간의 시간이 소요될 수 있습니다. 인스턴스가 실행 중인 것을 EC2 대시보드에서 확인할 수 있습니다. 아래의 예시처럼 표시됩니다.

Previewing the newly-created instance

AWS CLI 도구 구성하기

이제 인스턴스가 실행되었으므로 명령 줄(CLI) 도구를 구성해야 합니다. CLI 도구를 사용하여 AWS 계정과 함께 사용하는 것은 Kubernetes 클러스터를 생성하는 데 필수적입니다.

1. EC2 대시보드에서 인스턴스를 선택하기 위해 상자를 선택하고 아래와 같이 표시된 대로 연결을 클릭하여 인스턴스에 연결을 초기화합니다.

Connecting to the Ec2 instance.

2. 다음으로, 이전 단계에서 선택한 인스턴스에 연결하기 위해 연결 버튼을 클릭합니다.

Connecting to the instance

EC2 인스턴스에 연결한 후, 브라우저가 아래와 같이 표시된 대화형 터미널로 리디렉션됩니다. 이 터미널을 사용하여 명령 줄에 연결하고 새 인스턴스에 관리 명령을 실행할 수 있습니다.

대화형 터미널을 통해 명령 줄에 연결하고 새 인스턴스에 관리 명령을 실행할 수 있습니다.

Previewing the interactive terminal

3. 아래의 aws 명령을 실행하여 CLI 버전을 확인합니다.

aws --version

출력에서 알 수 있듯이, Amazon Linux 2 인스턴스에서 1.18.147 버전을 실행 중이며 이는 오래된 버전입니다. Kubernetes의 모든 기능에 액세스할 수 있도록 하기 위해 AWS CLI 버전 2+를 다운로드하고 설치해야 합니다(세 번째 단계).

Checking the AWS CLI version

4. 이제 아래의 curl 명령을 실행하여 CLI 도구 v2+를 다운로드하고 awscliv2.zip이라는 zip 파일로 저장합니다.

 curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" 
Downloading the CLI tool v2+

5. 다음 명령을 실행하여 다운로드한 파일을 압축 해제하고 오래된 AWS CLI가 설치된 위치를 확인합니다.

unzip awscliv2.zip
which aws

출력에서 알 수 있듯이, 오래된 AWS CLI가 /usr/bin/aws에 설치되어 있습니다. 이 경로를 업데이트해야 합니다.

Updating outdated AWS CLI

6. 다음 명령을 실행하여 다음을 수행하고 인스턴스에서 AWS CLI 설치 경로를 업데이트합니다:

  • Amazon Linux 2 인스턴스에 업데이트된 AWS CLI 도구를 설치합니다 (sudo ./aws/install).
  • CLI 도구를 설치할 디렉토리 (--install-dir /usr/bin/aws-cli)를 설정합니다. 이렇게 하면 CLI 도구를 다시 설치하지 않고 업데이트된 AWS CLI를 다른 인스턴스로 전송할 수 있습니다.
  • 현재 환경에 AWS CLI 도구의 새 경로가 있는 경우, (--update) 현재 쉘 환경을 업데이트합니다.
sudo ./aws/install --bin-dir /usr/bin --install-dir /usr/bin/aws-cli --update
Installing the CLI tool v2

7. 다음의 명령을 다시 실행하여 업데이트된 AWS CLI가 올바르게 설치되었는지 확인합니다. aws --version

aws --version

아래와 같이 설치된 AWS CLI 버전은 2.4.7이며, 이는 작성 시점에서 최신 버전인 2.4.7입니다.

Checking the AWS CLI updated version

8. 다음으로, aws configure 명령을 실행하여 인스턴스를 새로운 AWS CLI 도구로 구성합니다.

aws configure

아래의 프롬프트에 적절한 값을 입력합니다:

  • AWS Access Key ID [None] – 이전 “관리자 사용자 생성” 섹션에서 확인한 액세스 키 ID를 입력합니다.
  • AWS Secret Access Key [None] – 이전 “관리자 사용자 생성” 섹션에서 확인한 비밀 액세스 키를 입력합니다.
  • Default region name [None]us-east-1과 같은 지원되는 지역을 선택합니다.
  • Default output format [None] – Kubernetes와 함께 사용하기 위해 선호되는 표준인 JSON 형식인 json을 입력합니다.
Configuring the AWS Environment

Amazon EKS Command-Line 도구 (eksctl) 구성하기

Amazon EKS CLI를 사용하여 Kubernetes 클러스터를 생성하려면 Amazon EKS (eksctl) command-line 도구도 구성해야 합니다. 이 도구를 사용하면 Amazon EKS에서 Kubernetes 클러스터를 생성하고 관리할 수 있습니다.

1. EC2 인스턴스에 Kubernetes command-line 도구 (kubectl)의 최신 버전을 설치합니다. 이 도구를 사용하여 Kubernetes 클러스터에 대한 명령을 실행할 수 있습니다.

2. 다음으로, 아래의 curl 명령을 실행하여 최신 eksctl 릴리스를 GitHub에서 /tmp 디렉토리에 .tar.gz 파일로 가져온 다음, 아카이브 내용을 /tmp 디렉토리에 추출합니다.

다음 명령을 실행하여 다음 작업을 수행합니다:

  • GitHub에서 최신 eksctl 릴리스(--location)를 .tar.gz 아카이브("<https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$>(uname -s)_amd64.tar.gz")로 가져옵니다.
  • 아카이브의 내용을 /tmp 디렉토리에 추출합니다(tar xz -C /tmp). --silent 플래그는 명령의 진행 상황 출력을 억제합니다.
  • eksctl 바이너리(/tmp/eksctl)를 AWS CLI를 설치한 경로(/usr/bin)로 이동합니다(sudo mv).
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/bin

3. 마지막으로 아래의 명령을 실행하여 eksctl을 성공적으로 설치했는지 확인하세요.

eksctl version

아래의 출력은 eksctl이 성공적으로 설치되었음을 확인합니다.

Checking the eksctl CLI tool version

eksctl에 익숙하지 않은 경우 아래의 명령을 실행하여 모든 지원되는 eksctl 명령과 사용법을 확인할 수 있습니다.

eksctl --help
Previewing the eksctl help page

EKS 클러스터 프로비저닝

eksctl을 구성했으므로 이제 eksctl 명령을 사용하여 첫 번째 EKS 클러스터를 프로비저닝할 수 있습니다.

아래의 eksctl 명령을 실행하여 다음을 수행하세요.

  • t3.micro 노드 유형과 us-east-1 지역을 가진 3개 노드 Kubernetes 클러스터를 dev라는 이름으로 생성합니다.
  • EKS가 관리하는 이 노드 그룹에 최소한 하나의 노드(--nodes-min 1)와 최대 4개의 노드(--nodes-max 4)를 정의합니다. 이 노드 그룹의 이름은 standard-workers입니다.
  • standard-workers라는 이름의 노드 그룹을 생성하고 standard-workers 노드 그룹에 대해 머신 유형을 선택합니다.
eksctl create cluster --name dev --version 1.21 --region us-east-1 --nodegroup-name standard-workers --node-type t3.micro --nodes 3 --nodes-min 1 --nodes-max 4 --managed
Provisioning your EKS Cluster

2. 명령에 의해 수행된 작업을 확인하기 위해 CloudFormation 대시보드로 이동하세요. eksctl create cluster 명령은 CloudFormation을 사용하여 AWS 계정에서 인프라를 프로비저닝합니다.

아래에서 볼 수 있듯이 eksctl-dev-cluster CloudFormation 스택이 생성되고 있습니다. 이 과정은 15분 이상 소요될 수 있습니다.

Previewing the eksctl-dev-cluster stack.

3. 이제 EKS 대시보드로 이동하여 dev라는 클러스터가 생성되었음을 확인할 수 있습니다. dev 링크를 클릭하여 dev의 EKS 클러스터 대시보드에 액세스하세요.

Navigating to the dev EKS Cluster dashboard.

아래에서 dev의 EKS 클러스터 세부 정보를 볼 수 있습니다. 노드 이름, 인스턴스 유형, 노드 그룹상태 등이 포함됩니다.

Previewing the dev EKS Cluster dashboard.

4. EC2 대시보드로 전환하면 네 개의 노드가 실행되고 있으며, AWS 계정에서 t3.micro 역할을 가진 세 개의 워커 노드와 하나의 마스터 노드가 있음을 확인할 수 있습니다.

Previewing the EC2 dashboard.

5. 마지막으로, 아래 명령을 실행하여 클러스터 엔드포인트, 인증서 및 자격 증명과 함께 kubectl 구성(update-kubeconfig)을 업데이트하세요.

aws eks update-kubeconfig --name dev --region us-east-1
Updating kubectl config

EKS 클러스터에 애플리케이션 배포

EKS 클러스터를 생성하고 정상적으로 실행되었음을 확인했습니다. 그러나 현재 EKS 클러스터는 그냥 놀고 있습니다. 이 데모에서는 NGINX 애플리케이션을 배포하여 EKS 클러스터를 활용할 것입니다.

1. 아래의 yum 명령을 실행하여 git을 설치하고 설치 중에 모든 프롬프트를 자동으로 수락합니다(-y).

sudo yum install -y git
Installing Git

2. 다음으로, 아래의 git clone 명령을 실행하여 GitHub 저장소에서 구성 파일을 현재 디렉토리로 복제합니다. 이 파일들을 사용하여 팟에 NGINX 배포를 생성하고 로드 밸런서(ELB)를 생성할 것입니다.

git clone https://github.com/Adam-the-Automator/aws-eks-cli.git
Cloning the configuration files

3. 다음 명령을 실행하여 ata-elk 디렉토리로 이동하고, NGINX를 위한 서비스(./nginx-svc.yaml)를 생성합니다(kubectl apply).

# ata-elk 디렉토리로 이동
cd ata-elk
# ./nginx-svc.yaml에 있는 구성을 팟에 적용
kubectl apply -f ./nginx-svc.yaml
Creating a service for NGINX

4. 그다음, kubectl get service 명령을 실행하여 NGINX 서비스의 상태를 확인합니다.

kubectl get service

아래에서 보는 것처럼 서비스 유형은 로드 밸런서이며, Kubernetes가 서비스(nginx-svc)를 생성했으며 이는 NGINX 배포입니다. 또한 EKS에 의해 생성된 로드 밸런서의 외부 DNS 호스트 이름을 EXTERNAL IP 열에서 확인할 수 있습니다.

로드 밸런서의 외부 DNS 호스트 이름을 기록해 두세요. 나중에 로드 밸런서를 테스트하는 데 필요합니다.

Checking the status of your NGINX

5. NGINX 팟을 배포하기 위해 아래의 kubectl 명령을 실행하세요.

kubectl apply -f ./nginx-deployment.yaml
Deploying the NGINX pods

6. 다음의 kubectl get 명령을 실행하여 NGINX 배포와 NGINX 파드의 상태를 확인하세요.

kubectl get deployment
kubectl get pod

아래 출력에서 보시는대로, 배포에는 세 개의 파드가 있으며 모두 실행 중입니다.

Checking the status of the NGINX deployment and pods

7. 다음으로, kubectl get node 명령을 실행하여 워커 노드의 상태를 확인하세요.

kubectl get node
Check the status of your worker nodes

8. 이제 아래의 curl 명령을 실행하여 로드 밸런서를 테스트하세요. <LOAD_BALANCER_DNS_HOSTNAME>을(를) 이전에 기록한 DNS 이름으로 바꿔주세요 (5단계).

curl "<LOAD_BALANCER_DNS_HOSTNAME>"

아래 출력에서 보이는 대로, EKS에 의해 생성된 NGINX 서비스의 NGINX 환영 페이지가 표시됩니다. 아래 출력은 로드 밸런서가 올바르게 작동하고 NGINX 파드에 액세스할 수 있다는 것을 확인합니다.

Checking your load balancer

9. 마지막으로, 로드 밸런서의 DNS 이름을 새 브라우저 탭에 복사하여 붙여넣으세요.

이렇게하면 응용 프로그램이 작동함을 나타내는 NGINX 환영 페이지가 표시됩니다.

Checking your load balancer with a browser

고가용성 Kubernetes 제어 테스트

이제 클러스터가 실행 중인지 확인하기 위해 Kubernetes 제어 플레인이 고가용성인지 테스트할 것입니다. 응용 프로그램의 가동 시간은 이 기능에 달려 있습니다. 제어 플레인이 작동하지 않으면 응용 프로그램이 중단되고 사용자에게 서비스를 제공할 수 없습니다.

고가용성 Kubernetes 제어 기능을 사용하면 응용 프로그램의 가용성을 높일 수 있습니다. EKS 워커 노드를 중지하고 Kubernetes가 실패한 노드를 대체하기 위해 새 노드를 실행하는지 확인하여 이 기능을 테스트할 것입니다.

1. EC2 대시보드에서 EKS 워커 노드 인스턴스를 모두 중지하세요. 아래 그림과 같습니다.

Stopping all of your EKS worker node instances

2. 다음 명령을 실행하여 워커 노드의 상태를 확인하세요.

kubectl get node

다음과 같은 여러 상태를 얻게 될 것입니다. Pending, Running, 그리고 Terminating. 왜냐하면 모든 워커 노드를 중지하려고 시도하는 동안 Kubernetes는 장애를 감지하고 빠르게 다른 노드를 가동시킵니다.

Checking the status of the worker node

3. 이제 kubectl get pod 명령을 실행하여 고가용성 Kubernetes 제어 기능을 테스트하세요.

kubectl get pod

출력에서 세 개의 새로운 파드가 (나이로 식별됨) Running 상태임을 확인할 수 있습니다. 이러한 새로운 파드는 고가용성 Kubernetes 제어 기능이 의도한대로 작동 중임을 나타냅니다.

Checking the status of the pods

4. 아래 kubectl get service 명령을 실행하여 모든 사용 가능한 서비스를 나열하세요.

아래에서 확인할 수 있듯이 Kubernetes가 새로운 서비스를 생성하고 로드 밸런서의 DNS 이름이 이제 다른 것을 알 수 있습니다. kubectl get service

kubectl get service
Kubernetes has created a new service

5. 마지막으로, 로드 밸런서의 DNS 이름을 브라우저에 복사하여 붙여넣으세요. “EKS 클러스터에 애플리케이션 배포” 섹션의 마지막 단계와 같이 NGINX에서 환영 페이지를 받게 될 것입니다.

결론

이 튜토리얼을 통해 EKS 클러스터를 생성하고 컨테이너에서 NGINX 서비스를 배포하고 고가용성 제어 플레인 기능을 테스트하는 방법에 대해 배웠습니다.

이 시점에서 AWS 환경에서 EKS 클러스터를 생성하는 방법에 대해 좋은 이해를 갖고 있어야 합니다.

당신에게 미래에 대해 어떤 계획이 있나요? 혹시 AWS에서 Docker와 K8s를 사용하여 NodeJS 앱을 배포하는 방법을 배우는 것은 어떠세요?

Source:
https://adamtheautomator.com/aws-eks-cli/