Azure CLI を使用して Azure Kubernetes Service (AKS) クラスター上に Windows Server コンテナーを作成する
Azure Kubernetes Service (AKS) は、クラスターをすばやくデプロイおよび管理することができる、マネージド Kubernetes サービスです。 この記事では、Azure CLI を使用して Windows Server 2019 コンテナーを実行する AKS クラスターをデプロイします。 また、Windows Server コンテナー内の ASP.NET サンプル アプリケーションをクラスターにデプロイします。
この記事では、Kubernetes の基本的な概念を理解していることを前提としています。 詳細については、「Azure Kubernetes Services (AKS) における Kubernetes の中心概念」を参照してください。
Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。
前提条件
Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。
CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。
ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。
初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。
az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。
この記事では、Azure CLI のバージョン 2.0.64 以降が必要です。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。
クラスターの作成に使用している ID には、適切な最小限のアクセス許可が与えられています。 AKS のアクセスと ID の詳細については、「Azure Kubernetes Service (AKS) でのアクセスと ID オプション」を参照してください。
複数の Azure サブスクリプションをお持ちの場合は、az account コマンドを使用して、リソースが課金の対象となる適切なサブスクリプション ID を選択してください。
Microsoft.OperationsManagement と Microsoft.OperationalInsights プロバイダーがサブスクリプションで登録されていることを確認してください。 これらは、Container Insights をサポートするために必要な Azure リソース プロバイダーです。 登録の状態を確認するには、次のコマンドを実行します。
az provider show -n Microsoft.OperationsManagement -o table az provider show -n Microsoft.OperationalInsights -o table
登録されていない場合は、次のコマンドを使用して、Microsoft.OperationsManagement と Microsoft.OperationalInsights を登録します。
az provider register --namespace Microsoft.OperationsManagement az provider register --namespace Microsoft.OperationalInsights
Note
このクイックスタートのコマンドを、Azure Cloud Shell ではなくローカルで実行する場合は、管理特権でコマンドを実行してください。
制限事項
複数のノード プールをサポートする AKS クラスターを作成および管理する場合には、次の制限があります。
- 最初のノード プールは削除できません。
次の追加の制限事項は Windows Server ノード プールに該当します。
- AKS クラスターでは、最大で 10 のノード プールを作成できます。
- AKS クラスターでは、最大で 100 のノードを各ノード プールで作成できます。
- Windows Server ノード プール名は 6 文字に制限されています。
リソース グループを作成する
Azure リソース グループは、Azure リソースが展開され管理される論理グループです。 リソース グループを作成する際は、場所を指定するよう求められます。 この場所は、リソース グループのメタデータが格納される場所です。リソースの作成時に別のリージョンを指定しない場合は、Azure でリソースが実行される場所でもあります。 az group create コマンドを使用して、リソース グループを作成します。
次の例では、myResourceGroup という名前のリソース グループを eastus に作成します。
Note
この記事では、このチュートリアルのコマンドに対して Bash 構文を使用します。 Azure Cloud Shell を使用する場合、[Cloud Shell] ウィンドウの左上のドロップダウンが [Bash] に設定されていることを確認してください。
az group create --name myResourceGroup --location eastus
次の出力例では、正常に作成されたリソース グループが示されています。
{
"id": "/subscriptions/<guid>/resourceGroups/myResourceGroup",
"location": "eastus",
"managedBy": null,
"name": "myResourceGroup",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": null
}
AKS クラスターを作成する
Windows Server コンテナー用のノード プールをサポートする AKS クラスターを実行するには、Azure CNI の (高度な) ネットワーク プラグインを使用するネットワーク ポリシーを、ご利用のクラスターで使用する必要があります。 必要なサブネット範囲とネットワークに関する考慮事項を計画するのに役立つ詳細情報については、Azure CNI ネットワークの構成に関するページを参照してください。 myAKSCluster という名前の AKS クラスターを作成するには、az aks create コマンドを使用します。 このコマンドでは、必要なネットワーク リソースが存在しない場合、それらが作成されます。
- クラスターは 2 つのノードで構成されています。
- クラスター上のすべての Windows Server ノードの管理者資格情報は、
--windows-admin-password
パラメーターと--windows-admin-username
パラメーターによって設定されます。これは Windows Server のパスワード要件を満たしている必要があります。--windows-admin-password
パラメーターを指定しない場合は、値を指定するように求められます。 - ノード プールは
VirtualMachineScaleSets
を使用します。
Note
クラスターが確実に動作するようにするには、既定のノード プールで少なくとも 2 つのノードを実行する必要があります。
クラスターの Windows Server ノードの管理者資格情報として使用するユーザー名を作成します。 次のコマンドを実行すると、ユーザー名の入力が求められ、後のコマンドで使用できるように WINDOWS_USERNAME と設定されます (この記事に示すコマンドは BASH シェルで入力されます)。
echo "Please enter the username to use as administrator credentials for Windows Server nodes on your cluster: " && read WINDOWS_USERNAME
--windows-admin-username
パラメーターを指定して、クラスターを作成します。 次のコマンド例では、前のコマンドで設定した WINDOWS_USERNAME の値を使用してクラスターを作成します。 または、WINDOWS_USERNAME を使用する代わりに、パラメーターに直接別のユーザー名を指定することもできます。 次のコマンドを実行すると、クラスターの Windows Server ノード向けに、管理者資格情報のパスワードを作成するように求めるメッセージも表示されます。 または、--windows-admin-password
パラメーターを使用して、独自の値を指定することもできます。
az aks create \
--resource-group myResourceGroup \
--name myAKSCluster \
--node-count 2 \
--enable-addons monitoring \
--generate-ssh-keys \
--windows-admin-username $WINDOWS_USERNAME \
--vm-set-type VirtualMachineScaleSets \
--network-plugin azure
Note
パスワード検証エラーが表示された場合は、設定したパスワードが Windows Server のパスワード要件を満たしていることを確認します。 パスワードが要件を満たしている場合は、別のリージョンでリソース グループの作成を試みます。 その後、新しいリソース グループを使用してクラスターを作成してください。
--vm-set-type VirtualMachineScaleSets
と --network-plugin azure
の設定時に管理者のユーザー名とパスワードを指定しない場合、ユーザー名は azureuser に設定され、パスワードはランダムな値に設定されます。
管理者のユーザー名は変更できませんが、az aks update
を使用して AKS クラスターが Windows Server ノードに使用する管理者パスワードを変更できます。 詳細については、「Windows Server ノード プールに関する FAQ」を参照してください。
数分後、コマンドが完了し、クラスターに関する情報が JSON 形式で返されます。 場合によっては、クラスターのプロビジョニングに数分以上かかることがあります。 このような場合は、最大 10 分と考えてください。
Windows ノード プールを追加する
既定では、Linux コンテナーを実行できるノード プールを使用して、AKS クラスターが作成されます。 Windows Server コンテナーを Linux ノード プールと共に実行できるノード プールをさらに追加するには、az aks nodepool add
コマンドを使用します。
AKS では、Windows Server 2019 および Windows Server 2022 ノード プールがサポートされています。 Kubernetes 1.25 以降では、Windows Server 2022 は既定のオペレーティング システムであり、Kubernetes 1.33 以降では唯一のオプションです。 以前のバージョンでは、Windows Server 2019 が既定のオペレーティング システムです。
az aks nodepool add
コマンドを使用して Windows ノードプールを追加します。
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--os-type Windows \
--name npwin \
--node-count 1
上記のコマンドでは、npwin という名前の新しいノード プールが作成され、それが myAKSCluster に追加されます。 上記のコマンドではまた、az aks create
の実行時に作成された既定の VNET 内の既定のサブネットが使用されます。 OS SKU が指定されていないため、nodepool はクラスターの Kubernetes バージョンに基づいて既定のオペレーティング システムに設定されます。
Windows Server 2019 ノード プールを追加する
Note
Windows Server 2019 は、Kubernetes バージョン 1.32 がサポート終了 (EOL) に達した後に廃止され、今後のリリースではサポートされません。 この廃止の詳細については、[AKS リリース ノート][aks-release-notes] を参照してください。
Windows ノード プールを作成する場合、Kubernetes バージョン 1.24 以降では、既定のオペレーティング システムは Windows Server 2019 です。 既定でない場合に Windows Server 2019 ノード プールを使用するには、OS SKU の種類 Windows2019
を指定する必要があります。
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--os-type Windows \
--os-sku Windows2019 \
--name npwin \
--node-count 1
上記のコマンドでは、npwin という名前の新しい Windows Server 2019 ノード プールが作成され、それが myAKSCluster に追加されます。 上記のコマンドではまた、az aks create
の実行時に作成された既定の VNET 内の既定のサブネットが使用されます。
Windows Server 2022 ノード プールを追加する
Windows ノード プールを作成する場合、Kubernetes バージョン 1.25 以降では、既定のオペレーティング システムは Windows Server 2022 です。 既定でない場合に Windows Server 2022 ノードを使用するには、OS SKU の種類 Windows2022
を指定する必要があります。
Note
Windows Server 2022 には、Kubernetes バージョン "1.23.0" 以降が必要です。
az aks nodepool add
コマンドを使用して、Windows Server 2022 ノード プールを追加します。
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--os-type Windows \
--os-sku Windows2022 \
--name npwin \
--node-count 1
省略可能: Windows Server ノード プールでの containerd
の使用
Kubernetes バージョン1.20 以降では、Windows Server 2019 ノード プールのコンテナー ランタイムとして containerd
を指定できます。 Kubernetes 1.23 以降では、containerd
のみが Windows の既定のコンテナー ランタイムです。
重要
Windows Server 2019 ノードプールで containerd
を使用する場合:
- コントロール プレーンと Windows Server 2019 の両方のノードプールで、Kubernetes バージョン 1.20 以上を使用する必要があります。
- Windows Server のコンテナーを実行するためのノード プールを作成または更新する場合、
--node-vm-size
の既定値は Standard_D2s_v3 です。これは、Kubernetes 1.20 までの Windows server 2019 ノードプールの最小推奨サイズです。containerd
を使用した Windows Server 2019 ノードプールの最小推奨サイズは Standard_D4s_v3です。--node-vm-size
パラメーターを設定する場合は、制限された VM サイズの一覧を確認してください。 - ワークロードが正しくスケジュールされていることを保証するには、
containerd
を実行している Windows Server 2019 ノードプールで テイントまたはラベル を使用し、容認またはノードのセレクターをデプロイで使用することを強くお勧めします。
containerd
を使用して Windows Server ノード プールを追加する
Windows Server コンテナーを containerd
ランタイムで実行できるノード プールを追加するには、az aks nodepool add
コマンドを使用します。
Note
WindowsContainerRuntime=containerd カスタムヘッダーを指定しない場合、既定でノード プールは containerd
をコンテナー ランタイムとして使用します。
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--os-type Windows \
--name npwcd \
--node-vm-size Standard_D4s_v3 \
--kubernetes-version 1.20.5 \
--aks-custom-headers WindowsContainerRuntime=containerd \
--node-count 1
上のコマンドは、npwcd という名前のランタイムとして containerd
を使用して新しい Windows Server ノードプールを作成し、それをmyAKSClusterに追加します。 上記のコマンドではまた、az aks create
の実行時に作成された既定の VNET 内の既定のサブネットが使用されます。
既存の Windows Server ノード プールを containerd
にアップグレードする
az aks nodepool upgrade
コマンドを使用して、特定のノード プールを Docker から containerd
にアップグレードします。
az aks nodepool upgrade \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name npwd \
--kubernetes-version 1.20.7 \
--aks-custom-headers WindowsContainerRuntime=containerd
上記のコマンドは、npwd という名前のノード プールを containerd
ランタイムにアップグレードします。
クラスターの既存のすべてのノード プールをアップグレードして、すべての Windows Server ノード プールで containerd
ランタイムを使用するには:
az aks upgrade \
--resource-group myResourceGroup \
--name myAKSCluster \
--kubernetes-version 1.20.7 \
--aks-custom-headers WindowsContainerRuntime=containerd
上記のコマンドでは、containerd
ランタイムを使用するために、myAKSCluster のすべての Windows Server ノード プールをアップグレードします。
Note
upgrade コマンドを実行する場合、指定された --kubernetes-version
は、ノード プールの現在のバージョンよりも高いバージョンである必要があります。
クラスターに接続する
Kubernetes クラスターを管理するには、Kubernetes のコマンドライン クライアントである kubectl を使用します。 Azure Cloud Shell を使用している場合、kubectl
は既にインストールされています。 kubectl
をローカルにインストールするには、az aks install-cli コマンドを使用します。
az aks install-cli
Kubernetes クラスターに接続するように kubectl
を構成するには、az aks get-credentials コマンドを使用します。 このコマンドは、資格情報をダウンロードし、それを使用するように Kubernetes CLI を構成します。
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
クラスターへの接続を確認するには、クラスター ノードの一覧を返す kubectl get コマンドを使用します。
kubectl get nodes -o wide
次の出力例は、クラスター内のすべてのノードを示しています。 すべてのノードの状態が [準備完了] であることを確認します。
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
aks-nodepool1-12345678-vmss000000 Ready agent 34m v1.20.7 10.240.0.4 <none> Ubuntu 18.04.5 LTS 5.4.0-1046-azure containerd://1.4.4+azure
aks-nodepool1-12345678-vmss000001 Ready agent 34m v1.20.7 10.240.0.35 <none> Ubuntu 18.04.5 LTS 5.4.0-1046-azure containerd://1.4.4+azure
aksnpwcd123456 Ready agent 9m6s v1.20.7 10.240.0.97 <none> Windows Server 2019 Datacenter 10.0.17763.1879 containerd://1.4.4+unknown
aksnpwin987654 Ready agent 25m v1.20.7 10.240.0.66 <none> Windows Server 2019 Datacenter 10.0.17763.1879 docker://19.3.14
Note
各ノード プールのコンテナー ランタイムは、 コンテナー ランタイムの下に表示されます。 aksnpwin987654が docker://
で始まることに注意してください。これは、コンテナー ランタイムに Docker を使用していることを意味します。 aksnpwcd123456が containerd://
で始まることに注意してください。これは、コンテナー ランタイムに containerd
を使用していることを意味します。
アプリケーションをデプロイする
Kubernetes のマニフェスト ファイルでは、どのコンテナー イメージを実行するかなど、クラスターの望ましい状態を定義します。 この記事では、Windows Server コンテナー内で ASP.NET サンプル アプリケーションを実行するために必要なすべてのオブジェクトを作成するのにマニフェストを使用します。 このマニフェストには、ASP.NET サンプル アプリケーションの Kubernetes デプロイと、インターネットからアプリケーションにアクセスするための外部 Kubernetes サービスが含まれています。
ASP.NET サンプル アプリケーションは、.NET Framework のサンプルの一部として提供され、Windows Server コンテナー内で実行されます。 AKS では、Windows Server コンテナーは Windows Server 2019 以降のイメージをベースにしている必要があります。 Kubernetes マニフェスト ファイルではまた、ノード セレクターを定義する必要があり、この定義では、Windows Server コンテナーを実行できるノード上でご利用の ASP.NET サンプル アプリケーションのポッドを実行するように AKS クラスターに指示します。
sample.yaml
という名前のファイルを作成し、以下の YAML 定義をコピーします。
apiVersion: apps/v1
kind: Deployment
metadata:
name: sample
labels:
app: sample
spec:
replicas: 1
template:
metadata:
name: sample
labels:
app: sample
spec:
nodeSelector:
"kubernetes.io/os": windows
containers:
- name: sample
image: mcr.microsoft.com/dotnet/framework/samples:aspnetapp
resources:
limits:
cpu: 1
memory: 800M
ports:
- containerPort: 80
selector:
matchLabels:
app: sample
---
apiVersion: v1
kind: Service
metadata:
name: sample
spec:
type: LoadBalancer
ports:
- protocol: TCP
port: 80
selector:
app: sample
YAML マニフェスト ファイルの内訳については、「デプロイと YAML マニフェスト」を参照してください。
kubectl apply コマンドを使用してアプリケーションをデプロイし、ご利用の YAML マニフェストの名前を指定します。
kubectl apply -f sample.yaml
次の出力例は、正常に作成されたデプロイおよびサービスを示しています。
deployment.apps/sample created
service/sample created
アプリケーションをテストする
アプリケーションが実行されると、Kubernetes サービスによってアプリケーション フロント エンドがインターネットに公開されます。 このプロセスが完了するまでに数分かかることがあります。 場合によっては、サービスのプロビジョニングに数分以上かかることがあります。 このような場合は、最大 10 分と考えてください。
進行状況を監視するには、kubectl get service コマンドを --watch
引数と一緒に使用します。
kubectl get service sample --watch
最初に、"サンプル" サービスの EXTERNAL-IP が "保留中" として表示されます。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
sample LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 6s
EXTERNAL-IP アドレスが "保留中" から実際のパブリック IP アドレスに変わったら、CTRL-C
を使用して kubectl
ウォッチ プロセスを停止します。 次の出力例は、サービスに割り当てられている有効なパブリック IP アドレスを示しています。
sample LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
サンプル アプリが動作していることを確認するには、Web ブラウザーを開いてサービスの外部 IP アドレスにアクセスします。
Note
ページを読み込もうとしたときに接続タイムアウトが発生する場合は、次のコマンド [kubectl get pods --watch] を使用してサンプル アプリの準備ができていることを確認することをお勧めします。 外部 IP アドレスが使用可能になるまでは、Windows コンテナーが起動しない場合があります。
クラスターを削除する
Azure の課金を回避するために、この後のチュートリアルを実行しない場合は、az group delete コマンドを使用して、リソース グループ、コンテナー サービス、およびすべての関連リソースを削除します。
az group delete --name myResourceGroup --yes --no-wait
注意
AKS クラスターはシステム割り当てマネージド ID (このクイックスタートで使用した既定の ID オプション) を使用して作成されました。ID はプラットフォームによって管理され、削除する必要はありません。
次のステップ
この記事では、Kubernetes クラスターをデプロイし、そこに、Windows Server コンテナー内の ASP.NET サンプル アプリケーションをデプロイしました。
AKS の詳細を参照し、デプロイの例の完全なコードを確認するには、Kubernetes クラスター チュートリアルに進んでください。