웹사이트 검색

AWS CLI를 사용하여 Kubernetes 클러스터를 생성하는 방법


이 페이지에서

  1. 전제 조건
  2. 권한이 있는 관리 사용자 만들기\n
  3. EC2 인스턴스 생성
  4. 명령줄 도구 구성
  5. EKS 클러스터 프로비저닝\n
  6. EKS 클러스터에 애플리케이션 배포\n
  7. 클러스터의 고가용성(HA) 기능 확인\n
  8. 결론

EKS(Elastic Kubernetes Service)는 AWS에서 호스팅되는 관리형 Kubernetes 서비스입니다.

EKS를 사용하는 주된 이유는 포드, 노드 등을 관리하는 부담을 없애기 위해서입니다. 현재 AWS에서 Kubernetes를 실행하려면 많은 기술 전문 지식이 필요하며 종종 많은 조직의 조타실을 벗어납니다. EKS를 사용하면 필요한 인프라가 Amazon의 "사내" 팀에서 관리되므로 사용자는 API 또는 표준 kubectl 도구를 통해 사용할 수 있는 완전 관리형 Kubernetes 엔진을 갖게 됩니다.

EKS는 네임스페이스, 보안 설정, 리소스 할당량 및 내결함성, 배포 전략, 자동 크기 조정기 등을 포함한 모든 Kubernetes 기능을 지원합니다. EKS를 사용하면 자체 컨트롤 플레인을 실행할 수 있을 뿐만 아니라 AWS IAM과 통합되어 API에 대한 자체 액세스 제어를 유지할 수 있습니다.

EKS는 Elastic Container Service for Kubernetes(EKS)라는 Amazon의 기존 "Kubernetes-as-a-Service" 솔루션 위에 구축되었으며 AWS에서 Kubernetes 클러스터의 배포, 관리 및 운영을 간소화하는 AWS 관리형 서비스입니다. 구름.

AWS에서 Kubernetes를 실행하는 경우 컨트롤 플레인(예: 마스터 노드 및 작업자 노드)을 관리할 책임이 있습니다. 또한 api-server가 고가용성 및 내결함성 등인지 확인해야 합니다.

EKS는 컨트롤 플레인 관리의 부담을 덜어주므로 이제 Kubernetes 워크로드 실행에 집중할 수 있습니다. 컨트롤 플레인은 Amazon(EKS)에서 관리하므로 마이크로서비스와 같은 상태 비저장 애플리케이션에 가장 일반적으로 사용됩니다.

이 가이드에서는 EKS를 사용하여 AWS에서 Kubernetes 클러스터를 만드는 방법을 설명합니다. Kubernetes 클러스터에 대한 관리 사용자를 생성하는 방법을 배웁니다. 또한 클러스터에 앱을 배포하는 방법도 알아봅니다. 마지막으로 클러스터를 테스트하여 모든 것이 제대로 작동하는지 확인합니다.

시작하자!

전제 조건

  • AWS 계정.
  • 이 기사에서는 사용자가 Kubernetes 및 AWS에 익숙하다고 가정합니다. 그렇지 않은 경우 이 가이드를 시작하기 전에 시간을 내어 둘 다에 대한 설명서를 살펴보십시오.\n

권한이 있는 관리 사용자 만들기

클러스터의 관리자를 만드는 것부터 시작하겠습니다.

1. AWS 콘솔에 로그인하고 IAM으로 이동합니다. 사용자 > 사용자 추가를 클릭합니다.

2. 다음 화면에서 admin과 같은 사용자 이름을 입력합니다. 액세스 키 - 프로그래매틱 액세스를 선택합니다. 다음: 권한을 클릭합니다.

3. 다음 화면에서 기존 정책 직접 연결을 선택합니다. AdministratorAccess를 클릭합니다. 다음: 태그를 클릭합니다.

AdministratorAccess 정책은 Amazon Elastic Container Service(ECS)에 내장된 정책입니다. 모든 ECS 리소스와 ECS 콘솔의 모든 작업에 대한 전체 액세스 권한을 제공합니다. 이 정책의 주요 이점은 AWS EKS 서비스에 액세스하기 위한 추가 권한이 있는 추가 사용자를 생성하거나 관리할 필요가 없다는 것입니다.

관리 사용자는 EC2 인스턴스, CloudFormation 스택, S3 버킷 등을 생성할 수 있습니다. 이러한 종류의 액세스 권한을 누구에게 부여할지 매우 신중해야 합니다.

3. 다음 화면에서 다음: 검토를 클릭합니다.

4. 다음 화면에서 사용자 만들기를 클릭합니다.

5. 다음 화면에 녹색 성공 메시지가 표시됩니다. 액세스 키 ID 및 비밀 액세스 키도 이 화면에 표시됩니다. 나중에 CLI 도구를 구성하려면 이 키가 필요하므로 이 키를 다른 곳에 기록해 두십시오.

EC2 인스턴스 생성

관리 사용자를 생성했으므로 이제 Kubernetes 마스터 노드로 사용할 EC2 인스턴스를 생성할 수 있습니다.

1. 검색 상자에 EC2를 입력합니다. EC2 링크를 클릭합니다. 인스턴스 시작을 클릭합니다.

2. EC2 인스턴스에 대한 Amazon Linux 2 AMI(HVM)를 선택합니다. 이 Amazon Linux AMI를 사용하여 Kubernetes 및 기타 필요한 도구(예: kubectl!, docker 등)를 나중에 쉽게 설치할 수 있습니다.

3. 다음 화면에서 다음: 인스턴스 세부 정보 구성을 클릭합니다.

3. 다음 화면에서 공용 IP 자동 할당 옵션을 활성화합니다. 서버가 프라이빗 서브넷 안에 있기 때문에 외부에서 액세스할 수 없습니다. 탄력적 IP 주소를 인스턴스와 연결하여 서버에 퍼블릭 IP 주소를 제공할 수 있습니다. 이렇게 하면 EC2 및 ELK에 액세스할 수 있습니다. 다음: 스토리지를 클릭합니다.

3. 다음 화면에서 다음: 태그 추가 > 다음: 보안 그룹 구성을 클릭합니다.

4. 다음 화면에서 Review and Launch > Launch를 클릭합니다.

5. 키 쌍 대화상자가 나타납니다. 새 키 쌍 생성을 누르십시오. 이름을 지정한 다음 안전한 위치에 .pem 파일을 다운로드하여 저장합니다. 인스턴스 시작을 클릭합니다.

명령줄 도구 구성

EC2 인스턴스를 생성했으므로 이제 클라이언트를 설치해야 합니다. AWS 용어에서 클라이언트는 클라우드 개체를 관리할 수 있는 명령줄 도구입니다. 이 섹션에서는 명령줄 인터페이스(CLI) 도구를 구성하는 방법을 배웁니다.

1. EC2 대시보드로 이동합니다. 새 EC2 인스턴스가 실행 중인 것을 볼 수 있습니다. 그렇지 않은 경우 인스턴스가 처음 부팅될 수 있으므로 5분 정도 기다린 후 다시 시도하십시오. 인스턴스가 실행되면 연결을 클릭합니다.

2. 다음 화면에서 연결을 클릭합니다.

브라우저에서 대화형 SSH 세션으로 이동합니다. SSH를 사용하면 원격 서버에 안전하게 연결하고 작동할 수 있습니다. 대화형 SSH 세션을 통해 EKS 및 Kubernetes용 명령줄 도구를 EC2 인스턴스에 직접 설치할 수 있습니다.

SSH 세션에 로그인하면 가장 먼저 해야 할 일은 aws-cli 버전을 확인하는 것입니다. 이것은 최신 버전의 AWS CLI를 사용하고 있는지 확인하기 위한 것입니다. AWS CLI는 클러스터를 구성, 관리 및 작업하는 데 사용됩니다.

버전이 오래된 경우 클러스터 생성 프로세스 중에 몇 가지 문제 및 오류가 발생할 수 있습니다. 버전이 2.0 미만이면 업그레이드해야 합니다.

3. 다음 명령을 실행하여 CLI 버전을 확인합니다.

aws --version

아래 출력에서 볼 수 있듯이 매우 오래된 aws-cli 버전 1.18.147을 실행하고 있습니다. CLI를 사용 가능한 최신 버전(이 글을 작성할 당시 v2+)으로 업그레이드하겠습니다.

4. 아래 명령을 실행하여 사용 가능한 최신 버전의 AWS CLI를 EC2 인스턴스에 다운로드합니다. curl은 주어진 URL에서 파일을 다운로드하고, -o는 선택한 대로 이름을 지정하며, "awscli-exe-linux-x86_64.zip"은 다운로드할 파일입니다.

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"

5. 다운로드가 완료되면 아래 명령을 실행하여 다운로드한 파일의 콘텐츠를 현재 디렉토리에 추출합니다.

unzip awscliv2.zip

6. 그런 다음 which aws 명령을 실행하여 최신 버전의 AWS CLI에 대한 링크를 설정합니다. 이 명령은 환경 PATH에서 찾을 수 있는 위치를 알려주므로 모든 디렉터리에서 실행할 수 있습니다.

which aws

아래 출력에서 볼 수 있듯이 오래된 AWS CLI는 /usr/bin/aws에 있습니다.

7. 이제 일부 파라미터와 함께 업데이트 명령을 실행하여 aws-cli를 구성해야 합니다. 첫 번째 매개변수 ./aws/install은 AWS CLI를 현재 디렉터리에 설치하는 데 도움이 됩니다. 두 번째 매개변수 --bin-dir은 환경 PATH에서 AWS CLI가 위치할 위치를 알려주고 세 번째 매개변수 --install-dir은 bin-dir에 상대적인 경로입니다. 이 명령은 모든 경로가 최신 상태인지 확인합니다.

sudo ./aws/install --bin-dir /usr/bin --install-dir /usr/bin/aws-cli --update

8. aws --version 명령을 다시 실행하여 최신 버전을 사용하고 있는지 확인합니다.

aws --version

현재 설치된 AWS CLI 버전이 표시되어야 합니다. 아래 출력에서 볼 수 있듯이 현재 AWS CLI v2.4.7을 사용하고 있습니다. 이것은 최신 버전이며 다음 단계를 구성하는 동안 문제가 발생하지 않습니다.

9. 이제 환경이 제대로 구성되었으므로 AWS CLI를 통해 통신할 AWS 계정을 구성할 차례입니다. 다음 명령을 실행하여 함께 사용하려는 별칭과 함께 현재 구성된 계정 환경 변수를 나열합니다.

aws configure

그러면 현재 구성된 모든 AWS 계정 환경 변수가 표시됩니다. 아래 출력에서 이와 같은 내용을 볼 수 있습니다. AWS CLI가 필요한 계정과 통신하려면 몇 가지 구성 파라미터를 설정해야 합니다. 아래 명령을 실행하면 구성 마법사를 통해 AWS 계정을 설정할 수 있습니다.

  • AWS 액세스 키 ID[없음]: 앞에서 기록한 AWS 액세스 키를 입력합니다.\n
  • AWS 보안 액세스 키[없음]: 앞에서 적어 둔 AWS 보안 액세스 키를 입력합니다.\n
  • 또한 EKS 클러스터가 위치할 기본 지역 이름을 지정해야 합니다. 원하는 EKS 클러스터가 있고 사용자에게 가장 가까운 AWS 리전을 선택해야 합니다. 이 자습서에서는 우리와 가까운 지리적 위치와 자습서의 다음 단계에 대한 사용 용이성 때문에 us-east-1을 선택했습니다.\n
  • 기본 출력 형식[없음]: 나중에 구성 파일을 볼 때 매우 유용하므로 기본 출력 형식으로 json을 입력합니다.\n

이제 AWS CLI 도구를 설정했습니다. EKS 클러스터와 상호 작용할 수 있도록 환경에서 kubectl이라는 Kubernetes CLI 도구를 구성할 시간입니다.

Kubectl은 Kubernetes용 명령줄 인터페이스입니다. Kubectl을 사용하면 Kubernetes 클러스터에서 실행되는 애플리케이션을 관리할 수 있습니다. Kubectl은 Linux 및 MacOS 시스템에 기본적으로 설치되지 않습니다. Kubernetes 웹 사이트의 지침에 따라 다른 시스템에 Kubectl을 설치할 수 있습니다.

10. 아래 명령을 실행하여 kubectl 바이너리를 다운로드합니다. 바이너리는 특정 유형의 컴퓨터에서만 실행 가능한 ".bin" 확장자를 가진 컴퓨터 파일입니다. 서로 다른 유형의 컴퓨터가 파일을 공유하는 쉬운 방법입니다. kubectl 바이너리는 플랫폼에 구애받지 않기 때문에 kubectl 바이너리를 사용합니다. Linux 및 Mac OS를 포함하여 Unix와 유사한 운영 체제를 실행할 수 있는 모든 시스템에서 작동합니다.

curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.16.8/2020-04-16/bin/linux/amd64/kubectl

11. 아래 chmod 명령을 실행하여 kubectl 바이너리를 실행 가능하게 만듭니다. chmod 명령은 파일 또는 디렉토리 액세스 권한을 변경하는 데 사용되는 Unix 및 Linux 명령입니다. Linux chmod 명령은 8진법을 사용하여 각 사용자의 권한을 지정합니다. 이제 Kubectl을 로컬 컴퓨터에서 사용할 수 있습니다.

chmod +x ./kubectl

12. 아래 명령을 실행하여 $HOME/bin 폴더에 kubectl 디렉터리를 만들고 kubectl 바이너리를 여기에 복사합니다. mkdir -p $HOME/bin 명령은 홈 디렉토리 내에 bin 하위 디렉토리를 만듭니다. mkdir 명령은 새 디렉토리 또는 폴더를 만드는 데 사용됩니다. -p 옵션은 mkdir 명령에 새 디렉토리에 필요한 상위 디렉토리를 자동으로 생성하도록 지시합니다. $HOME/bin은 홈 디렉토리 경로를 저장하는 환경 변수입니다. 모든 Linux 사용자는 파일 시스템에 $HOME/bin 디렉토리를 가지고 있습니다. && 구문을 논리 AND 연산자라고 합니다. 둘 이상의 명령을 한 번에 실행할 수 있도록 명령을 함께 그룹화하는 데 사용됩니다. && 구성은 이 명령이 작동하는 데 필요하지 않지만 모범 사례로 존재합니다.

cp ./kubectl $HOME/bin/kubectl 명령은 로컬 kubectl 바이너리 파일을 kubectl 디렉토리에 복사하고 파일 이름을 kubectl로 바꿉니다. 마지막으로 내보내기 명령은 말 그대로 수행합니다. 환경 변수를 이 셸에서 실행되는 모든 프로그램에서 사용할 수 있도록 셸 메모리로 내보냅니다. 우리의 경우 kubectl 바이너리를 찾을 수 있도록 kubectl 디렉터리의 위치를 kubectl에 알려야 합니다.

mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin

13. 아래의 kubectl version 명령을 실행하여 kubectl이 올바르게 설치되었는지 확인합니다. kubectl version --short --client 명령은 올바른 형식의 사람이 읽을 수 있는 Kubernetes REST API 응답으로 kubectl 버전의 단축 버전을 출력합니다. --client 옵션을 사용하면 kubectl이 Kubernetes REST API 응답의 형식화된 버전을 인쇄할 수 있으며 이는 버전 간에 일관됩니다.

--short 옵션은 kubectl에게 float에 대한 소수점 한 자리와 --format과 동일한 축약된 시간 형식이 포함된 간단한 형식으로 기본 정보를 제공하도록 지시합니다. 아래와 같은 출력이 표시되어야 합니다. 이 출력은 kubectl을 성공적으로 설치했으며 올바른 버전을 사용하고 있음을 알려줍니다.

이 섹션에서 마지막으로 해야 할 일은 Amazon EKS 클러스터를 사용하도록 eksctl cli 도구를 구성하는 것입니다. eksctl cli 도구는 Amazon EKS 클러스터를 관리할 수 있는 명령줄 인터페이스입니다. 클러스터 자격 증명을 생성하고, 클러스터 사양을 업데이트하고, 작업자 노드를 생성 또는 삭제하고, 기타 많은 작업을 수행할 수 있습니다.

14. 다음 명령을 실행하여 eksctl cli 도구를 설치하고 해당 버전을 확인합니다.

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
eksctl version

EKS 클러스터 프로비저닝

이제 EC2 및 AWS CLI 도구가 있으므로 첫 번째 EKS 클러스터를 프로비저닝할 수 있습니다.

1. 아래 eksctl create cluster 명령을 실행하여 하나의 마스터 노드와 3개의 코어 노드가 있는 us-east-1 리전에서 dev라는 클러스터를 프로비저닝합니다.

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

eksctl create cluster 명령은 이 특정 구성에 대해 Amazon에서 권장하는 기본값을 사용하여 us-east-1 리전에 EKS 클러스터를 생성하고 이에 따라 모든 인수를 따옴표( " ) 또는 변수( &#36 { } )로 전달합니다.

name 매개변수는 이 EKS 클러스터의 이름을 정의하는 데 사용되며 편의를 위한 친숙한 레이블입니다. version은 클러스터에서 사용하려는 버전입니다. 이 예에서는 Kubernetes v1.21.2를 고수하지만 다른 옵션도 자유롭게 탐색할 수 있습니다.

nodegroup-name은 이 클러스터가 작업자 노드를 관리하는 데 사용해야 하는 노드 그룹의 이름입니다. 이 예에서는 단순하게 유지하고 표준 작업자만 사용합니다. 즉, 작업자 노드에는 기본적으로 vCPU 1개와 메모리 3GB가 있습니다.

nodes는 클러스터에서 원하는 총 핵심 작업자 노드 수입니다. 이 예에서는 세 개의 노드가 요청됩니다. nodes-min 및 nodes-max는 클러스터에서 허용되는 최소 및 최대 노드 수를 제어합니다. 이 예에서는 하나 이상 4개 이하의 작업자 노드가 생성됩니다.

2. CloudFormation 콘솔로 이동하여 프로비저닝 진행 상황을 모니터링할 수 있습니다.

아래와 같이 개발 스택이 생성되고 있는 것을 확인할 수 있습니다.

3. 개발 스택 하이퍼링크 > 이벤트를 클릭합니다. 생성 프로세스와 관련된 이벤트 목록이 표시됩니다. 프로비저닝 프로세스가 완료될 때까지 기다렸다가(특정 상황에 따라 최대 15분이 소요될 수 있음) CloudFormation 콘솔에서 스택 상태를 확인하십시오.

4. 스택이 프로비저닝을 완료할 때까지 기다린 후 CloudFormation 콘솔로 이동하면 개발 스택 상태가 CREATE_COMPLETE로 표시됩니다.

이제 EC2 콘솔로 이동합니다. EC2 대시보드에 하나의 마스터 노드와 세 개의 코어 노드가 표시됩니다. 이 출력은 EKS 클러스터가 성공적으로 설정되었음을 확인합니다.

5. 아래 eksctl 명령을 실행하여 클러스터 ID 및 지역과 같은 dev 클러스터의 세부 정보를 가져옵니다.

eksctl get cluster

6. 아래의 aws eks update 명령을 실행하여 원격 작업자 노드 자격 증명을 가져옵니다. 이 명령은 클러스터에 연결하려는 모든 컴퓨터에서 실행해야 합니다. AWS 액세스 액세스 키를 사용하지 않고 원격으로 EKS Kubernetes 클러스터에 액세스하기 위해 kubectl에 대한 자격 증명을 다운로드합니다.

aws eks update-kubeconfig --name dev --region us-east-1

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

이제 EKS 클러스터가 프로비저닝되었습니다. EKS 클러스터에 첫 번째 애플리케이션을 배포할 수 있습니다. 이 섹션에서는 로드 밸런서와 함께 nginx 웹 서버를 샘플 애플리케이션으로 배포하는 방법을 알아봅니다.

1. 아래 명령을 실행하여 시스템에 git을 설치합니다. GitHub에서 nginx 웹 서버 코드를 복제하려면 git이 필요합니다.

sudo yum install -y git 

2. 아래의 git clone 명령을 실행하여 github에서 현재 디렉터리로 nginx 웹 서버 코드를 복제합니다.

git clone https://github.com/ata-aws-iam/htf-elk.git

3. cd htf-elk 명령을 실행하여 작업 디렉터리를 nginx 구성 파일 디렉터리로 변경합니다.

cd htf-elk

4. ls 명령을 실행하여 현재 디렉터리에 있는 파일을 나열합니다.

ls

nginx 디렉토리에 다음 파일이 표시됩니다.

5. 아래 cat 명령을 실행하여 nginx-deployment.yaml 파일을 열면 해당 파일에 다음 내용이 표시됩니다.

cat nginx-deployment.yaml

  • apiVersion: apps/v1은 핵심 Kubernetes API입니다.\n
  • 종류: 배포는 이 파일에 대해 생성될 리소스 종류입니다. 배포에서 포드는 컨테이너별로 생성됩니다.
  • metadata: 개체를 만들 때 사용할 메타데이터 값을 지정합니다.\n
  • 이름: nginx-deployment는 이 배포의 이름 또는 레이블입니다. 값이 없으면 배포 이름은 디렉터리 이름에서 가져옵니다.
  • 레이블: 애플리케이션에 대한 레이블을 제공합니다. 이 경우 ELB(Elastic Load Balancing)를 통한 서비스 라우팅에 사용됩니다.\n
  • env: dev는 문자열 값으로 정의되는 환경 변수를 설명합니다. 이것이 컨테이너에 동적 구성 데이터를 제공하는 방법입니다.\n
  • 사양: 생성할 복제본 수를 정의하는 곳입니다. 각 복제본의 기반이 될 속성을 지정할 수 있습니다.\n
  • replicas: 3은 클러스터에서 이 포드의 복제본 3개를 생성합니다. 레이블 선택기와 일치하는 사용 가능한 작업자 노드에 배포됩니다.\n
  • containerPort: 80은 컨테이너의 포트를 호스트의 포트에 매핑합니다. 이 경우 컨테이너의 포트 80을 로컬 시스템의 포트 30000에 매핑합니다.\n

6. 아래 cat 명령어를 실행하여 nginx-svc.yaml 서비스 파일을 엽니다. 해당 파일에 다음 내용이 표시됩니다.

cat nginx-svc.yaml

7. 아래 kubectl apply 명령을 실행하여 Kubernetes 클러스터에서 nginx 서비스를 생성합니다. EKS 클러스터가 이 서비스에 대해 ELB를 프로비저닝하는 데 몇 분 정도 걸립니다.

kubectl apply -f ./nginx-svc.yaml

8. 아래 kubectl get 서비스를 실행하여 방금 생성한 nginx 서비스에 대한 세부 정보를 가져옵니다.

kubectl get service

다음과 같은 결과가 표시됩니다. ClusterIP는 이 서비스에 할당된 내부 kubernetes IP입니다. LoadBalancer ELB 이름은 이 서비스의 고유 식별자입니다. AWS에서 자동으로 ELB를 생성하고 웹 브라우저(도메인 이름) 또는 API 클라이언트와 같은 선택한 서비스에서 도달할 수 있는 이 서비스에 대한 퍼블릭 엔드포인트를 프로비저닝합니다. 선택한 IP 주소를 통해 액세스할 수 있습니다.

이름이 a6f8c3cf0fe3a468d8828db6059ef05e-953361268.us-east-1.elb.amazonaws.com인 로드 밸런서 ELB에는 컨테이너 포트 80에 매핑될 포트 32406이 있습니다. 출력에서 로드 밸런서 ELB의 DNS 호스트 이름을 기록하십시오. 나중에 서비스에 액세스하려면 필요합니다.

9. 아래 kubectl apply 명령을 실행하여 클러스터에 대한 배포를 적용합니다.

kubectl apply -f ./nginx-deployment.yaml

10. kubectl get deployment를 실행하여 방금 생성한 nginx 배포에 대한 세부 정보를 가져옵니다.

kubectl get deployment

11. 아래 명령을 실행하여 로드 밸런서를 통해 nginx 애플리케이션에 액세스합니다. 터미널/콘솔에 nginx의 시작 페이지가 표시되어 nginx 애플리케이션이 예상대로 작동하는지 확인합니다. 을 위에서 기록한 로드 밸런서의 DNS 호스트 이름으로 바꿉니다.

curl "<LOAD_BALANCER_DNS_HOSTNAME>"

12. 로드 밸런서 DNS 호스트 이름을 복사하여 브라우저에 붙여넣어 브라우저를 통해 nginx 애플리케이션에 액세스할 수도 있습니다.

클러스터의 고가용성(HA) 기능 확인

이제 클러스터를 성공적으로 만들었으므로 HA 기능을 테스트하여 예상대로 작동하는지 확인할 수 있습니다.

Kubernetes는 복제된 포드 또는 서비스를 구축하고 관리하기 위해 함께 작동하는 특수 컨트롤러를 사용하여 다중 노드 배포를 지원합니다. 이러한 컨트롤러 중 일부는 Deployments, ReplicationController, Job 및 DaemonSet입니다.

배포 컨트롤러는 포드 또는 서비스 수준에서 복제를 제어하는 데 사용됩니다. 포드에 리소스가 부족하면 해당 복제 컨트롤러의 모든 포드(마스터 노드에서 실행 중인 포드 제외)를 삭제하고 이 포드의 새 복제본을 생성합니다. 이렇게 하면 애플리케이션 전체에서 매우 높은 가동 시간을 얻을 수 있습니다.

1. EC2 대시보드로 이동하여 3개의 작업자 노드를 모두 중지합니다.

2. 아래 명령을 실행하여 Pod의 상태를 확인합니다. 모든 팟(Pod)에 대해 종료 중, 실행 중 및 보류 중이라는 다양한 상태가 표시됩니다. 모든 작업자 노드를 중지하면 EKS가 모든 작업자 노드와 pod를 다시 시작하려고 시도하기 때문입니다. 나이(50대)로 식별할 수 있는 새 노드도 볼 수 있습니다.

kubectl get pod

새 EC2 인스턴스와 포드를 부팅하는 데 약간의 시간이 걸립니다. 모든 작업자 노드가 부팅되면 모든 새 EC2 인스턴스가 실행 중 상태로 돌아오는 것을 볼 수 있습니다.

3. kubectl get 서비스를 다시 실행합니다. ESK가 로드 밸런서를 위한 새로운 nginx 서비스와 새로운 DNS 이름을 생성하는 것을 볼 수 있습니다.

kubectl get service 

새 DNS를 복사하여 브라우저에 붙여넣습니다. Nginx 페이지에서 다시 환영 메시지를 받게 됩니다. 이 출력은 HA가 의도한 대로 작동하는지 확인합니다.

결론

이 문서에서는 EKS 클러스터를 설정하는 방법을 배웠습니다. 또한 모든 작업자 노드를 중지하고 팟(Pod)의 상태를 확인하여 고가용성 기능이 작동하는지 확인했습니다. 이제 kubectl을 사용하여 EKS 클러스터를 생성하고 관리할 수 있습니다.