

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 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 (Amazon S3) を Helm チャートリポジトリとして使用しているため、チャートを一元的に管理し、組織全体の開発者がアクセスできます。

## 前提条件と制限事項
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-prereqs"></a>

**前提条件**
+ 仮想プライベートクラウド (VPC) を使用するアクティブな Amazon Web Services (AWS) アカウント
+ Amazon EKS クラスター 
+ Amazon EKS クラスター内にセットアップされ、すぐにワークロードを処理できるワーカーノード
+ クライアントマシンのターゲットクラスターの Amazon EKS kubeconfig ファイルを設定するための Kubectl
+ バケットにアクセスするための 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

**ターゲットアーキテクチャ**

![\[クライアント Helm と Kubectl は、Amazon EKS クラスターの Amazon S3 に Helm チャートリポジトリをデプロイします。\]](http://docs.aws.amazon.com/ja_jp/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 (Amazon S3)は、インターネット用のストレージです。Simple Storage Service (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 エンジニア | 
| 変更したチャートに構文エラーがないか検証 (lint) する。 | ターゲットクラスターにインストールする前に、チャートに構文エラーがないか検証するには、`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>
+ 「[psql ドキュメント](https://helm.sh/docs/)」
+ [helm-s3 plugin (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)」