Helm を使用してアプリケーションをデプロイする
適用対象: AKS on Azure Stack HCI 22H2、Windows Server 上の AKS
Helm は、Kubernetes アプリケーションのライフサイクルをインストールおよび管理するのに役立つオープン ソースのパッケージ化ツールです。 APT や Yum などの Linux パッケージ マネージャーと同様に、Helm を使用すると、構成済みの Kubernetes リソースのパッケージである Kubernetes chart を管理できます。
この記事では、Azure Arc で有効になっている Azure Kubernetes Service を使用しているときに、Helm を使用して AKS にアプリケーションをパッケージ化してデプロイする方法について説明します。
開始する前に
次の要件が設定されていることを確認します。
- Kubernetes クラスター少なくとも 1 つの Windows または Linux ワーカー ノードが稼働しています。
- クラスターを指すローカル
kubectl
環境を構成しました。 Get-AksHciCredential PowerShell コマンドを使用すると、kubectl
を使用してご自身のクラスターにアクセスできます。 - Helm v3 コマンド ラインと必須コンポーネントがインストールされていること。
- 使用可能なコンテナー レジストリ (DockerHub や Azure Container Registry など)。
この記事では、ASP.NET Core アプリケーションを例として使用します。 この GitHub リポジトリからサンプル アプリケーションをダウンロードできます。
アプリケーションは Kubernetes にデプロイされるため、次の例はプロジェクトの単純な Dockerfile です。
FROM mcr.microsoft.com/dotnet/aspnet:5.0-alpine AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:5.0-alpine AS build
WORKDIR /src
COPY ["MyMicroservice.csproj", "./"]
RUN dotnet restore "MyMicroservice.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "MyMicroservice.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "MyMicroservice.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyMicroservice.dll"]
サンプル アプリケーションをビルドしてコンテナー レジストリにプッシュする
アプリケーション フォルダーに移動し、Dockerfile を使用して、次のコマンドを使ってイメージをビルドおよびプッシュします。
docker build -f Dockerfile -t acr.azurecr.io/mymicroservice:0.1.0 .
Note
コマンドの最後にあるピリオド (.) によって、Dockerfile の位置を設定します (この場合は現在のディレクトリです)。
このコマンドは、ローカル コンピューターにイメージ mymicroservice:0.1.0
を作成します。 イメージが正常に作成されたことを確認するには、 docker images
を実行して次のことを確認します。
REPOSITORY TAG IMAGE ID CREATED SIZE
acr.azurecr.io/mymicroservice 0.1.0 5be713db571b About a minute ago 107MB
....
次に、イメージをコンテナー レジストリ ( DockerHub または Azure Container Registry など) にプッシュ。 この例では、コンテナー イメージが Azure Container Registry にプッシュされます。 詳細については、「 ACR から Kubernetes クラスターへのイメージのプルを参照してください。
docker push acr.azurecr.io/mymicroservice:0.1.0
Helm グラフを作成する
サンプル アプリケーションの準備ができたので、次の手順では、次のように helm create
コマンドを使用して Helm チャートを生成します。
helm create mymicroserviceapp
次のように、 mymicroserviceapp/values.yaml を更新します。
image.repository
をacr.azurecr.io/mymicroservice
に変更します。service.type
をNodePort
に変更します。
次に例を示します。
# Default values for webfrontend.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
replicaCount: 1
image:
repository: acr.azurecr.io/mymicroservice
pullPolicy: IfNotPresent
...
service:
type: NodePort
port: 80
...
mymicroserviceapp/templates/deployment.yaml ファイルに移動し、正常性チェックを構成します。 Kubernetes は、正常性チェックを使用してアプリケーションのデプロイを管理します。 次の例に示すように、 liveness
プローブと readiness
プローブの両方へのパスを path: /weatherforecast
に置き換えます。
...
livenessProbe:
httpGet:
path: /weatherforecast
port: http
initialDelaySeconds: 0
periodSeconds: 10
timeoutSeconds: 1
failureThreshold: 3
readinessProbe:
httpGet:
path: /weatherforecast
port: http
successThreshold: 3
...
Helm chart を Kubernetes にデプロイする
ソリューション ディレクトリの charts\mymicroserviceapp ディレクトリから起動して、次のコマンドを実行します。
helm upgrade --install mymicroserviceapp . --namespace=local --set mymicroserviceapp.image.tag="0.1.0"
このコマンドは、Kubernetes クラスターのlocal
名前空間にmymicroserviceapp
名前を使用して既存のリリースを作成 (またはアップグレード) し、次の例のような出力を生成します。
Release "mymicroserviceapp" does not exist. Installing it now.
NAME: mymicroserviceapp
LAST DEPLOYED: Fri Apr 2 08:47:24 2021
NAMESPACE: local
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
export NODE_PORT=$(kubectl get --namespace local -o jsonpath="{.spec.ports[0].nodePort}" services mymicroserviceapp)
export NODE_IP=$(kubectl get nodes --namespace local -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT
Helm チャートをデプロイした後、 kubectl get all -n local
を実行して、リソースが正しくデプロイされたことを確認できます。
コマンドの実行からの出力は次のとおりです。
NAME READY STATUS RESTARTS AGE
pod/mymicroserviceapp-7849f949df-fwgbn 1/1 Running 0 101s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/mymicroserviceapp NodePort 10.100.149.1 <none> 80:30501/TCP 101s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/mymicroserviceapp 1/1 1 1 101s
NAME DESIRED CURRENT READY AGE
replicaset.apps/mymicroserviceapp-7849f949df 1 1 1 101s
デプロイのテスト
アプリケーションはサービスおよびノード ポートと共にデプロイされるため、クラスターの外部から API を呼び出すことができます。 この呼び出しを行うには、http://$NODE_IP:$NODE_PORT に要求を送信します。
curl http://10.193.2.103:30501/WeatherForeCast/
StatusCode : 200
StatusDescription : OK
Content : [{"date":"2021-04-03T15:51:04.795216+00:00","temperatureC":45,"temperatureF":112,"summary":"Balmy"},{"date":"2021-04-04T15:51:04.
7952176+00:00","temperatureC":23,"temperatureF":73,"summary":"Cool"},{"...
RawContent : HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: application/json; charset=utf-8
Date: Fri, 02 Apr 2021 15:51:04 GMT
Server: Kestrel
[{"date":"2021-04-03T15:51:04.795216+00:00","tempera...
Forms : {}
Headers : {[Transfer-Encoding, chunked], [Content-Type, application/json; charset=utf-8], [Date, Fri, 02 Apr 2021 15:51:04 GMT], [Server,
Kestrel]}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 494
クラスターをクリーンアップする
最後の手順では、クラスターをクリーンアップします。 Kubernetes のデプロイ リソースを削除するには、次のコマンドを実行します。
helm uninstall mymicroserviceapp -n local
次の例のような出力が得られるはずです。
release "mymicroserviceapp" uninstalled