Linux アプリをデプロイする

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

このガイドでは、Azure Arc によって有効になっている AKS の Kubernetes クラスターに、Web フロントエンドと Redis データベース インスタンスを含むマルチコンテナー アプリをデプロイする方法について説明します。また、アプリをテストしてスケーリングする方法についても説明します。

この攻略ガイドは、Kubernetes の概念についての基礎知識が前提となっています。 詳細については、「 Kubernetes の主要概念を参照してください。

開始する前に

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

  • 少なくとも 1 つの Linux ワーカー ノードが稼働している AKS クラスター。
  • クラスターにアクセスするための kubeconfig ファイル。
  • AksHci PowerShell モジュールがインストールされます。 詳細については、 Install-AksHci を参照してください。

手順を実行する場合:

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

Note

ネットワークを別のターゲット クラスターと共有するターゲット クラスターをデプロイすると、ロード バランサーの IP アドレスの競合が発生する可能性があります。 IP アドレスの競合は、同じ AksHciClusterNetwork オブジェクトを共有するターゲット クラスターで異なるポートを使用する 2 つのワークロードをデプロイした場合に発生する可能性があります。 IP アドレスとポート マッピングが HA プロキシ内で割り当てられる方法により、重複する IP アドレスが割り当てられる可能性があります。 この場合、ワークロードを再デプロイするまで、一方または両方のワークロードでランダムなネットワーク接続の問題が発生する可能性があります。 ワークロードを再デプロイする場合は、同じポートを使用して各ワークロードにサービス IP アドレスを割り当てるか、異なる AksHciClusterNetwork オブジェクトを使用するターゲット クラスターにワークロードを再デプロイできます。

アプリケーションのデプロイ

Kubernetes のマニフェスト ファイルでは、どのコンテナー イメージを実行するかなど、クラスターの望ましい状態を定義します。 このチュートリアルでは、マニフェストを使用して、 Azure 投票アプリを実行するために必要なすべてのオブジェクトを作成。 このマニフェストには、2 つの Kubernetes デプロイが含まれています。1 つはサンプルの Azure Vote Python アプリ用、もう 1 つは Redis インスタンス用です。 2 つの Kubernetes サービスも作成されます。Redis インスタンスの内部サービスと、インターネットから Azure Vote アプリにアクセスするための外部サービスです。

azure-vote.yaml という名前のファイルを作成し次の YAML 定義をコピーして貼り付けます。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: azure-vote-back
spec:
  replicas: 1
  selector:
    matchLabels:
      app: azure-vote-back
  template:
    metadata:
      labels:
        app: azure-vote-back
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      containers:
      - name: azure-vote-back
        image: redis
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        ports:
        - containerPort: 6379
          name: redis
---
apiVersion: v1
kind: Service
metadata:
  name: azure-vote-back
spec:
  ports:
  - port: 6379
  selector:
    app: azure-vote-back
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: azure-vote-front
spec:
  replicas: 1
  selector:
    matchLabels:
      app: azure-vote-front
  template:
    metadata:
      labels:
        app: azure-vote-front
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      containers:
      - name: azure-vote-front
        image: mcr.microsoft.com/azuredocs/azure-vote-front:v1
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        ports:
        - containerPort: 80
        env:
        - name: REDIS
          value: "azure-vote-back"
---
apiVersion: v1
kind: Service
metadata:
  name: azure-vote-front
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: azure-vote-front

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

kubectl apply -f azure-vote.yaml

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

deployment "azure-vote-back" created
service "azure-vote-back" created
deployment "azure-vote-front" created
service "azure-vote-front" created

アプリをテストする

アプリが実行されると、Kubernetes サービスによってアプリ フロントエンドがインターネットに公開されます。 このプロセスが完了するまでに数分かかることがあります。

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

kubectl get service azure-vote-front --watch

最初に、azure-vote-front サービスの EXTERNAL-IP保留中として表示されます

NAME               TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
azure-vote-front   LoadBalancer   10.0.37.27      <pending>     80:30572/TCP   22m

EXTERNAL-IP アドレスが pending から実際のパブリック IP アドレスに変更された場合は、CTRL-C を使用してkubectlウォッチ プロセスを停止します。 次の出力例は、サービスに割り当てられている有効なパブリック IP アドレスを示しています。

NAME               TYPE           CLUSTER-IP   EXTERNAL-IP     PORT(S)        AGE
azure-vote-front   LoadBalancer   10.0.37.27   52.179.23.131   80:30572/TCP   24m

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

Azure の Kubernetes クラスターにデプロイされた Azure Voting App アプリケーションのホーム ページのスクリーンショット。

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

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

kubectl get pods -n default

次の出力例を見ると、フロントエンド ポッドとバックエンド ポッドが 1 つずつ存在することがわかります。

NAME                                READY     STATUS    RESTARTS   AGE
azure-vote-back-6bdcb87f89-g2pqg    1/1       Running   0          25m
azure-vote-front-84c8bf64fc-cdq86   1/1       Running   0          25m

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

kubectl scale --replicas=5 deployment/azure-vote-front

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

kubectl get pods -n default
Name                                READY   STATUS    RESTARTS   AGE
azure-vote-back-6bdcb87f89-g2pqg    1/1     Running   0          31m
azure-vote-front-84c8bf64fc-cdq86   1/1     Running   0          31m
azure-vote-front-84c8bf64fc-56h64   1/1     Running   0          80s
azure-vote-front-84c8bf64fc-djkp8   1/1     Running   0          80s
azure-vote-front-84c8bf64fc-jmmvs   1/1     Running   0          80s
azure-vote-front-84c8bf64fc-znc6z   1/1     Running   0          80s

次のステップ

Azure Monitor を使用してクラスターとアプリケーションを監視する