次の方法で共有


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-typeWindows に設定する。
    • os-skuWindows2019 に設定する。
  • Windows Server 2022 を使用するには、次のパラメーターを指定します。
    • os-typeWindows に設定する。
    • os-skuWindows2022 に設定します (省略可能)。

次のコマンドは、 $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 コンテナーを実行できるノードでスケジュールされるようにします。

  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 アドレスが pending から IP アドレスに変わったら、Ctrl + C キーを押して kubectl ウォッチ プロセスを停止します。 次の出力例は、サービスに割り当てられている有効なパブリック 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 コンテナーが起動しない場合があります。

ノード プールの削除

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

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

次のステップ

Arc による AKS 対応の概要