Azure Kubernetes Service (AKS) は、クラスターをすばやくデプロイおよび管理することができる、マネージド Kubernetes サービスです。 この記事では、Azure CLI を使用して Windows Server コンテナーを実行する AKS クラスターをデプロイします。 また、Windows Server コンテナー内の ASP.NET サンプル アプリケーションをクラスターにデプロイします。
注
AKS クラスターの迅速なプロビジョニングを開始するため、この記事には、評価のみを目的とした既定の設定でクラスターをデプロイする手順が含まれています。 運用環境に対応したクラスターをデプロイする前に、ベースライン参照アーキテクチャを理解して、ビジネス要件にどの程度合致しているかを検討することをお勧めします。
開始する前に
このクイックスタートは、Kubernetes の基本的な概念を理解していることを前提としています。 詳細については、「Azure Kubernetes Services (AKS) における Kubernetes の中心概念」を参照してください。
- Azure アカウントをお持ちでない場合は、開始する前に無料アカウントを作成してください。
Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の概要」を参照してください。
CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。
ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、「 Azure CLI を使用した Azure への認証」を参照してください。
初回使用時にインストールを求められたら、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 setコマンドを使用してリソースを課金する適切なサブスクリプション ID を選択します。 詳細については、Azure CLI で Azure サブスクリプションを管理する方法に関するページを参照してください。 -
--os-sku Windows2025を使用している場合は、aks-preview拡張機能をインストールし、プレビュー フラグを登録する必要があります。 最小バージョンは 18.0.0b40 です。
aks-preview拡張機能をインストールする
Important
AKS のプレビュー機能は、セルフサービスのオプトイン単位で利用できます。 プレビューは、"現状有姿のまま" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 AKS プレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は運用環境での使用を目的としていません。 詳細については、次のサポート記事を参照してください。
-
aks-previewコマンドを使って Azure CLI 拡張機能az extension addをインストールします。
az extension add --name aks-preview
-
az extension updateコマンドを使って拡張機能の最新バージョンに更新します。 Windows Server 2025 には、少なくとも 18.0.0b40 が必要です。
az extension update --name aks-preview
AksWindows2025Preview フィーチャーフラグを登録する
- [
AksWindows2025Preview][az-feature-register] コマンドを使って、az feature register機能フラグを登録します。
az feature register --name AksWindows2025Preview --namespace Microsoft.ContainerService
- 登録の状態は、[
az feature show][az-feature-show] コマンドを使って確認します。 状態が [登録済み] と表示されるまでに数分かかります。
az feature show --name AksWindows2025Preview --namespace Microsoft.ContainerService
状態が Registered と表示されたら、[][az-provider-register] コマンドを使って
az provider registerリソース プロバイダーの登録を最新の情報に更新します。az provider register --namespace Microsoft.ContainerService
リソース グループを作成する
Azure リソース グループは、Azure リソースが展開され管理される論理グループです。 リソース グループを作成する際は、場所を指定するよう求められます。 この場所は、リソース グループのメタデータが格納される場所です。また、リソースの作成時に別のリージョンを指定しない場合は、Azure でリソースが実行される場所です。
az group createコマンドを使用してリソース グループを作成します。 次の例では、WestUS2 の場所に myResourceGroup という名前のリソース グループを作成します。export RANDOM_SUFFIX=$(openssl rand -hex 3) export REGION="canadacentral" export MY_RESOURCE_GROUP_NAME="myAKSResourceGroup$RANDOM_SUFFIX" az group create --name $MY_RESOURCE_GROUP_NAME --___location $REGION結果:
{ "id": "/subscriptions/xxxxx-xxxxx-xxxxx-xxxxx/resourceGroups/myResourceGroupxxxxx", "___location": "WestUS2", "managedBy": null, "name": "myResourceGroupxxxxx", "properties": { "provisioningState": "Succeeded" }, "tags": null, "type": "Microsoft.Resources/resourceGroups" }
AKS クラスターを作成する
このセクションでは、次の構成で AKS クラスターを作成します。
- クラスターは、確実に動作するように 2 つのノードで構成されます。 ノードは、Kubernetes ノード コンポーネントとコンテナー ランタイムを実行する Azure 仮想マシン (VM) です。
- クラスター上のすべての Windows Server ノードの管理者資格情報は、
--windows-admin-passwordパラメーターと--windows-admin-usernameパラメーターによって設定されます。これは Windows Server のパスワード要件を満たしている必要があります。 - ノード プールは
VirtualMachineScaleSetsを使用します。
Azure CLI を使用して AKS クラスターを作成するには、次の手順に従います。
クラスターの Windows Server ノードの管理者資格情報として使用するユーザー名を作成します。
export WINDOWS_USERNAME="winadmin"前の手順で作成した管理者ユーザー名のパスワードを作成します。 パスワードは 14 文字以上で、Windows Server パスワードの複雑さの要件を満たしている必要があります。
export WINDOWS_PASSWORD=$(echo "P@ssw0rd$(openssl rand -base64 10 | tr -dc 'A-Za-z0-9!@#$%^&*()' | cut -c1-6)")az aks createコマンドを使用してクラスターを作成し、--windows-admin-usernameパラメーターと--windows-admin-passwordパラメーターを指定します。 次のコマンド例では、前のコマンドで設定したWINDOWS_USERNAMEとWINDOWS_PASSWORDの値を使用してクラスターを作成します。 一意性を得るために、ランダムなサフィックスがクラスター名に追加されます。export MY_AKS_CLUSTER="myAKSCluster$RANDOM_SUFFIX" az aks create \ --resource-group $MY_RESOURCE_GROUP_NAME \ --name $MY_AKS_CLUSTER \ --node-count 2 \ --enable-addons monitoring \ --generate-ssh-keys \ --windows-admin-username $WINDOWS_USERNAME \ --windows-admin-password $WINDOWS_PASSWORD \ --vm-set-type VirtualMachineScaleSets \ --network-plugin azure数分後、コマンドが完了し、クラスターに関する情報が JSON 形式で返されます。 場合によっては、クラスターのプロビジョニングに数分以上かかることがあります。 プロビジョニングには最大 10 分かかります。
パスワード検証エラーが発生し、設定したパスワードが長さと複雑さの要件を満たしている場合は、別のリージョンにリソース グループを作成してみてください。 その後、新しいリソース グループを使用してクラスターを作成してください。
ノード プールの作成時に管理者のユーザー名とパスワードを指定しない場合、ユーザー名は azureuser に設定され、パスワードはランダムな値に設定されます。 詳細については、「Windows Server に関する FAQ」を参照してください
管理者のユーザー名を変更することはできませんが、
az aks updateを使用して、AKS クラスターが Windows Server ノードに使用する管理者パスワードを変更できます。 詳細については、「Windows Server に関する FAQ」を参照してください。Windows Server コンテナー用のノード プールをサポートする AKS クラスターを実行するには、Azure CNI の (高度な) ネットワーク プラグインを使用するネットワーク ポリシーを、ご利用のクラスターで使用する必要があります。
--network-plugin azureパラメーターは Azure CNI を指定します。
ノード プールを追加する
既定では、Linux コンテナーを実行できるノード プールを使用して、すべての AKS クラスターが作成されます。 Linux ノード プールと共に Windows Server コンテナーを実行できる Windows ノード プールを追加する必要があります。 クラスターに Windows ノード プールがあるかどうかを確認するには、 kubectl get nodes -o wide コマンドを使用してクラスター上のノードを表示できます。
Windows ノード プールを作成するには、サポートされている OsType と OsSkuを指定する必要があります。 次の表の情報を使用して、クラスターに適した情報を確認します。
OsType |
OsSku |
既定値 | サポートされている K8s バージョン | 詳細 |
|---|---|---|---|---|
windows |
Windows2025 |
現在プレビューの段階です。 既定値ではありません。 | 1.32+ | 更新された既定値: コンテナー化された 2.0、第 2 世代イメージが既定で使用されます。 |
windows |
Windows2022 |
K8s 1.25-1.34 の既定値 | K8s 1.35 以降では使用できません | 2027 年 3 月に廃止。 既定値の更新: FIPS は既定で有効になっています。 |
windows |
Windows2019 |
K8s バージョン 1.24 以下の既定値 | K8s 1.32 以降では使用できません | 2026 年 3 月に廃止。 |
Windows Server 2022 は、Kubernetes バージョン 1.25-1.34 の既定のオペレーティング システムです。 Windows Server 2019 は、以前のバージョンの既定の OS です。 特定の OS SKU を指定しない場合、Azure によって、クラスターで使用される Kubernetes のバージョンの既定の SKU を使用して新しいノード プールが作成されます。
注
- Windows Server 2022 は、Kubernetes バージョン 1.34 がサポート終了になった後に廃止され、Kubernetes バージョン 1.35 以降ではサポートされません。
- Windows Server 2019 は、Kubernetes バージョン 1.32 がサポート終了になった後に廃止され、Kubernetes バージョン 1.33 以降ではサポートされません。
詳細については、「AKS リリース ノート」を参照してください。 最新の Windows Server OS バージョンを最新の状態に保ち、AKS でのサポートの予定のロードマップの詳細については確認するには、AKS のパブリック ロードマップを参照してください。
指定した
az aks nodepool addとOsTypeを使用して、OsSkuコマンドで Windows ノード プールを追加します。 特定の OS SKU を指定しない場合、Azure によって、クラスターで使用される Kubernetes のバージョンの既定の SKU を使用して新しいノード プールが作成されます。az aks nodepool add \ --resource-group $MY_RESOURCE_GROUP_NAME \ --cluster-name $MY_AKS_CLUSTER \ --os-type Windows \ --os-sku Windows2022 \ --name npwin \ --node-count 1このコマンドは 、npwin という名前の新しいノード プールを作成し、 それを myAKSCluster に追加します。 コマンドではまた、
az aks createの実行時に作成された既定の仮想ネットワークの既定のサブネットが使用されます。
クラスターに接続する
Kubernetes クラスターを管理するには、Kubernetes のコマンドライン クライアントである kubectl を使用します。 Azure Cloud Shell を使用している場合、kubectl は既にインストールされています。
kubectlをローカルにインストールして実行する場合は、az aks install-cli コマンドを使用します。
kubectlコマンドを使用して、Kubernetes クラスターに接続するようにaz aks get-credentialsを構成します。 このコマンドは、資格情報をダウンロードし、それを使用するように Kubernetes CLI を構成します。az aks get-credentials --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_AKS_CLUSTERクラスターへの接続を確認するには、クラスター ノードの一覧を返す
kubectl getコマンドを使用します。kubectl get nodes -o wide次の出力例は、クラスター内のすべてのノードを示しています。 すべてのノードの状態が [準備完了] であることを確認します。
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME aks-nodepool1-20786768-vmss000000 Ready agent 22h v1.27.7 10.224.0.4 <none> Ubuntu 22.04.3 LTS 5.15.0-1052-azure containerd://1.7.5-1 aks-nodepool1-20786768-vmss000001 Ready agent 22h v1.27.7 10.224.0.33 <none> Ubuntu 22.04.3 LTS 5.15.0-1052-azure containerd://1.7.5-1 aksnpwin000000 Ready agent 20h v1.27.7 10.224.0.62 <none> Windows Server 2022 Datacenter 10.0.20348.2159 containerd://1.6.21+azure注
各ノード プールのコンテナー ランタイムは、コンテナー ランタイムの下に表示されます。 コンテナー ランタイムの値は
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: sampleYAML マニフェスト ファイルの内訳については、「デプロイと YAML マニフェスト」を参照してください。
YAML ファイルをローカルに作成して保存する場合は、[ファイルのアップロード/ダウンロード] ボタンを選択し、ローカル ファイル システムからファイルを選択することで、CloudShell の既定のディレクトリにマニフェスト ファイルをアップロードできます。
kubectl applyコマンドを使用してアプリケーションをデプロイし、ご利用の YAML マニフェストの名前を指定します。kubectl apply -f sample.yaml次の出力例は、正常に作成されたデプロイとサービスを示しています。
{ "deployment.apps/sample": "created", "service/sample": "created" }
アプリケーションをテストする
アプリケーションが実行されると、Kubernetes サービスによってアプリケーション フロント エンドがインターネットに公開されます。 このプロセスが完了するまでに数分かかることがあります。 場合によっては、サービスのプロビジョニングに数分以上かかることがあります。 プロビジョニングには最大 10 分かかります。
kubectl get podsコマンドを使用して、デプロイされたポッドの状態を確認します。 続行する前に、すべてのポッドをRunningの状態にします。kubectl get podskubectl get serviceコマンドと--watch引数を使用して、進行状況を監視します。while true; do export EXTERNAL_IP=$(kubectl get service sample -o jsonpath="{.status.loadBalancer.ingress[0].ip}" 2>/dev/null) if [[ -n "$EXTERNAL_IP" && "$EXTERNAL_IP" != "<pending>" ]]; then kubectl get service sample break fi echo "Still waiting for external IP assignment..." sleep 5 done最初に、サンプル サービスの "EXTERNAL-IP" が "保留中" として表示されます。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE sample LoadBalancer xx.xx.xx.xx pending xx:xxxx/TCP 2m"EXTERNAL-IP" アドレスが "保留中" から実際のパブリック IP アドレスに変わったら、 を使用して ウォッチ プロセスを停止します。
CTRL-Ckubectl次の出力例は、サービスに割り当てられている有効なパブリック IP アドレスを示しています。
{ "NAME": "sample", "TYPE": "LoadBalancer", "CLUSTER-IP": "10.0.37.27", "EXTERNAL-IP": "52.179.23.131", "PORT(S)": "80:30572/TCP", "AGE": "2m" }数分後にサービスの外部 IP アドレスに対して Web ブラウザーを開いて、実際のサンプル アプリを確認します。
次のステップ
このクイックスタートでは、Kubernetes クラスターをデプロイした後、そこへ Windows Server コンテナー内の ASP.NET サンプル アプリケーションをデプロイしました。 このサンプル アプリケーションはデモ専用であり、Kubernetes アプリケーションのすべてのベスト プラクティスを表すわけではありません。 実稼動用に AKS を使用した完全なソリューションを作成するうえでのガイダンスについては、AKS ソリューション ガイダンスに関する記事を参照してください。
AKS の詳細を学習し、コードからデプロイまでの完全な例を確認するには、Kubernetes クラスター チュートリアルに進んでください。
Azure Kubernetes Service