Azure Kubernetes Service (AKS) での Helm を使用した既存のアプリケーションのインストール
Helm は、Kubernetes アプリケーションのライフサイクルをインストールおよび管理するのに役立つオープン ソースのパッケージ化ツールです。 APT や Yum などの Linux パッケージ マネージャーと同様に、Helm を使用して、構成済みの Kubernetes リソースのパッケージである Kubernetes チャートを管理できます。
この記事では、Azure Kubernetes Service (AKS) の Kubernetes クラスターで Helm を構成して使用する方法を示します。
開始する前に
- この記事は、AKS クラスターがすでに存在していることを前提としています。 AKS クラスターが必要な場合は、Azure CLI、Azure PowerShell、または Azure portal を使用して作成します。
- AKS クラスターに ACR が統合されている必要があります。 ACR が統合された AKS クラスターを作成する方法の詳細については、「Azure Kubernetes サービスから Azure Container Registry の認証を受ける」を参照してください。
- Helm CLI もインストールする必要があります。これは、開発システムで実行されるクライアントです。 Helm を使用してアプリケーションを起動、停止、管理することができます。 Azure Cloud Shell を使用している場合、Helm CLI は既にインストールされています。 ローカル プラットフォームでのインストール手順については、Helm のインストールに関するページを参照してください。
重要
Helm は Linux ノードで実行するものです。 クラスター内に Windows Server ノードがある場合、Helm ポッドが確実に Linux ノードでのみ実行されるようにスケジュールする必要があります。 また、インストールする Helm チャートが確実に正しいノードで実行されるようにスケジュールする必要もあります。 この記事のコマンドでは、node-selectors を使用し、ポッドが正しいノードにスケジュールされるが、一部の Helm チャートではノード セレクターが公開されないようにします。 taints などの、他のオプションをクラスターで使用することを検討することもできます。
Helm のバージョンを確認する
helm version
コマンドを使用して、Helm 3 がインストールされていることを確認します。helm version
次の出力例は、Helm バージョン 3.0.0 がインストールされていることを示しています。
version.BuildInfo{Version:"v3.0.0", GitCommit:"e29ce2a54e96cd02ccfce88bee4f58bb6e2a28b6", GitTreeState:"clean", GoVersion:"go1.13.4"}
Helm v3 を使用してアプリケーションをインストールする
Helm リポジトリの追加
helm repo コマンドを使用して、ingress-nginx リポジトリを追加します。
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
Helm チャートの検索
helm search コマンドを使用して、作成済みの Helm チャートを検索します。
helm search repo ingress-nginx
次の出力例の抜粋は、使用できる一部の Helm チャートを示しています。
NAME CHART VERSION APP VERSION DESCRIPTION ingress-nginx/ingress-nginx 4.7.0 1.8.0 Ingress controller for Kubernetes using NGINX a...
helm repo update コマンドを使用して、チャートの一覧を更新します。
helm repo update
次の出力例は、リポジトリの更新が成功したことを示しています。
Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "ingress-nginx" chart repository Update Complete. ⎈ Happy Helming!⎈
Helm チャートのイメージを ACR にインポートする
この記事では、3 つのコンテナー イメージに依存する NGINX イングレス コントローラー Helm Chart を使用します。
az acr import
を使用して、NGINX イングレス コントローラーのイメージを ACR にインポートします。REGISTRY_NAME=<REGISTRY_NAME> CONTROLLER_REGISTRY=registry.k8s.io CONTROLLER_IMAGE=ingress-nginx/controller CONTROLLER_TAG=v1.8.0 PATCH_REGISTRY=registry.k8s.io PATCH_IMAGE=ingress-nginx/kube-webhook-certgen PATCH_TAG=v20230407 DEFAULTBACKEND_REGISTRY=registry.k8s.io DEFAULTBACKEND_IMAGE=defaultbackend-amd64 DEFAULTBACKEND_TAG=1.5 az acr import --name $REGISTRY_NAME --source $CONTROLLER_REGISTRY/$CONTROLLER_IMAGE:$CONTROLLER_TAG --image $CONTROLLER_IMAGE:$CONTROLLER_TAG az acr import --name $REGISTRY_NAME --source $PATCH_REGISTRY/$PATCH_IMAGE:$PATCH_TAG --image $PATCH_IMAGE:$PATCH_TAG az acr import --name $REGISTRY_NAME --source $DEFAULTBACKEND_REGISTRY/$DEFAULTBACKEND_IMAGE:$DEFAULTBACKEND_TAG --image $DEFAULTBACKEND_IMAGE:$DEFAULTBACKEND_TAG
Note
コンテナー イメージを ACR にインポートするだけでなく、Helm Chart を ACR にインポートすることもできます。 詳細については、「Azure コンテナー レジストリに対する Helm グラフのプッシュおよびプル」を参照してください。
Helm チャートの実行
helm install コマンドを使用し、リリース名と、インストールするチャートの名前を指定して、Helm チャートをインストールします。
ヒント
次の例では、ingress-basic という名前のイングレス リソースの Kubernetes 名前空間が作成され、その名前空間内で動作することを想定しています。 必要に応じて、ご自身の環境の名前空間を指定できます。
ACR_URL=<REGISTRY_URL> # Create a namespace for your ingress resources kubectl create namespace ingress-basic # Use Helm to deploy an NGINX ingress controller helm install ingress-nginx ingress-nginx/ingress-nginx \ --version 4.0.13 \ --namespace ingress-basic \ --set controller.replicaCount=2 \ --set controller.nodeSelector."kubernetes\.io/os"=linux \ --set controller.image.registry=$ACR_URL \ --set controller.image.image=$CONTROLLER_IMAGE \ --set controller.image.tag=$CONTROLLER_TAG \ --set controller.image.digest="" \ --set controller.admissionWebhooks.patch.nodeSelector."kubernetes\.io/os"=linux \ --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz \ --set controller.admissionWebhooks.patch.image.registry=$ACR_URL \ --set controller.admissionWebhooks.patch.image.image=$PATCH_IMAGE \ --set controller.admissionWebhooks.patch.image.tag=$PATCH_TAG \ --set defaultBackend.nodeSelector."kubernetes\.io/os"=linux \ --set defaultBackend.image.registry=$ACR_URL \ --set defaultBackend.image.image=$DEFAULTBACKEND_IMAGE \ --set defaultBackend.image.tag=$DEFAULTBACKEND_TAG \ --set defaultBackend.image.digest=""
次の出力例の抜粋は、Helm チャートによって作成された Kubernetes リソースのデプロイ状態を示します。
NAME: nginx-ingress LAST DEPLOYED: Wed Jul 28 11:35:29 2021 NAMESPACE: ingress-basic STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: The ingress-nginx controller has been installed. It may take a few minutes for the LoadBalancer IP to be available. You can watch the status by running 'kubectl --namespace ingress-basic get services -o wide -w nginx-ingress-ingress-nginx-controller' ...
kubectl get services
コマンドを使用して、サービスの EXTERNAL-IP を取得します。kubectl --namespace ingress-basic get services -o wide -w ingress-nginx-ingress-nginx-controller
次の出力例は、ingress-nginx-ingress-nginx-controller サービスの EXTERNAL-IP を示しています。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR nginx-ingress-ingress-nginx-controller LoadBalancer 10.0.254.93 <EXTERNAL_IP> 80:30004/TCP,443:30348/TCP 61s app.kubernetes.io/component=controller,app.kubernetes.io/instance=nginx-ingress,app.kubernetes.io/name=ingress-nginx
リリースを一覧表示する
helm list
コマンドを使用して、クラスターにインストールされているリリースの一覧を取得します。helm list --namespace ingress-basic
次の出力例は、前の手順でデプロイされた ingress-nginx リリースを示しています。
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION ingress-nginx ingress-basic 1 2021-07-28 11:35:29.9623734 -0500 CDT deployed ingress-nginx-3.34.0 0.47.0
リソースをクリーンアップする
Helm チャートをデプロイすると、ポッド、デプロイ、サービスなどの Kubernetes リソースが作成されます。
helm uninstall コマンドを使用し、リリース名を指定して、リソースをクリーンアップします。
helm uninstall --namespace ingress-basic ingress-nginx
次の出力例は、ingress-nginx という名前のリリースがアンインストールされたことを示しています。
release "nginx-ingress" uninstalled
kubectl delete
コマンドを使用し、名前空間の名前を指定して、リソースと共にサンプルの名前空間全体を削除します。kubectl delete namespace ingress-basic
次のステップ
Kubernetes アプリケーションのデプロイの管理について詳しくは、Helm のドキュメントを参照してください。
Azure Kubernetes Service