

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

# Amazon EKS와 Amazon S3의 차트 Helm 리포지토리를 사용하여 Kubernetes 리소스 및 패키지 배포
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3"></a>

*Sagar Panigrahi, Amazon Web Services*

## 요약
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-summary"></a>

이 패턴은 복잡성과 관계없이 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 리포지토리로 사용하므로, 조직 전체의 개발자가 차트를 중앙에서 관리하고 액세스할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-prereqs"></a>

**사전 조건 **
+ 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

## 아키텍처
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-architecture"></a>

**대상 기술 스택**
+ Amazon EKS
+ Amazon VPC
+ Amazon S3
+ 소스 코드 관리
+ Helm
+ Kubectl

**대상 아키텍처 **

![\[Client Helm 및 Kubectl은 Amazon S3 for Amazon EKS 클러스터에 Helm 차트 리포지토리를 배포합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/d3f993e6-4d96-4cb9-a075-c4debe431fd7/images/2f09f7bb-440a-4c4b-b29f-08d136d1ada4.png)


 

**자동화 및 규모 조정**
+ AWS CloudFormation을 사용하면 클라우드 인프라 생성을 자동화할 수 있습니다. 자세한 내용은 Amazon EKS 설명서의 [AWS CloudFormation을 사용하여 Amazon EKS 리소스 생성](https://docs.aws.amazon.com/eks/latest/userguide/creating-resources-with-cloudformation.html)을 참조하세요.
+ Helm을 기존 CI/CD 자동화 도구에 통합하여 차트 Helm의 패키징 및 버전 관리를 자동화할 예정입니다(이 패턴의 범위를 벗어남).
+ GitVersion 또는 Jenkins 빌드 번호를 사용하여 차트 버전 관리를 자동화할 수 있습니다.

## 도구
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-tools"></a>

**도구**
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) – Amazon Elastic Kubernetes Service(Amazon EKS)는 자체 Kubernetes 컨트롤 플레인을 구축하거나 유지 관리할 필요 없이 AWS에서 Kubernetes를 실행하기 위한 관리형 서비스입니다. Kubernetes는 컨테이너화된 애플리케이션의 배포, 조정 및 관리 자동화를 위한 오픈 소스 시스템입니다.
+ [Helm](https://helm.sh/docs/) - Helm은 Kubernetes 클러스터에 애플리케이션을 설치하고 관리하는 데 도움이 되는 Kubernetes용 패키지 관리자입니다.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/gsg/GetStartedWithS3.html) – Amazon Simple Storage Service(S3)는 인터넷에 대한 스토리지입니다. Amazon S3를 사용하면 인터넷을 통해 언제 어디서든 원하는 양의 데이터를 저장하고 검색할 수 있습니다.
+ [Kubectl](https://kubernetes.io/docs/reference/kubectl/overview/) - Kubectl은 Kubernetes 클러스터에 대해 명령을 실행하기 위한 명령줄 유틸리티입니다.

**코드**

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

## 에픽
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-epics"></a>

### Helm 구성 및 초기화
<a name="configure-and-initialize-helm"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Helm 클라이언트를 설치합니다. | 로컬 시스템에 Helm 클라이언트를 다운로드하고 설치하려면 다음 명령을 사용하십시오. <pre>sudo curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash</pre> | DevOps 엔지니어 | 
| Helm 설치를 검사합니다. | Helm이 Amazon EKS 클러스터 내의 Kubernetes API 서버와 통신할 수 있는지 확인하려면 `helm version`을 실행하십시오. | DevOps 엔지니어 | 

### Amazon EKS 클러스터에 차트 Helm 생성 및 설치
<a name="create-and-install-a-helm-chart-in-the-amazon-eks-cluster"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| NGINX용 차트 Helm을 만드십시오. | 클라이언트 머신에 이름이 `my-nginx`로 지정된 차트 Helm을 만들려면 `helm create my-nginx`를 실행하십시오. | DevOps 엔지니어 | 
| 차트의 구조를 검토하십시오. | 차트의 구조를 검토하려면 `tree my-nginx/` 명령을 실행합니다. | DevOps 엔지니어 | 
| 차트에서 서비스 계정 생성을 비활성화합니다. | `values.yaml`의 `serviceAccount` 섹션 아래에서 `create` 키를 `false`로 설정합니다. 이 패턴에 대한 서비스 계정을 만들 필요가 없으므로 이 기능은 꺼져 있습니다. | DevOps 엔지니어 | 
| 수정된 차트에 구문 오류가 있는지 검증(린트)합니다. | 대상 클러스터에 차트를 설치하기 전에 차트에 구문 오류가 있는지 확인하려면 `helm lint my-nginx/`를 실행하십시오. | DevOps 엔지니어 | 
| 차트를 설치하여 Kubernetes 리소스를 배포합니다. | 다음 명령을 사용하여 차트 Helm 설치 관리자를 실행합니다. <pre>helm install --name my-nginx-release --debug my-nginx/ --namespace helm-space </pre>선택적 `debug` 플래그는 설치 중에 모든 디버그 메시지를 출력합니다. `namespace` 플래그는 이 차트의 리소스 부분이 생성될 네임스페이스를 지정합니다. | DevOps 엔지니어 | 
| Amazon EKS 클러스터에서 리소스를 검토하십시오. | `helm-space` 네임스페이스에서 차트 Helm의 일부로 생성된 리소스를 검토하려면 다음 명령을 사용하십시오. <pre>kubectl get all -n helm-space</pre> | DevOps 엔지니어 | 

### 이전 버전의 Kubernetes 애플리케이션으로 롤백
<a name="roll-back-to-a-previous-version-of-a-kubernetes-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 릴리스를 수정하고 업그레이드하십시오. | `values.yaml`의 차트를 수정하려면 `replicaCount` 값을 `2`로 변경합니다. 그런 다음 다음 명령을 실행하여 이미 설치된 릴리스를 업그레이드합니다.<pre>helm upgrade my-nginx-release my-nginx/ --namespace helm-space</pre> | DevOps 엔지니어 | 
| Helm 릴리스 기록을 검토하십시오. | Helm을 사용하여 설치한 특정 릴리스의 모든 수정 버전을 나열하려면 다음 명령을 실행하십시오. <pre>helm history my-nginx-release</pre> | DevOps 엔지니어 | 
| 특정 개정에 대한 세부 정보를 검토합니다. | 작동 버전으로 전환하거나 롤백하기 전에 그리고 수정 버전을 설치하기 전에 추가 검증 단계를 수행하려면 다음 명령을 사용하여 각 수정 버전에 전달된 값을 확인하십시오.<pre>helm get --revision=2 my-nginx-release</pre> | DevOps 엔지니어 | 
| 이전 버전으로 롤백합니다. | 이전 버전으로 롤백하려면 다음 명령을 사용합니다. <pre>helm rollback my-nginx-release 1 </pre>이 예제는 개정 번호 1로 롤백하는 것입니다. | DevOps 엔지니어 | 

### S3 버킷을 Helm 리포지토리로 초기화합니다.
<a name="initialize-an-s3-bucket-as-a-helm-repository"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 차트 Helm을 위한 S3 버킷을 생성합니다. | 고유한 S3 버킷을 생성합니다. 버킷에서 이름이 `charts`인 폴더를 생성합니다. 이 패턴의 예시는 `s3://my-helm-charts/charts`를 대상 차트 리포지토리로 사용합니다. | 클라우드 관리자 | 
| Amazon S3용 Helm 플러그인을 설치합니다. | Helm-s3 플러그인을 클라이언트 머신에 설치하려면 다음 명령을 사용합니다. <pre>helm plugin install https://github.com/hypnoglow/helm-s3.git --version 0.10.0</pre>참고: Helm V3 지원은 플러그인 버전 0.9.0 이상에서 사용할 수 있습니다. | DevOps 엔지니어 | 
| Amazon S3 Helm 리포지토리를 초기화합니다. | 대상 폴더를 Helm 리포지토리로 초기화하려면 다음 명령을 사용합니다. <pre>helm S3 init s3://my-helm-charts/charts </pre>이 명령은 대상에 `index.yaml` 파일을 생성하여 해당 위치에 저장된 모든 차트 정보를 추적합니다. | DevOps 엔지니어 | 
| Amazon S3 리포지토리를 Helm에 추가합니다. | 클라이언트 머신에서 리포지토리를 추가하려면 다음 명령을 사용합니다.<pre>helm repo add my-helm-charts s3://my-helm-charts/charts </pre>이 명령은 Helm 클라이언트 컴퓨터의 대상 리포지토리에 별칭을 추가합니다. | DevOps 엔지니어 | 
| 리포지토리 목록을 검토하십시오. | Helm 클라이언트 컴퓨터의 리포지토리 목록을 보려면 `helm repo list`를 실행하십시오. | DevOps 엔지니어 | 

### Amazon S3 Helm 리포지토리에 차트를 패키징하고 저장합니다.
<a name="package-and-store-charts-in-the-amazon-s3-helm-repository"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 차트를 패키징합니다. | 생성한 `my-nginx` 차트를 패키징하려면 `helm package ./my-nginx/`를 실행하십시오. 이 명령은 `my-nginx` 차트 폴더의 모든 내용을 아카이브 파일로 패키징하며, 아카이브 파일은 `Chart.yaml` 파일에 언급된 버전 번호를 사용하여 이름이 지정됩니다. | DevOps 엔지니어 | 
| Amazon S3 Helm 리포지토리에 패키지를 저장합니다. | Amazon S3의 Helm 리포지토리에 패키지를 업로드하려면 올바른 `.tgz` 파일 이름을 사용하여 다음 명령을 실행합니다.<pre>helm s3 push ./my-nginx-0.1.0.tgz my-helm-charts</pre> | DevOps 엔지니어 | 
| 차트 Helm을 검색하십시오. | 차트를 로컬에서 표시하고 Amazon S3의 Helm 리포지토리에서 모두 표시되는지 확인하려면 다음 명령을 실행합니다.<pre>helm search repo my-nginx</pre> | DevOps 엔지니어 | 

### 차트 수정, 버전 지정, 패키징
<a name="modify-version-and-package-a-chart"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 차트를 수정하고 패키징합니다. | `values.yaml`에서 `replicaCount`값을 `1`로 설정합니다. 그런 다음 `helm package ./my-nginx/`를 실행하여 차트를 패키징하며, 이번에는 `Chart.yaml`의 버전을 `0.1.1`로 변경합니다. 버전 관리는 CI/CD 파이프라인의 GitVersion 또는 Jenkins 빌드 번호와 같은 도구를 사용한 자동화를 통해 이상적으로 업데이트됩니다. 버전 번호 자동화는 이 패턴의 범위를 벗어납니다. | DevOps 엔지니어 | 
| Amazon S3의 Helm 리포지토리에 새 버전을 푸시합니다. | 0.1.1 버전의 새 패키지를 Amazon S3의 `my-helm-charts` Helm 리포지토리로 푸시하려면 다음 명령을 실행합니다.<pre>helm s3 push ./my-nginx-0.1.1.tgz my-helm-charts</pre> | DevOps 엔지니어 | 

### Amazon S3 Helm 리포지토리에서 차트 검색 및 설치
<a name="search-for-and-install-a-chart-from-the-amazon-s3-helm-repository"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| my-nginx 차트의 모든 버전을 검색하십시오. | 사용 가능한 차트 버전을 모두 보려면 `--versions` 플래그를 사용하여 다음 명령을 실행합니다.<pre>helm search repo my-nginx --versions</pre>플래그가 없는 경우 Helm은 기본적으로 가장 최근에 업로드된 차트 버전을 표시합니다. | DevOps 엔지니어 | 
| Amazon S3 Helm 리포지토리에서 차트를 설치하십시오. | 이전 작업의 검색 결과에는 `my-nginx` 차트의 여러 버전이 표시됩니다. Amazon S3 Helm 리포지토리에서 새 버전(0.1.1)을 설치하려면 다음 명령을 사용합니다.<pre>helm upgrade my-nginx-release my-helm-charts/my-nginx --version 0.1.1 --namespace helm-space</pre> | DevOps 엔지니어 | 

## 관련 리소스
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-resources"></a>
+ [HELM 설명서](https://helm.sh/docs/)
+ [helm-s3 플러그인(MIT 라이선스)](https://github.com/hypnoglow/helm-s3.git)
+ [Helm 클라이언트 바이너리](https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3)
+ [Amazon EKS 설명서](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)

## 첨부
<a name="attachments-d3f993e6-4d96-4cb9-a075-c4debe431fd7"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/d3f993e6-4d96-4cb9-a075-c4debe431fd7/attachments/attachment.zip) 파일의 압축을 풉니다.