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

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

このチュートリアルでは、アプリでポッドをスケールアウトし、ポッドの自動スケーリングを試し、Azure VM ノードの数をスケーリングして、ワークロードをホストするためのクラスターの容量を変更します。 次の方法を学びます:

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

開始する前に

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

このチュートリアルでは、ポッドとノードの数を変更し、コンピューティング コストを増やすことができます。 リソース グループの 共同作成者所有者 など、AKS ワークロードとノード プールをスケーリングするアクセス許可を持つ ID を使用します。

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

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

AKS デスクトップ

  1. スケーリング>デプロイメントを選択: order-service>設定を編集>レプリカ数: 5 を選択して、order-service のスケーリング設定を編集します。 order-service のスケール構成の編集を示すスクリーンショット。

  2. 続行する前に、デプロイの更新が完了したことを確認します。

  3. 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
    
  4. コマンドを使用して、kubectl scale デプロイ内のポッドの数を手動で変更します。

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

    kubectl get pods --selector app=store-front
    

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

    NAME                              READY     STATUS    RESTARTS   AGE
    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
    

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

AKS デスクトップ

  1. Project内で、[アプリケーションのデプロイ] ボタン >Kubernetes YAML を選択します。 アプリケーション ソースである Kubernetes YAML を選択する

  2. この 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
    
  3. [ 次へ>展開>Close を選択しますYAML 構成への貼り付けを示すスクリーンショット。

  4. [ スケーリング>展開の選択: ストア フロントを選択します。 スケーリング モードが、構成によって設定された HPA、レプリカの境界、CPU 使用率/ターゲットに設定されていることがわかります。 ストア フロント デプロイの HPA モードを示す AKS デスクトップ スケーリングの概要を示すスクリーンショット。

  5. HPA モードが有効であり、レプリカの境界がマニフェスト値と一致することを確認します。

コマンドライン

ポッドの水平オートスケーラーを使用するには、すべてのコンテナーで 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コマンドをもう一度使用して、不要なポッドが削除されていることを確認できます。

    TARGETS列とREPLICAS列に、store-front-hpaに対して想定される自動スケール動作が表示されたら続行します。

Note

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

AKS ノードを手動でスケーリングする

Note

AKS 自動クラスターを作成した場合、クラスターによってノードが自動スケーリングされるため、これらの手順は適用されません。

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

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

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

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

    az aks nodepool list --resource-group myResourceGroup --cluster-name myAKSCluster --query "[].{name:name,count:count}" -o table
    
    az aks scale --resource-group myResourceGroup --name myAKSCluster --node-count 5
    

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

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

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

次のステップ

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

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

完了したら、[ 削除 ] アイコンを選択し、確認メッセージで [ 名前空間も削除する] を選択します。 ごみ箱アイコンをクリックして AKS デスクトップ プロジェクトを削除する方法を示すスクリーンショット。

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