クイック スタート:Helm を使用して Azure Kubernetes Service (AKS) で開発する

Helm は、Kubernetes アプリケーションのライフサイクルをインストールおよび管理するのに役立つオープン ソースのパッケージ化ツールです。 APTYum などの Linux パッケージ マネージャーと同様に、Helm を使用すると、構成済みの Kubernetes リソースのパッケージである Kubernetes チャートが管理されます。

このクイックスタートでは、Helm を使用して、AKS でアプリケーションをパッケージ化して実行します。 Helm を使用した既存のアプリケーションのインストールの詳細については、AKS での Helm を使用した既存のアプリケーションのインストールに関する攻略ガイドを参照してください。

前提条件

Azure Container Registry を作成する

Helm を使用してご利用の AKS クラスターで自分のアプリケーションを実行するには、お使いのコンテナー イメージを Azure Container Registry (ACR) に格納する必要があります。 Azure 内で一意となる、5 から 50 文字の英数字を含むレジストリ名を指定します。 Basic SKU は、ストレージとスループットのバランスが取れた、開発目的のコスト最適化されたエントリ ポイントです。

下の例では、az acr create を使用して、MyResourceGroup 内に Basic SKU を使用する MyHelmACR という名前の ACR を作成します。

az group create --name MyResourceGroup --location eastus
az acr create --resource-group MyResourceGroup --name MyHelmACR --sku Basic

出力は次の例のようになります。 後の手順で使用するために、自分の ACR 用の loginServer 値を書き留めておきます。 次の例では、myhelmacr.azurecr.ioMyHelmACR 用の loginServer になります。

{
  "adminUserEnabled": false,
  "creationDate": "2019-06-11T13:35:17.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 にアクセスしてコンテナー イメージをプルして実行する必要があります。 次のコマンドを使用します。

  • MyAKS という名前の AKS クラスターを作成し、MyHelmACR をアタッチします。
  • MyAKS クラスターに MyHelmACR ACR へのアクセスを許可します。
az aks create -g MyResourceGroup -n MyAKS --location eastus  --attach-acr MyHelmACR --generate-ssh-keys

ご利用の AKS クラスターに接続する

Kubernetes クラスターにローカルで接続するには、Kubernetes のコマンドライン クライアントである kubectl を使用します。 Azure Cloud Shell を使用している場合、kubectl は既にインストールされています。

  1. az aks install-cli コマンドを使用して、kubectl をローカルにインストールします。

    az aks install-cli
    
  2. az aks get-credentials コマンドを使用して、Kubernetes クラスターに接続するように kubectl を構成します。 次のコマンド例では、MyResourceGroupMyAKS という名前の AKS クラスター用の資格情報が取得されます。

    az aks get-credentials --resource-group MyResourceGroup --name MyAKS
    

サンプル アプリケーションのダウンロード

このクイックスタートでは、Azure Vote アプリケーションを使用します。 GitHub からアプリケーションを複製し、azure-vote ディレクトリに移動します。

git clone https://github.com/Azure-Samples/azure-voting-app-redis.git
cd azure-voting-app-redis/azure-vote/

サンプル アプリケーションをビルドして ACR にプッシュする

上記の Dockerfile を使用して az acr build コマンドを実行し、イメージをビルドしてレジストリにプッシュします。 コマンドの最後にある . では、Dockerfile の位置を設定します (この場合は現在のディレクトリです)。

az acr build --image azure-vote-front:v1 \
  --registry MyHelmACR \
  --file Dockerfile .

注意

コンテナー イメージを ACR にインポートするだけでなく、Helm グラフを ACR にインポートすることもできます。 詳細については、「Azure コンテナー レジストリに対する Helm グラフのプッシュおよびプル」を参照してください。

Helm グラフを作成する

helm create コマンドを使用して Helm グラフを生成します。

helm create azure-vote-front

azure-vote-front/Chart.yaml を更新して、https://charts.bitnami.com/bitnami チャート リポジトリから redis グラフの依存関係を追加し、appVersionv1 に更新します。 次に例を示します。

apiVersion: v2
name: azure-vote-front
description: A Helm chart for Kubernetes

dependencies:
  - name: redis
    version: 14.7.1
    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: v1

helm dependency update を使用して、Helm グラフの依存関係を更新します。

helm dependency update azure-vote-front

azure-vote-front/values.yaml を更新します。

  • イメージの詳細、コンテナー ポート、デプロイ名を設定する redis セクションを追加します。
  • フロントエンド部分を Redis のデプロイに接続するための backendName を追加します。
  • image.repository<loginServer>/azure-vote-front に変更します。
  • image.tagv1 に変更します。
  • service.typeLoadBalancer に変更します。

次に例を示します。

# Default values for azure-vote-front.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

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
...

Redis のデプロイの名前を渡すため、env セクションを azure-vote-front/templates/deployment.yaml に追加します。

...
      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
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 クラスター、コンテナー レジストリ、ACR に格納されているコンテナー イメージ、および関連するすべてのリソースを削除します。

az group delete --name MyResourceGroup --yes --no-wait

注意

クラスターを削除したとき、AKS クラスターで使用される Azure Active Directory サービス プリンシパルは削除されません。 サービス プリンシパルを削除する手順については、AKS のサービス プリンシパルに関する考慮事項と削除に関するページを参照してください。

マネージド ID を使用した場合、ID はプラットフォームによって管理されるので、削除する必要はありません。

次のステップ

Helm の使用方法の詳細については、Helm のドキュメントを参照してください。