Amazon S3 に Helm v3 チャートリポジトリを設定する - AWS 規範ガイダンス

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

Amazon S3 に Helm v3 チャートリポジトリを設定する

作成者: Abhishek Sharma (AWS)

環境:PoC またはパイロット

テクノロジー: DevOps、コンテナとマイクロサービス、モダナイゼーション

ワークロード:その他すべてのワークロード

AWS サービス: Amazon S3

[概要]

このパターンは、Helm v3 レポジトリを Amazon Web Services (AWS) クラウド上の Amazon Simple Storage Service (Amazon S3) に統合することで、Helm v3 チャートの効率的な管理をサポートしています。このパターンを使用するには、Kubernetes に加え、Kubernetes のパッケージマネージャーである Helm に精通している必要があります。Helm リポジトリでチャートを保存し、チャートのバージョンを管理することで、システム停止時の平均復旧時間 (MTTR) を改善できます。 

このパターンでは、AWS CodeCommit for Helm リポジトリの作成に AWS を使用し、S3 バケットを Helm チャートリポジトリとして使用して、組織全体のデベロッパーがチャートを一元管理してアクセスできるようにします。

前提条件と制限

前提条件

  • アクティブなAWS アカウント

  • Python バージョン 2.7.12 以降

  • pip

  • サブネットと Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを備えた仮想プライベートクラウド (VPC) 

  • EC2 インスタンスに Git をインストールします。

  • S3 バケットを作成するための AWS Identity and Access Management (IAM) アクセス

  • クライアントマシンから Amazon S3 への IAM (プログラミングまたはロール)アクセス

  • AWS CodeCommit リポジトリ

  • AWS コマンドラインインターフェイス (AWS CLI)

製品バージョン

  • Helm v3

  • Python バージョン 2.7.12 以降

アーキテクチャ

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

  • Amazon S3

  • AWS CodeCommit

  • Helm

  • Kubectl

  • Python と pip

  • Git

  • helm-s3 プラグイン

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

の Helm リポジトリ CodeCommit、Amazon S3 の Helm、Git、Helm-s3、Helm チャートを含む EC2 インスタンス。 Amazon S3

自動化とスケール

  • Helm を既存の継続的な統合/継続的な配信 (CI/CD) 自動化ツールに組み込み、Helm チャートのパッケージングとバージョン管理を自動化できます (このパターンの対象外です)。

  • GitVersion または Jenkins のビルド番号を使用して、グラフのバージョン管理を自動化できます。

ツール

  • Helm – Helm は、Kubernetes クラスター上でアプリケーションをインストールおよび管理するのに役立つ Kubernetes のパッケージマネージャです。

  • Amazon S3」— Amazon Simple Storage Service (Amazon S3)は、インターネット用のストレージです。Simple Storage Service (Amazon S3) を使用すると、いつでもウェブ上の任意の場所から任意の量のデータを保存および取得できます。

  • helm-s3 プラグイン — helm-s3 プラグインは Amazon S3 とのやり取りをサポートします。Helm v2 と Helm v3 を併用できます。

ベストプラクティス

< 作成者がこれらのメモを削除: ユーザーがこのパターンをより効果的に実装するのに役立つガイドラインと推奨事項のリストを提供してください。 >

エピック

タスク説明必要なスキル

Helm v3 クライアントをインストールします。

Helm クライアントをローカルシステムにダウンロードしてインストールするには、sudo curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash コマンドを実行します。

クラウド管理者、 DevOps エンジニア

インストールを検証します。

helm version --short コマンドを実行して Helm クライアントを検証します。

クラウド管理者、 DevOps エンジニア
タスク説明必要なスキル

Helm チャート用の S3 バケットを作成します。 

独自の S3 バケットを作成します。バケットに stable/myapp という名前のフォルダを作成します。このパターンの例では、s3://my-helm-charts/stable/myapp をターゲットチャートリポジトリとして使用しています。

クラウド管理者、 DevOps エンジニア

Amazon S3 用の helm-s3 プラグインをインストールします。

クライアントマシンに helm-s3 プラグインをインストールするには、helm plugin install https://github.com/hypnoglow/helm-s3.git コマンドを実行します。

クラウド管理者、 DevOps エンジニア

Amazon S3 Helm リポジトリを初期化します。 

ターゲットフォルダを Helm レポジトリとして初期化するには、helm s3 init s3://my-helm-charts/stable/myapp コマンドを使用します。 

このコマンドは、index.yaml ターゲット内にファイルを作成し、保存されているすべてのチャート情報を追跡します。

クラウド管理者、 DevOps エンジニア

新しく作成した Helm リポジトリを検証します。 

index.yaml ファイルが正常に作成されたことを確認するには、aws s3 ls s3://my-helm-charts/stable/myapp/ コマンドを実行します。

クラウド管理者、 DevOps エンジニア

Amazon S3 リポジトリをクライアントマシンの Helm に追加します。

ターゲットリポジトリのエイリアスを Helm クライアントマシンに追加するには、helm repo add stable-myapp s3://my-helm-charts/stable/myapp/ コマンドを使用します。

クラウド管理者、 DevOps エンジニア
タスク説明必要なスキル

Helm チャートのクローンを作成します。

CodeCommit リポジトリにローカル Helm チャートが存在しない場合は、次のコマンドを実行して GitHub リポジトリからそれらをクローンします。 git clone <url_of_your_helm_source_code>.git

クラウド管理者、 DevOps エンジニア

Helm チャートをパッケージ化します。

作成またはクローンしたチャートをパッケージ化するには、helm package ./my-app コマンドを使用します。 

例として、このパターンでは my-app チャートを使用しています。このコマンドは、my-app チャートフォルダのすべてのコンテンツを、Chart.yaml ファイルに記載されているバージョン番号で名前が付けられたアーカイブファイルにパッケージ化します。

クラウド管理者、 DevOps エンジニア

ローカルパッケージを Amazon S3 Helm リポジトリに保存します。 

ローカルパッケージを Amazon S3 の Helm レポジトリにアップロードするには、helm s3 push ./my-app-0.1.0.tgz stable-myapp コマンドを実行します。

コマンドでは、my-app はグラフのフォルダ名、0.1.0Chart.yaml に記載されているチャートのバージョン、stable-myapp はターゲットリポジトリのエイリアスです。

クラウド管理者、 DevOps エンジニア

Helm チャートを検索します。

チャートがローカルと Amazon S3 Helm リポジトリの両方に表示されることを確認するには、helm search repo stable-myapp コマンドを実行します。

クラウド管理者、 DevOps エンジニア
タスク説明必要なスキル

チャートを変更してパッケージ化します。 

values.yaml で、replicaCount の値を 1 に設定し、次にチャートをパッケージ化し、今度は Chart.yaml のバージョンを 0.1.1 に変更します。バージョン管理は、CI/CD パイプラインで GitVersion や Jenkins ビルド番号などのツールを使用して自動化することで実現するのが理想的です。バージョン番号の自動化は、このパターンの範囲外です。helm package ./my-app/ コマンドを実行して、このパッケージをインストールします。

クラウド管理者、 DevOps エンジニア

新しいバージョンを Amazon S3 の Helm リポジトリにプッシュします。 

新しいパッケージのバージョン 0.1.1 を Amazon S3 の my-helm-charts Helm リポジトリにプッシュするには、次のコマンドを実行します。 helm s3 push ./my-app-0.1.1.tgz stable-myapp

クラウド管理者、 DevOps エンジニア

Helm チャートを検証します。

チャートがローカルと Amazon S3 Helm リポジトリの両方に表示されることを確認するには、以下のコマンドを実行します。

helm repo update

helm search repo stable-myapp

クラウド管理者、 DevOps エンジニア
タスク説明必要なスキル

my-app チャートのすべてのバージョンを検索します。 

使用可能なすべてのバージョンのチャートを表示するには、--versions フラグを使用して helm search repo my-app --versions コマンドを実行します。 

フラグがない場合、Helm はデフォルトでアップロードされた最新バージョンのチャートを表示します。

DevOps エンジニア

Amazon S3 Helm リポジトリからチャートをインストールします。

自動インストールはこのパターンの対象外ですが、手動でインストールできます。前のタスクの検索結果には、my-app チャートの複数のバージョンが表示されます。Amazon S3 Helm リポジトリから新しいバージョン (0.1.1) をインストールするには、helm upgrade --install my-app-release stable-myapp/my-app --version 0.1.1 --namespace dev コマンドを使用します

DevOps エンジニア
タスク説明必要なスキル

特定のリビジョンの詳細を確認します。

自動ロールバックはこのパターンの対象外ですが、手動でロールバックできます。動作中のバージョンに切り替えたり、ロールバックしたりする前や、リビジョンをインストールする前に追加の検証を行う場合は、helm get values --revision=2 my-app-release コマンドを使用して各リビジョンに渡された値を確認してください。

DevOps エンジニア

以前のバージョンにロールバックします。

自動ロールバックはこのパターンの対象外です。以前のリビジョンに手動でロールバックするには、helm rollback my-app-release 1 コマンドを使用します。 

この例では、リビジョン番号 1 にロールバックしています。

DevOps エンジニア

関連リソース