Helm は、Kubernetes アプリケーションのライフサイクルをインストールおよび管理するのに役立つオープン ソースのパッケージ化ツールです。 APT や Yum などの Linux パッケージ マネージャーと同様に、Helm を使用すると、構成済みの Kubernetes リソースのパッケージである Kubernetes チャートが管理されます。
このクイックスタートでは、Helm を使用して、AKS でアプリケーションをパッケージ化して実行します。 Helm を使った既存のアプリケーションのインストールについては、AKS での Helm を使用した既存のアプリケーションのインストールに関する記事をご覧ください。
前提条件
- Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、無料のアカウントを作成できます。
- Azure CLI または Azure PowerShell がインストールされている。
- Helm v3 がインストールされていること。
Azure Container Registry を作成する
Helm を使って AKS クラスターでアプリケーションを実行するには、コンテナー イメージを Azure Container Registry (ACR) に格納する必要があります。 レジストリの名前は Azure 内で一意でなければならず、英数字で 5 から 50 文字にする必要があります。 小文字のみを使用できます。 Basic SKU は、ストレージとスループットのバランスが取れた、開発目的のコスト最適化されたエントリ ポイントです。
az group create コマンドを使って Azure リソース グループを作成します。 次の例では、myResourceGroup という名前のリソース グループを eastus に作成します。
az group create --name myResourceGroup --location eastusaz acr create コマンドを呼び出して、一意の名前の Azure Container Registry を作成します。 次の例では、Basic SKU を使って myhelmacr という名前の ACR を作成します。
az acr create --resource-group myResourceGroup --name myhelmacr --sku Basic出力は、次の要約された出力例のようになります。 後の手順で使うため、ACR に対する loginServer の値を記録しておきます。
{ "adminUserEnabled": false, "creationDate": "2023-12-26T22:36:23.998425+00:00", "id": "/subscriptions/<ID>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/myhelmacr", "location": "eastus", "loginServer": "myhelmacr.azurecr.io", "name": "myhelmacr", "networkRuleSet": null, "provisioningState": "Succeeded", "resourceGroup": "myResourceGroup", "sku": { "name": "Basic", "tier": "Basic" }, "status": null, "storageAccount": null, "tags": {}, "type": "Microsoft.ContainerRegistry/registries" }
AKS クラスターを作成する
新しい AKS クラスターでは、お使いの ACR にアクセスしてコンテナー イメージをプルして実行する必要があります。
az aks create コマンドと
--attach-acrパラメーターを使って AKS クラスターを作成し、クラスターに ACR へのアクセスを許可します。 次の例では、myAKSCluster という名前の AKS クラスターを作成し、myhelmacr ACR へのアクセスを許可します。myhelmacrはお使いの ACR インスタンスの名前に置き換えてください。az aks create --resource-group myResourceGroup --name myAKSCluster --location eastus --attach-acr myhelmacr --generate-ssh-keys
ご利用の AKS クラスターに接続する
ローカル環境の Kubernetes クラスターに接続するには、Kubernetes のコマンド ライン クライアントである kubectl を使います。 Azure Cloud Shell を使用している場合、kubectl は既にインストールされています。
サンプル アプリケーションのダウンロード
このクイックスタートでは、Azure Vote アプリケーションを使用します。
git cloneコマンドを使って、GitHub からアプリケーションをクローンします。git clone https://github.com/Azure-Samples/azure-voting-app-redis.gitazure-voteコマンドを使って、cdディレクトリに移動します。cd azure-voting-app-redis/azure-vote/
サンプル アプリケーションをビルドして ACR にプッシュする
az acr build コマンドを使って、イメージをビルドして ACR にプッシュします。 次の例では、azure-vote-front:v1 という名前のイメージをビルドし、それを myhelmacr ACR にプッシュします。
myhelmacrはお使いの ACR インスタンスの名前に置き換えてください。az acr build --image azure-vote-front:v1 --registry myhelmacr --file Dockerfile .
Note
また、Helm chart を ACR にインポートすることもできます。 詳細については、「Azure コンテナー レジストリに対する Helm グラフのプッシュおよびプル」を参照してください。
Helm グラフを作成する
helm createコマンドを使用して Helm グラフを生成します。helm create azure-vote-front次の例で示すように、azure-vote-front/Chart.yaml を更新して、 チャート リポジトリの
https://charts.bitnami.com/bitnamiチャートに対する依存関係を追加し、appVersionをv1に更新します。Note
このガイドに示されているコンテナー イメージのバージョンは、この例で動作するようにテストされていますが、利用可能な最新バージョンではない場合があります。
apiVersion: v2 name: azure-vote-front description: A Helm chart for Kubernetes dependencies: - name: redis version: 17.3.17 repository: https://charts.bitnami.com/bitnami ... # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. appVersion: v1helm dependency updateコマンドを使って、Helm チャートの依存関係を更新します。helm dependency update azure-vote-frontazure-vote-front/values.yaml を次の変更で更新します。
- イメージの詳細、コンテナー ポート、デプロイ名を設定する redis セクションを追加します。
- フロントエンド部分を Redis のデプロイに接続するための backendName を追加します。
-
image.repository を
<loginServer>/azure-vote-frontに変更します。 -
image.tag を
v1に変更します。 - service.type を LoadBalancer に変更します。
次に例を示します。
replicaCount: 1 backendName: azure-vote-backend-master redis: image: registry: mcr.microsoft.com repository: oss/bitnami/redis tag: 6.0.8 fullnameOverride: azure-vote-backend auth: enabled: false image: repository: myhelmacr.azurecr.io/azure-vote-front pullPolicy: IfNotPresent tag: "v1" ... service: type: LoadBalancer port: 80 ...envに セクションを追加し、redis のデプロイの名前を渡します。... containers: - name: {{ .Chart.Name }} securityContext: {{- toYaml .Values.securityContext | nindent 12 }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" imagePullPolicy: {{ .Values.image.pullPolicy }} env: - name: REDIS value: {{ .Values.backendName }} ...
Helm グラフを実行する
helm installコマンドを使用して、Helm グラフを使用してアプリケーションをインストールします。helm install azure-vote-front azure-vote-front/サービスからパブリック IP アドレスが返されるまで数分かかります。
kubectl get serviceコマンドと--watch引数を使用して、進行状況を監視します。kubectl get service azure-vote-front --watchサービスの準備ができると、
EXTERNAL-IPの値が<pending>から IP アドレスに変わります。CTRL+Cキーを押して、kubectlウォッチ プロセスを停止します。NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE azure-vote-front LoadBalancer 10.0.18.228 <pending> 80:32021/TCP 6s ... azure-vote-front LoadBalancer 10.0.18.228 52.188.140.81 80:32021/TCP 2m6sブラウザーで
<EXTERNAL-IP>を使用して自分のアプリケーションのロード バランサーに移動して、サンプル アプリケーションを確認します。
クラスターを削除する
az group delete コマンドを使って、リソース グループ、AKS クラスター、Azure コンテナー レジストリ、ACR に格納されているコンテナー イメージ、関連するすべてのリソースを削除します。
--yesパラメーターを指定して削除を確認し、--no-waitパラメーターを指定して操作の完了を待たずにコマンド プロンプトに戻ります。az group delete --name myResourceGroup --yes --no-wait
Note
システム割り当てマネージド ID (このクイックスタートでの既定の ID オプション) を使って AKS クラスターを作成した場合、ID はプラットフォームによって管理されるので、削除する必要はありません。
サービス プリンシパルを使って AKS クラスターを作成した場合は、クラスターを削除してもサービス プリンシパルは削除されません。 サービス プリンシパルの削除については、AKS のサービス プリンシパルの考慮事項と削除に関する記事をご覧ください。
次のステップ
Helm の使用方法の詳細については、Helm のドキュメントを参照してください。