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

前提条件と制限

前提条件

  • 仮想プライベートクラウド (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

アーキテクチャ

ターゲットテクノロジースタック

  • Amazon EKS

  • Amazon VPC

  • Amazon S3

  • ソースコードの編成

  • Helm

  • Kubectl

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

クライアント Helm と Kubectl は、Amazon EKS クラスターの Amazon S3 に Helm チャートリポジトリをデプロイします。

自動化とスケール

  • AWS を使用してインフラストラクチャの作成を自動化 CloudFormation できます。詳細については、Amazon EKS ドキュメントの「AWS を使用した Amazon EKS リソース CloudFormationの作成」を参照してください。

  • 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 (Amazon S3)は、インターネット用のストレージです。Simple Storage Service (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 エンジニア

変更したチャートに構文エラーがないか検証 (lint) する。

ターゲットクラスターにインストールする前に、チャートに構文エラーがないか検証するには、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.yamlreplicaCount 値を 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 パイプラインの GitVersion や Jenkins ビルド番号などのツールを使用して自動化することで更新するのが理想的です。バージョン番号の自動化は、このパターンの範囲外です。

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