チュートリアル: Linux アプリをデプロイする

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

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

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

開始する前に

次の要件の準備ができていることを確認します。

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

チュートリアルの手順を実行する場合:

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

注意

ネットワークを別のターゲット クラスターと共有するターゲット クラスターをデプロイすると、ロード バランサーの 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 という名前のファイルをCreateし、次の 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 サービスによってアプリ フロントエンドがインターネットに公開されます。 このプロセスが完了するまでに数分かかることがあります。

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

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 アドレスが保留中から実際のパブリック IP アドレスに変更された場合は、Ctrl キーを押しながら C キーを押して、watch プロセスを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 を使用してクラスターとアプリケーションを監視する