Windows アプリケーションをデプロイする

適用対象: AKS on Azure Stack HCI 22H2、AKS on Windows Server

このチュートリアルでは、Windows Server コンテナー内の ASP.NET サンプル アプリケーションを、Arc によって有効になっている AKS のAzure Kubernetes Service (AKS) クラスターにデプロイし、アプリケーションをテストおよびスケーリングする方法について説明します。 また、Windows ノードを Active Directory ドメインに参加させる方法についても説明します。

このチュートリアルでは、Kubernetes の概念の基本的な理解を前提としています。 詳細については、「 Azure Arc で有効になっている AKS の Kubernetes のコア概念」を参照してください。

開始する前に

次の要件を満たしていることを確認します。

  • 少なくとも 1 つの Windows ワーカー ノードが稼働しているAzure Kubernetes Service クラスター
  • クラスターにアクセスするための kubeconfig ファイル。
  • AksHci PowerShell モジュールがインストールされています。

手順に従うと、次のようになります。

  • PowerShell 管理ウィンドウでコマンドを実行します。
  • OS 固有のワークロードが適切なコンテナー ホストに配置されていることを確認する。 Kubernetes クラスターに Linux と Windows ワーカー ノードが混在している場合は、ノード セレクターまたはテイントと容認のいずれかを使用できます。 詳細については、ノード セレクター、テイントと容認の使用に関するページを参照してください。

アプリケーションをデプロイする

Kubernetes マニフェスト ファイルは、実行するコンテナー イメージなど、クラスターの目的の状態を定義します。 これらの手順では、マニフェストを使用して、Windows Server コンテナーで ASP.NET サンプル アプリケーションを実行するために必要なすべてのオブジェクトを作成します。 このマニフェストには、ASP.NET サンプル アプリケーションの Kubernetes デプロイと、インターネットからアプリケーションにアクセスするための外部 Kubernetes サービスが含まれています。

ASP.NET サンプル アプリケーションは、.NET Frameworkサンプルの一部として提供され、Windows Server コンテナーで実行されます。 AKS Arc では、Windows Server コンテナーが Windows Server 2019 のイメージに基づいている必要があります。

Kubernetes マニフェスト ファイルでは、Windows Server コンテナーを実行できるノードで ASP.NET サンプル アプリケーションのポッドを実行するようにクラスターに指示するノード セレクターも定義する必要があります。

という名前sample.yamlのファイルをCreateし、次の YAML 定義をコピー/貼り付けます。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: sample
  labels:
    app: sample
spec:
  replicas: 1
  template:
    metadata:
      name: sample
      labels:
        app: sample
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": windows
      containers:
      - name: sample
        image: mcr.microsoft.com/dotnet/framework/samples:aspnetapp
        resources:
          limits:
            cpu: 1
            memory: 800M
          requests:
            cpu: .1
            memory: 300M
        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 アドレスを示しています。

NAME    TYPE           CLUSTER-IP   EXTERNAL-IP     PORT(S)        AGE
sample  LoadBalancer   10.0.37.27   52.179.23.131   80:30572/TCP   2m

サンプル アプリが動作していることを確認するには、Web ブラウザーを開いてサービスの外部 IP アドレスにアクセスします。

AKS クラスターにデプロイされた Windows 用の ASP.NET サンプル アプリケーションのホーム ページのスクリーンショット。

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

アプリケーション ポッドをスケーリングする

アプリケーション フロントエンドの 1 つのレプリカを作成しました。 ご利用のクラスターに存在するポッドの数と状態を確認するには、次のように kubectl get コマンドを使用します。

kubectl get pods -n default

"サンプル" デプロイのポッドの数を変更するには、kubectl scale コマンドを使用します。 次の例では、フロントエンド ポッドの数を 3 に増やしています。

kubectl scale --replicas=3 deployment/sample

もう一度を実行 kubectl get pods して、ポッドが作成されたことを確認します。 しばらくすると、追加したポッドがクラスターで利用できる状態になります。

kubectl get pods -n default

次の手順