Share via


Windows Server コンテナーを作成する

適用対象: Azure Stack HCI バージョン 23H2

この記事では、Azure CLI を使用して、Windows Server コンテナーを実行する既存の AKS クラスターに nodepool をデプロイします。 また、Windows Server コンテナー内の ASP.NET サンプル アプリケーションをクラスターにデプロイします。

前提条件

「AKS クラスターを作成する方法」の手順 に従って、AKS クラスターを作成します

ノードプールを追加する

既定では、Linux コンテナーを実行できる nodepool を使用して Kubernetes クラスターが作成されます。 Linux ノードプールと共に Windows Server コンテナーを実行できる別の nodepool を追加する必要があります。

パラメーター を指定した コマンドを使用して、Windows コンテナー ホストを az aksarc nodepool add 含む nodepool を追加します --os-type Windows。 オペレーティング システム SKU が指定されていない場合、nodepool はクラスターの Kubernetes バージョンに基づいて既定の OS に設定されます。 Kubernetes バージョン 1.25.0 以降の場合、Windows Server 2022 が既定のオペレーティング システムです。 Windows Server 2019 は、以前のバージョンの既定の OS です。

  • Windows Server 2019 を使用するには、次のパラメーターを指定します。
    • os-typeWindows に設定する。
    • os-skuWindows2019 に設定する。
  • Windows Server 2022 を使用するには、次のパラメーターを指定します。
    • os-typeWindows に設定する。
    • os-sku を に設定します Windows2022 (省略可能)。

次のコマンドは、 という名前 $mynodepool の新しいノードプールを作成し、それを 1 つの Windows 2019 ノードで に $myAKSCluster 追加します。

az aksarc nodepool add --resource-group $myResourceGroup --cluster-name $myAKSCluster --name $mynodepool --node-count 1 --os-type Windows --os-sku Windows2019

AKS クラスターに接続する

これで、ローカル コンピューターから コマンドを実行して、Kubernetes クラスターに az connectedk8s proxy 接続できます。 このコマンドを実行する前に、必ず 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 サンプル アプリケーションの Kubernetes デプロイ と、インターネットからアプリケーションにアクセスするための Kubernetes サービスが含まれます。

ASP.NET サンプル アプリケーションは、.NET Frameworkサンプルの一部として提供され、Windows Server コンテナーで実行されます。 AKS では、Windows Server コンテナーは Windows Server 2019 以降のイメージをベースにしている必要があります。 Kubernetes マニフェスト ファイルでは 、windows Server コンテナーを実行できるノードで ASP.NET サンプル アプリケーションのポッドがスケジュールされるように、ノード セレクターも定義する必要があります。

  1. 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 マニフェスト」を参照してください。

  2. kubectl apply コマンドを使用してアプリケーションをデプロイし、ご利用の YAML マニフェストの名前を指定します。

    kubectl apply -f sample.yaml --kubeconfig .\\aks-arc-kube-config
    

次の出力例は、正常に作成されたデプロイおよびサービスを示しています。

deployment.apps/sample created
service/sample created

アプリケーションをテストする

アプリケーションが実行されると、Kubernetes サービスによってアプリケーション フロント エンドがインターネットに公開されます。 このプロセスが完了するまでに数分かかることがあります。 場合によっては、サービスのプロビジョニングに数分以上かかることがあります。 プロビジョニングには最大 10 分かかります。

  1. 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 アドレスが保留中から IP アドレスに変わったら、Ctrl + C キーを押して kubectl watch プロセスを停止します。 次の出力例は、サービスに割り当てられている有効なパブリック IP アドレスを示しています。

    sample LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
    
  2. サンプル サービスの外部 IP アドレスとポートに Web ブラウザーを開いて、 サンプル アプリの動作を確認します。

    サンプル アプリケーション ASP.NET 示すスクリーンショット。

    ページの読み込み時に接続タイムアウトが発生した場合は、 コマンドを使用してサンプル アプリの準備ができていることを確認する kubectl get pods --watch 必要があります。 外部 IP アドレスが使用可能になるまでは、Windows コンテナーが起動しない場合があります。

nodepool の削除

コマンドを使用して nodepool を az akshybrid nodepool delete 削除します。

az aksarc nodepool delete -g $myResourceGroup --cluster-name $myAKSCluster --name $mynodepool --no-wait

次の手順

この記事では、既存の AKS クラスターに Windows ノードプールをデプロイし、それに Windows Server コンテナーに ASP.NET サンプル アプリケーションをデプロイしました。