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

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

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

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

開始する前に

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

手順に従う場合:

  • 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という名前のファイルを作成し、次の 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 分と考えてください。

進行状況を監視するには、--watch引数と共に kubectl get service コマンドを使用します。

kubectl get service sample --watch

最初に、sample サービスの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 アドレスを使用できます。

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

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

kubectl get pods -n default

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

kubectl scale --replicas=3 deployment/sample

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

kubectl get pods -n default

次のステップ