PowerShell を使用して Azure Kubernetes Service (AKS) クラスター上に Windows Server コンテナーを作成する
Azure Kubernetes Service (AKS) は、クラスターをすばやくデプロイおよび管理することができる、マネージド Kubernetes サービスです。 この記事では、PowerShell を使用して Windows Server 2019 コンテナーを実行する AKS クラスターをデプロイします。 また、Windows Server コンテナー内の ASP.NET
サンプル アプリケーションをクラスターにデプロイします。
この記事では、Kubernetes の基本的な概念を理解していることを前提としています。 詳細については、「Azure Kubernetes Services (AKS) における Kubernetes の中心概念」を参照してください。
前提条件
Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
- クラスターの作成に使用している ID には、適切な最小限のアクセス許可が与えられています。 AKS のアクセスと ID の詳細については、「Azure Kubernetes Service (AKS) でのアクセスと ID オプション」を参照してください。
- ローカルで PowerShell を使用する場合は、Az PowerShell モジュールをインストールしたうえで、Connect-AzAccount コマンドレットを使用して自分の Azure アカウントに接続する必要があります。 Az PowerShell モジュールのインストールの詳細については、「Azure PowerShell のインストール」を参照してください。
Azure Cloud Shell を使用する
Azure では、ブラウザーを介して使用できる対話型のシェル環境、Azure Cloud Shell がホストされています。 Cloud Shell で Bash または PowerShell を使用して、Azure サービスを操作できます。 ローカル環境に何もインストールしなくても、Cloud Shell にプレインストールされているコマンドを使用して、この記事のコードを実行できます。
Azure Cloud Shell を開始するには:
オプション | 例とリンク |
---|---|
コード ブロックの右上隅にある [使ってみる] を選択します。 [使ってみる] を選択しても、コードは Cloud Shell に自動的にコピーされません。 | ![]() |
https://shell.azure.com に移動するか、[Cloud Shell を起動する] ボタンを選択して、ブラウザーで Cloud Shell を開きます。 | ![]() |
Azure portal の右上にあるメニュー バーの [Cloud Shell] ボタンを選択します。 | ![]() |
Azure Cloud Shell でこの記事のコードを実行するには:
Cloud Shell を開始します。
[コピー] ボタンを選択して、コード ブロックをコードにコピーします。
Windows と Linux では Ctrl+Shift+V キーを選択し、macOS では Cmd+Shift+V キーを選択して、コードを Cloud Shell セッションに貼り付けます。
Enter キーを選択して、コードを実行します。
複数の Azure サブスクリプションをお持ちの場合は、リソースが課金の対象となる適切なサブスクリプションを選択してください。 Set-AzContext コマンドレットを使用して、特定のサブスクリプション ID を選択します。
Set-AzContext -SubscriptionId 00000000-0000-0000-0000-000000000000
制限事項
複数のノード プールをサポートする AKS クラスターを作成および管理する場合には、次の制限があります。
- 最初のノード プールは削除できません。
次の追加の制限事項は Windows Server ノード プールに該当します。
- AKS クラスターでは、最大で 10 のノード プールを作成できます。
- AKS クラスターでは、最大で 100 のノードを各ノード プールで作成できます。
- Windows Server ノード プール名は 6 文字に制限されています。
リソース グループを作成する
Azure リソース グループは、Azure リソースが展開され管理される論理グループです。 リソース グループを作成する際は、場所を指定するよう求められます。 この場所は、リソース グループのメタデータが格納される場所です。リソースの作成時に別のリージョンを指定しない場合は、Azure でリソースが実行される場所でもあります。 New-AzResourceGroup コマンドレットを使用してリソース グループを作成します。
次の例では、myResourceGroup という名前のリソース グループを eastus に作成します。
Note
この記事では、このチュートリアルのコマンドに対して PowerShell 構文を使用します。 Azure Cloud Shell を使用する場合、[Cloud Shell] ウィンドウの左上のドロップダウンが [PowerShell] に設定されていることを確認してください。
New-AzResourceGroup -Name myResourceGroup -Location eastus
次の出力例では、正常に作成されたリソース グループが示されています。
ResourceGroupName : myResourceGroup
Location : eastus
ProvisioningState : Succeeded
Tags :
ResourceId : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup
AKS クラスターを作成する
Windows Server コンテナー用のノード プールをサポートする AKS クラスターを実行するには、Azure CNI の (高度な) ネットワーク プラグインを使用するネットワーク ポリシーを、ご利用のクラスターで使用する必要があります。 必要なサブネット範囲とネットワークに関する考慮事項を計画するのに役立つ詳細情報については、Azure CNI ネットワークの構成に関するページを参照してください。 myAKSCluster という名前の AKS クラスターを作成するには、下の New-AzAksCluster コマンドレットを使用します。 次の例では、必要なネットワーク リソースが存在しない場合、それらが作成されます。
Note
クラスターが確実に動作するようにするには、既定のノード プールで少なくとも 2 つのノードを実行する必要があります。
$AdminCreds = Get-Credential -Message 'Please create the administrator credentials for your Windows Server containers'
New-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -NodeCount 2 -NetworkPlugin azure -NodeVmSetType VirtualMachineScaleSets -WindowsProfileAdminUserName $AdminCreds.UserName -WindowsProfileAdminUserPassword $AdminCreds.Password -GenerateSshKey
Note
このリージョンでバージョンがサポートされていないために AKS クラスターを作成できない場合は、Get-AzAksVersion -Location eastus
コマンドを使用して、このリージョンでサポートされているバージョンの一覧を確認することができます。
数分後、コマンドが完了し、クラスターに関する情報が返されます。 場合によっては、クラスターのプロビジョニングに数分以上かかることがあります。 このような場合は、最大 10 分と考えてください。
Windows Server ノード プールを追加する
既定では、Linux コンテナーを実行できるノード プールを使用して、AKS クラスターが作成されます。 Windows Server コンテナーを Linux ノード プールと共に実行できるノード プールをさらに追加するには、New-AzAksNodePool
コマンドレットを使用します。
New-AzAksNodePool -ResourceGroupName myResourceGroup -ClusterName myAKSCluster -VmSetType VirtualMachineScaleSets -OsType Windows -Name npwin
上記のコマンドでは、npwin という名前の新しいノード プールが作成され、それが myAKSCluster に追加されます。 Windows Server コンテナーを実行するノード プールを作成する場合、-VmSize
の既定値は Standard_D2s_v3 となります。 -VmSize
パラメーターを設定することを選択した場合は、制限された VM サイズの一覧を確認してください。 推奨される最小サイズは、Standard_D2s_v3 です。 前記のコマンドではまた、New-AzAksCluster
の実行時に作成された既定の VNET 内の既定のサブネットが使用されます。
クラスターに接続する
Kubernetes クラスターを管理するには、Kubernetes のコマンドライン クライアントである kubectl を使用します。 Azure Cloud Shell を使用している場合、kubectl
は既にインストールされています。 kubectl
をローカルにインストールするには、Install-AzAksKubectl
コマンドレットを使用します。
Install-AzAksKubectl
Kubernetes クラスターに接続するように kubectl
を構成するには、Import-AzAksCredential コマンドレットを使用します。 このコマンドは、資格情報をダウンロードし、それを使用するように Kubernetes CLI を構成します。
Import-AzAksCredential -ResourceGroupName myResourceGroup -Name myAKSCluster
クラスターへの接続を確認するには、クラスター ノードの一覧を返す kubectl get コマンドを使用します。
kubectl get nodes
次の出力例は、クラスター内のすべてのノードを示しています。 すべてのノードの状態が [準備完了] であることを確認します。
NAME STATUS ROLES AGE VERSION
aks-nodepool1-12345678-vmssfedcba Ready agent 13m v1.16.7
aksnpwin987654 Ready agent 108s v1.16.7
アプリケーションをデプロイする
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 定義をコピーします。 Azure Cloud Shell を使用する場合は、仮想システムまたは物理システムで作業するときと同じように、code
、vi
、nano
のいずれかを使用してこのファイルを作成できます。
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
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 の課金を回避するために、この後のチュートリアルを実行しない場合は、Remove-AzResourceGroup コマンドレットを使用して、リソース グループ、コンテナー サービス、およびすべての関連リソースを削除します。
Remove-AzResourceGroup -Name myResourceGroup
注意
AKS クラスターはシステム割り当てマネージド ID (このクイックスタートで使用した既定の ID オプション) を使用して作成されました。ID はプラットフォームによって管理され、削除する必要はありません。
次のステップ
この記事では、Kubernetes クラスターをデプロイし、そこに、Windows Server コンテナー内の ASP.NET
サンプル アプリケーションをデプロイしました。
AKS の詳細を参照し、デプロイの例の完全なコードを確認するには、Kubernetes クラスター チュートリアルに進んでください。