Azure Kubernetes Service on Azure Stack HCI and Windows Server に Windows アプリケーションをデプロイする

適用対象: Azure Stack HCI and Windows Server

このチュートリアルでは、Windows Server コンテナー内の ASP.NET サンプル アプリケーションを Kubernetes クラスターにデプロイする方法を説明し、アプリケーションのテストとスケーリングの方法を確認します。 また、Windows ノードを Active Directory ドメインに参加させる方法についても説明します。

このチュートリアルでは、Kubernetes の概念の基本的な理解を前提としています。 詳細については、「AKS on Azure Stack HCI and Windows Server に関する Kubernetes の中心概念」を参照してください。

始める前に

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

さらに:

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

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

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

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

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

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:
        "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 アドレスにアクセスします。

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

次の手順