チュートリアル - Azure Kubernetes Service (AKS) でアプリケーションをスケーリングする

前のチュートリアルに従った場合は、Kubernetes クラスターと Azure Store Front アプリが動作しています。

このチュートリアルでは、7 つのうちのパート 6 で、アプリ内のポッドをスケールアウトし、ポッドの自動スケーリングを試み、Azure VM ノードの数をスケーリングして、ワークロードをホストするためのクラスターの容量を変更します。 以下の方法について説明します。

  • Kubernetes ノードをスケーリングします。
  • アプリケーションを実行する Kubernetes ポッドを手動でスケーリングします。
  • アプリのフロントエンドを実行する自動スケーリング ポッドを構成します。

開始する前に

前のチュートリアルでは、アプリケーションをコンテナー イメージにパッケージ化し、そのイメージを Azure Container Registry にアップロードし、AKS クラスターを作成し、アプリケーションをデプロイし、Azure Service Bus を使用して更新されたアプリケーションを再デプロイしました。 これらのステップを完了していない場合は、 チュートリアル 1 - AKS用のアプリケーションを準備するから始めます。

このチュートリアルには、Azure CLI バージョン 2.34.1 以降が必要です。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。

ポッドを手動でスケーリングする

  1. kubectl get コマンドを使用して、クラスター内のポッドを表示します。

    kubectl get pods
    

    次の出力例は、Azure Store Front アプリを実行しているポッドを示しています:

    NAME                               READY     STATUS     RESTARTS   AGE
    order-service-848767080-tf34m      1/1       Running    0          31m
    product-service-4019737227-2q2qz   1/1       Running    0          31m
    store-front-2606967446-2q2qz       1/1       Running    0          31m
    
  2. kubectl scaleコマンドを使用して、 ストア フロント デプロイのポッドの数を手動で変更します。

    kubectl scale --replicas=5 deployment.apps/store-front
    
  3. kubectl get pods コマンドを使用して、追加のポッドが作成されたことを確認します。

    kubectl get pods
    

    次の出力例は、Azure Store Front アプリを実行している追加のポッドを示しています:

                                      READY     STATUS    RESTARTS   AGE
    store-front-2606967446-2q2qzc     1/1       Running   0          15m
    store-front-3309479140-2hfh0      1/1       Running   0          3m
    store-front-3309479140-bzt05      1/1       Running   0          3m
    store-front-3309479140-fvcvm      1/1       Running   0          3m
    store-front-3309479140-hrbf2      1/1       Running   0          15m
    store-front-3309479140-qphz8      1/1       Running   0          3m
    

ポッドを自動スケールする

ポッドの水平オートスケーラーを使用するには、すべてのコンテナーで CPU 要求と制限が定義されており、ポッドで要求が指定されている必要があります。 aks-store-quickstart デプロイでは、 フロントエンド コンテナーは、1000m CPU の制限で 1m CPU を要求します。

これらのリソースの要求と制限は、短縮された次の YAML の例に示されているようにコンテナーごとに定義されています。

...
  containers:
  - name: store-front
    image: ghcr.io/azure-samples/aks-store-demo/store-front:latest
    ports:
    - containerPort: 8080
      name: store-front
...
    resources:
      requests:
        cpu: 1m
...
      limits:
        cpu: 1000m
...

マニフェスト ファイルを使用してポッドを自動スケーリングする

  1. 以下に要約したマニフェスト ファイル aks-store-quickstart-hpa.yaml の例に示すように、自動スケーラービヘイビアーとリソースの制限を定義するマニフェスト ファイルを作成します。

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: store-front-hpa
    spec:
      maxReplicas: 10 # define max replica count
      minReplicas: 3  # define min replica count
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: store-front
      metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 50
    
  2. kubectl apply コマンドを使用して、自動スケーラー マニフェスト ファイルを適用します。

    kubectl apply -f aks-store-quickstart-hpa.yaml
    
  3. kubectl get hpa コマンドを使用して、自動スケーラーの状態を確認します。

    kubectl get hpa
    

    数分後、Azure Store Front アプリの負荷が最小限で、ポッド レプリカの数は 3 に減少します。 もう一度 kubectl get pods を実行すると、不要なポッドが削除されていることがわかります。

Note

Kubernetes ベースのイベント ドリブン オートスケーラー (KEDA) AKS アドオンをクラスターに対して有効にして、プロセスする必要があるイベントの数に基づいてスケーリングを実行できます。 詳細については、「 Kubernetes Event-Driven Autoscaling (KEDA) アドオン (プレビュー)を使用してアプリケーションの自動スケールを簡略化できるようにする」を参照してください。

AKS ノードの手動スケーリング

前のチュートリアルでコマンドを使って Kubernetes クラスターを作成した場合、そのクラスターには 2 つのノードがあります。 この数量を増減する必要がある場合は、ノードの数を手動で調整することができます。

次の例では、myAKSCluster という名前の Kubernetes クラスターのノードの数を 3 に増やしています。 コマンドが完了するまでに数分かかります。

  • az aks scale コマンドを使用して、クラスター ノードをスケーリングします。

    az aks scale --resource-group myResourceGroup --name myAKSCluster --node-count 3
    

    クラスターが正常にスケーリングされると、出力は次の出力例のようになります。

    "aadProfile": null,
    "addonProfiles": null,
    "agentPoolProfiles": [
      {
        ...
        "count": 3,
        "mode": "System",
        "name": "nodepool1",
        "osDiskSizeGb": 128,
        "osDiskType": "Managed",
        "osType": "Linux",
        "ports": null,
        "vmSize": "Standard_DS2_v2",
        "vnetSubnetId": null
        ...
      }
      ...
    ]
    

クラスター内のノードを自動スケールすることもできます。 詳細については、「 ノード プールでクラスター オートスケーラーを使用する」を参照してください。

次のステップ

このチュートリアルでは、Kubernetes クラスターの異なるスケーリング機能を使いました。 以下の方法を学習しました。

  • アプリケーションを実行する Kubernetes ポッドを手動でスケーリングします。
  • アプリのフロントエンドを実行する自動スケーリング ポッドを構成します。
  • Kubernetes ノードを手動でスケーリングします。

次のチュートリアルでは、AKS クラスターで Kubernetes をアップグレードする方法について説明します。