Amazon EKS와 Amazon S3의 차트 Helm 리포지토리를 사용하여 Kubernetes 리소스 및 패키지 배포 - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon EKS와 Amazon S3의 차트 Helm 리포지토리를 사용하여 Kubernetes 리소스 및 패키지 배포

작성자: Sagar Panigrahi(AWS)

환경: PoC 또는 파일럿

기술: 컨테이너 및 마이크로서비스, DevOps

AWS 서비스: Amazon EKS

요약

이 패턴은 복잡성과 관계없이 Kubernetes 애플리케이션을 효율적으로 관리하는 데 도움이 됩니다. 이 패턴은 Helm을 기존의 지속적 통합 및 지속적 전달(CI/CD) 파이프라인에 통합하여 Kubernetes 클러스터에 애플리케이션을 배포합니다. Helm은 Kubernetes 애플리케이션을 관리하는데 도움이 되는 Kubernetes 패키지 관리자입니다. 차트 Helm은 복잡한 Kubernetes 애플리케이션을 정의, 설치 및 업그레이드하는 데 도움이 됩니다. 차트를 버전화하여 Helm 리포지토리에 저장할 수 있어 정전 시 평균 복원 시간(MTTR)을 개선할 수 있습니다. 

이 패턴은 Kubernetes 클러스터에 대해 Amazon Elastic Kubernetes Service(Amazon EKS)를 사용합니다. Amazon Simple Storage Service(S3)를 차트 Helm 리포지토리로 사용하므로, 조직 전체의 개발자가 차트를 중앙에서 관리하고 액세스할 수 있습니다.

사전 조건 및 제한 사항

사전 조건

  • Virtual Private Cloud(VPC)가 있는 활성 Amazon Web Services(AWS) 계정

  • Amazon EKS 클러스터 

  • Amazon EKS 클러스터 내에 설정되고 워크로드를 처리할 준비가 된 작업자 노드

  • 클라이언트 머신의 대상 클러스터에 대해 Amazon EKS kubeconfig 파일을 구성하기 위한 Kubectl

  • S3 버킷을 생성하기 위한 AWS Identity and Access Management(IAM) 액세스

  • 클라이언트 머신에서 Amazon S3에 대한 IAM(프로그래밍 방식 또는 역할) 액세스

  • 소스 코드 관리 및 CI/CD 파이프라인

제한 사항

  • 현재 사용자 지정 리소스 정의(CRD)의 업그레이드, 삭제 또는 관리는 지원되지 않습니다.

  • CRD를 참조하는 리소스를 사용하는 경우 CRD를 별도로(차트 외부에) 설치해야 합니다.

제품 버전

  • Helm v3.6.3

아키텍처

대상 기술 스택

  • Amazon EKS

  • Amazon VPC

  • Amazon S3

  • 소스 코드 관리

  • Helm

  • Kubectl

대상 아키텍처 

클라이언트, 외부 리포지토리, Amazon S3의 헬름 차트 리포지토리, EKS 컨트롤 플레인 및 EKS 데이터 플레인이 있는 VPC를 포함하는 아키텍처.

자동화 및 규모 조정

  • AWS를 사용하여 인프라 생성을 자동화할 CloudFormation 수 있습니다. 자세한 내용은 Amazon EKS CloudFormation 설명서에서 AWS를 사용하여 Amazon EKS 리소스 생성을 참조하십시오.

  • Helm을 기존 CI/CD 자동화 도구에 통합하여 차트 Helm의 패키징 및 버전 관리를 자동화할 예정입니다(이 패턴의 범위를 벗어남).

  • GitVersion 또는 Jenkins 빌드 번호를 사용하여 차트 버전 관리를 자동화할 수 있습니다.

도구

도구

  • Amazon EKS – Amazon Elastic Kubernetes Service(Amazon EKS)는 자체 Kubernetes 컨트롤 플레인을 구축하거나 유지 관리할 필요 없이 AWS에서 Kubernetes를 실행하기 위한 관리형 서비스입니다. Kubernetes는 컨테이너화된 애플리케이션의 배포, 조정 및 관리 자동화를 위한 오픈 소스 시스템입니다.

  • Helm - Helm은 Kubernetes 클러스터에 애플리케이션을 설치하고 관리하는 데 도움이 되는 Kubernetes용 패키지 관리자입니다.

  • Amazon S3 – Amazon Simple Storage Service(S3)는 인터넷에 대한 스토리지입니다. Amazon S3를 사용하면 인터넷을 통해 언제 어디서든 원하는 양의 데이터를 저장하고 검색할 수 있습니다.

  • Kubectl - Kubectl은 Kubernetes 클러스터에 대해 명령을 실행하기 위한 명령줄 유틸리티입니다.

코드

예제 코드가 첨부되어 있습니다.

에픽

작업설명필요한 기술

Helm 클라이언트를 설치합니다.

로컬 시스템에 Helm 클라이언트를 다운로드하고 설치하려면 다음 명령을 사용하십시오. 

sudo curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
DevOps 엔지니어

Helm 설치를 검사합니다.

Helm이 Amazon EKS 클러스터 내의 Kubernetes API 서버와 통신할 수 있는지 확인하려면 helm version을 실행하십시오.

DevOps 엔지니어
작업설명필요한 기술

NGINX용 차트 Helm을 만드십시오.

클라이언트 머신에 이름이 my-nginx로 지정된 차트 Helm을 만들려면 helm create my-nginx를 실행하십시오.

DevOps 엔지니어

차트의 구조를 검토하십시오.

차트의 구조를 검토하려면 tree my-nginx/ 명령을 실행합니다.

DevOps 엔지니어

차트에서 서비스 계정 생성을 비활성화합니다.

values.yamlserviceAccount 섹션 아래에서 create 키를 false로 설정합니다. 이 패턴에 대한 서비스 계정을 만들 필요가 없으므로 이 기능은 꺼져 있습니다.

DevOps 엔지니어

수정된 차트에 구문 오류가 있는지 검증(린트)합니다.

대상 클러스터에 차트를 설치하기 전에 차트에 구문 오류가 있는지 확인하려면 helm lint my-nginx/를 실행하십시오.

DevOps 엔지니어

차트를 설치하여 Kubernetes 리소스를 배포합니다.

다음 명령을 사용하여 차트 Helm 설치 관리자를 실행합니다. 

helm install --name my-nginx-release --debug my-nginx/ --namespace helm-space

선택적 debug 플래그는 설치 중에 모든 디버그 메시지를 출력합니다. namespace 플래그는 이 차트의 리소스 부분이 생성될 네임스페이스를 지정합니다.

DevOps 엔지니어

Amazon EKS 클러스터에서 리소스를 검토하십시오.

helm-space 네임스페이스에서 차트 Helm의 일부로 생성된 리소스를 검토하려면 다음 명령을 사용하십시오. 

kubectl get all -n helm-space
DevOps 엔지니어
작업설명필요한 기술

릴리스를 수정하고 업그레이드하십시오.

values.yaml의 차트를 수정하려면 replicaCount 값을 2로 변경합니다. 그런 다음 다음 명령을 실행하여 이미 설치된 릴리스를 업그레이드합니다.

helm upgrade my-nginx-release my-nginx/ --namespace helm-space
DevOps 엔지니어

Helm 릴리스 기록을 검토하십시오.

Helm을 사용하여 설치한 특정 릴리스의 모든 수정 버전을 나열하려면 다음 명령을 실행하십시오. 

helm history my-nginx-release
DevOps 엔지니어

특정 개정에 대한 세부 정보를 검토합니다.

작동 버전으로 전환하거나 롤백하기 전에 그리고 수정 버전을 설치하기 전에 추가 검증 단계를 수행하려면 다음 명령을 사용하여 각 수정 버전에 전달된 값을 확인하십시오.

helm get --revision=2 my-nginx-release
DevOps 엔지니어

이전 버전으로 롤백합니다.

이전 버전으로 롤백하려면 다음 명령을 사용합니다. 

helm rollback my-nginx-release 1

이 예제는 개정 번호 1로 롤백하는 것입니다.

DevOps 엔지니어
작업설명필요한 기술

차트 Helm을 위한 S3 버킷을 생성합니다.

고유한 S3 버킷을 생성합니다. 버킷에서 이름이 charts인 폴더를 생성합니다. 이 패턴의 예시는 s3://my-helm-charts/charts를 대상 차트 리포지토리로 사용합니다.

클라우드 관리자

Amazon S3용 Helm 플러그인을 설치합니다.

Helm-s3 플러그인을 클라이언트 머신에 설치하려면 다음 명령을 사용합니다. 

helm plugin install https://github.com/hypnoglow/helm-s3.git --version 0.10.0

참고: Helm V3 지원은 플러그인 버전 0.9.0 이상에서 사용할 수 있습니다.

DevOps 엔지니어

Amazon S3 Helm 리포지토리를 초기화합니다.

대상 폴더를 Helm 리포지토리로 초기화하려면 다음 명령을 사용합니다. 

helm S3 init s3://my-helm-charts/charts

이 명령은 대상에 index.yaml 파일을 생성하여 해당 위치에 저장된 모든 차트 정보를 추적합니다.

DevOps 엔지니어

Amazon S3 리포지토리를 Helm에 추가합니다.

클라이언트 머신에서 리포지토리를 추가하려면 다음 명령을 사용합니다.

helm repo add my-helm-charts s3://my-helm-charts/charts

이 명령은 Helm 클라이언트 컴퓨터의 대상 리포지토리에 별칭을 추가합니다.

DevOps 엔지니어

리포지토리 목록을 검토하십시오.

Helm 클라이언트 컴퓨터의 리포지토리 목록을 보려면 helm repo list를 실행하십시오.

DevOps 엔지니어
작업설명필요한 기술

차트를 패키징합니다.

생성한 my-nginx 차트를 패키징하려면 helm package ./my-nginx/를 실행하십시오. 이 명령은 my-nginx 차트 폴더의 모든 내용을 아카이브 파일로 패키징하며, 아카이브 파일은 Chart.yaml 파일에 언급된 버전 번호를 사용하여 이름이 지정됩니다.

DevOps 엔지니어

Amazon S3 Helm 리포지토리에 패키지를 저장합니다.

Amazon S3의 Helm 리포지토리에 패키지를 업로드하려면 올바른 .tgz 파일 이름을 사용하여 다음 명령을 실행합니다.

helm s3 push ./my-nginx-0.1.0.tgz my-helm-charts
DevOps 엔지니어

차트 Helm을 검색하십시오.

차트를 로컬에서 표시하고 Amazon S3의 Helm 리포지토리에서 모두 표시되는지 확인하려면 다음 명령을 실행합니다.

helm search repo my-nginx
DevOps 엔지니어
작업설명필요한 기술

차트를 수정하고 패키징합니다.

values.yaml에서 replicaCount값을 1로 설정합니다. 그런 다음 helm package ./my-nginx/를 실행하여 차트를 패키징하며, 이번에는 Chart.yaml의 버전을 0.1.1로 변경합니다. 

버전 관리는 CI/CD 파이프라인의 Jenkins 빌드 번호와 같은 GitVersion 도구를 사용한 자동화를 통해 업데이트되는 것이 이상적입니다. 버전 번호 자동화는 이 패턴의 범위를 벗어납니다.

DevOps 엔지니어

Amazon S3의 Helm 리포지토리에 새 버전을 푸시합니다.

0.1.1 버전의 새 패키지를 Amazon S3의 my-helm-charts Helm 리포지토리로 푸시하려면 다음 명령을 실행합니다.

helm s3 push ./my-nginx-0.1.1.tgz my-helm-charts
DevOps 엔지니어
작업설명필요한 기술

my-nginx 차트의 모든 버전을 검색하십시오.

사용 가능한 차트 버전을 모두 보려면 --versions 플래그를 사용하여 다음 명령을 실행합니다.

helm search repo my-nginx --versions

플래그가 없는 경우 Helm은 기본적으로 가장 최근에 업로드된 차트 버전을 표시합니다.

DevOps 엔지니어

Amazon S3 Helm 리포지토리에서 차트를 설치하십시오.

이전 작업의 검색 결과에는 my-nginx 차트의 여러 버전이 표시됩니다. Amazon S3 Helm 리포지토리에서 새 버전(0.1.1)을 설치하려면 다음 명령을 사용합니다.

helm upgrade my-nginx-release my-helm-charts/my-nginx --version 0.1.1 --namespace helm-space
DevOps 엔지니어

관련 리소스

첨부

이 문서와 관련된 추가 콘텐츠에 액세스하려면 attachment.zip 파일의 압축을 풉니다.