Windows Server コンテナーを作成する
適用対象: Azure Stack HCI バージョン 23H2
この記事では、Azure CLI を使用して、Windows Server コンテナーを実行する既存の AKS クラスターにノード プールをデプロイする方法について説明します。 また、Windows Server コンテナー内の ASP.NET サンプル アプリケーションをクラスターにデプロイする方法についても説明します。
前提条件
AKS クラスターの作成方法の手順に従って AKS クラスターを作成します。
ノード プールを追加する
既定では、Linux コンテナーを実行できるノード プールを使用して Kubernetes クラスターが作成されます。 Linux ノード プールと共に Windows Server コンテナーを実行できる別のノード プールを追加する必要があります。
az aksarc nodepool add
コマンドとパラメーター --os-type Windows
を使用して、Windows コンテナー ホストを含むノード プールを追加します。 オペレーティング システム SKU が指定されていない場合、ノード プールはクラスターの Kubernetes バージョンに基づいて既定の OS に設定されます。 Kubernetes バージョン 1.25.0 以降の場合、Windows Server 2022 が既定のオペレーティング システムです。 Windows Server 2019 は、以前のバージョンの既定の OS です。
- Windows Server 2019 を使用するには、次のパラメーターを指定します。
os-type
をWindows
に設定する。os-sku
をWindows2019
に設定する。
- Windows Server 2022 を使用するには、次のパラメーターを指定します。
os-type
をWindows
に設定する。os-sku
をWindows2022
に設定します (省略可能)。
次のコマンドは、 $mynodepool
という名前の新しいノード プールを作成し、1 つの Windows Server 2022 ノードを使用して $myAKSCluster
に追加します。
az aksarc nodepool add --resource-group $myResourceGroup --cluster-name $myAKSCluster --name $mynodepool --node-count 1 --os-type Windows --os-sku Windows2022
AKS クラスターに接続する
これで、ローカル コンピューターから az connectedk8s proxy
コマンドを実行して、Kubernetes クラスターに接続できます。 このコマンドを実行する前に、必ず Azure にサインインしてください。 Azure サブスクリプションが複数ある場合は、az account set コマンドを使って適切なサブスクリプション ID を選びます。
このコマンドは、Kubernetes クラスターの kubeconfig をローカル コンピューターにダウンロードし、オンプレミスの Kubernetes クラスターへのプロキシ接続チャネルを開きます。 このコマンドが実行されている限り、チャネルは開いています。 好きなだけ長くこのコマンドを実行して、クラスターにアクセスしてみましょう。 コマンドがタイムアウトした場合は、CLI ウィンドウを閉じ、新しいウィンドウを開き、コマンドをもう一度実行します。
次のコマンドを正常に実行するには、AKS クラスターをホストするリソース グループに対する共同作成者アクセス許可が必要です。
az connectedk8s proxy --name $aksclustername --resource-group $resource_group --file .\aks-arc-kube-config
予想される出力:
Proxy is listening on port 47011
Merged "aks-workload" as current context in .\aks-arc-kube-config
Start sending kubectl requests on 'aks-workload' context using kubeconfig at .\aks-arc-kube-config
Press Ctrl+C to close proxy.
このセッションを実行したまま、別のターミナル/コマンド プロンプトから Kubernetes クラスターに接続します。 kubectl get コマンドを実行して、Kubernetes クラスターに接続できることを確認します。 このコマンドは、クラスター ノードの一覧を返します。
kubectl get node -A --kubeconfig .\aks-arc-kube-config
次の出力例は、前の手順で作成したノードを示しています。 ノードの状態が "準備完了" であることを確認します。
NAME STATUS ROLES AGE VERSION
moc-lesdc78871d Ready control-plane 6d8h v1.26.3
moc-lupeeyd0f8c Ready <none> 6d8h v1.26.3
moc-ww2c8d5ranw Ready <none> 7m18s v1.26.3
アプリケーションの配置
Kubernetes のマニフェスト ファイルでは、どのコンテナー イメージを実行するかなど、クラスターの望ましい状態を定義します。
YAML マニフェストを使用して、Windows Server コンテナーで ASP.NET サンプル アプリケーションを実行するために必要なすべてのオブジェクトを作成できます。 このマニフェストには、ASP.NET サンプル アプリケーション用の Kbernetes 配置 インターネットからアプリケーションにアクセスするための Kubernetes サービスが含まれます。
ASP.NET サンプル アプリケーションは、 .NET Framework サンプルの一部として提供され Windows Server コンテナーで実行されます。 AKS では、Windows Server コンテナーは Windows Server 2019 以降のイメージをベースにしている必要があります。 Kubernetes マニフェスト ファイルでは ノード セレクターも定義する必要があります ASP.NET サンプル アプリケーションのポッドが、Windows Server コンテナーを実行できるノードでスケジュールされるようにします。
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 --kubeconfig .\\aks-arc-kube-config
次の出力例は、デプロイとサービスが正常に作成されたことを示しています。
deployment.apps/sample created
service/sample created
アプリケーションをテストする
アプリケーションが実行されると、Kubernetes サービスによってアプリケーション フロント エンドがインターネットに公開されます。 このプロセスが完了するまでに数分かかることがあります。 場合によっては、サービスのプロビジョニングに数分以上かかることがあります。 プロビジョニングには最大 10 分かかります。
kubectl get service コマンドと
--watch
引数を使用して、進行状況を監視します。kubectl get service sample --watch --kubeconfig .\aks-arc-kube-config
最初に、サンプル サービスの EXTERNAL-IP が "保留中" として表示されます。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE sample LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 6s
EXTERNAL-IP アドレスが pending から IP アドレスに変わったら、Ctrl + C キーを押して kubectl ウォッチ プロセスを停止します。 次の出力例は、サービスに割り当てられている有効なパブリック IP アドレスを示しています。
sample LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
サンプル サービスの外部 IP アドレスとポートに Web ブラウザーを開いて、動作中のサンプル アプリを確認します。
ページの読み込み時に接続タイムアウトが発生した場合は、
kubectl get pods --watch
コマンドを使用してサンプル アプリの準備ができていることを確認する必要があります。 外部 IP アドレスが使用可能になるまでは、Windows コンテナーが起動しない場合があります。
ノード プールの削除
az akshybrid nodepool delete
コマンドを使用してノード プールを削除します。
az aksarc nodepool delete -g $myResourceGroup --cluster-name $myAKSCluster --name $mynodepool --no-wait