Azure Kubernetes Service (AKS) でのアプリケーションのスケーリング オプションScaling options for applications in Azure Kubernetes Service (AKS)

Azure Kubernetes Service (AKS) でアプリケーションを実行すると、コンピューティング リソースの量の増減が必要になることがあります。As you run applications in Azure Kubernetes Service (AKS), you may need to increase or decrease the amount of compute resources. 必要のあるアプリケーション インスタンスの数が変わると、基になる Kubernetes の数も変更する必要が生じます。As the number of application instances you need change, the number of underlying Kubernetes nodes may also need to change. また、多数の追加アプリケーション インスタンスを迅速にプロビジョニングすることが必要になる場合もあります。You may also need to quickly provision a large number of additional application instances.

この記事では、AKS 内でのアプリケーションのスケーリングに役立つ主要な概念について説明します。This article introduces the core concepts that help you scale applications in AKS:

ポッドまたはノードを手動でスケーリングするManually scale pods or nodes

レプリカ (ポッド) とノードを手動でスケーリングし、使用可能なリソースと状態の変化に対するアプリケーションの対応をテストできます。You can manually scale replicas (pods) and nodes to test how your application responds to a change in available resources and state. 手動によるリソースのスケーリングでは、ノード数などの固定コストを維持するために、使用する一定量のリソースを定義することもできます。Manually scaling resources also lets you define a set amount of resources to use to maintain a fixed cost, such as the number of nodes. 手動でスケーリングするには、レプリカまたはノードの数を定義し、Kubernetes API で追加ポッドの作成やノードのドレインのスケジュールを設定します。To manually scale, you define the replica or node count, and the Kubernetes API schedules creating additional pods or draining nodes.

ポッドとノードの手動によるスケーリングを開始するには、「チュートリアル: Azure Kubernetes Service (AKS) でのアプリケーションのスケーリング」を参照してください。To get started with manually scaling pods and nodes see Scale applications in AKS.

ポッドの水平オートスケーラーHorizontal pod autoscaler

Kubernetes は、ポッドの水平オートスケーラー (HPA) を使用して、リソース需要を監視し、レプリカの数を自動的にスケーリングします。Kubernetes uses the horizontal pod autoscaler (HPA) to monitor the resource demand and automatically scale the number of replicas. 既定では、ポッドの水平オートスケーラーは、レプリカ数での必要な変更について、30 秒ごとにメトリックの API をチェックします。By default, the horizontal pod autoscaler checks the Metrics API every 30 seconds for any required changes in replica count. 変更が必要な場合、それに応じてレプリカの数が増減されます。When changes are required, the number of replicas is increased or decreased accordingly. ポッドの水平オートスケーラーは、Kubernetes 1.8 以降用のメトリック サーバーをデプロイした AKS クラスターで動作します。Horizontal pod autoscaler works with AKS clusters that have deployed the Metrics Server for Kubernetes 1.8+.

Kubernetes のポッドの水平オートスケーリング

所定のデプロイ用にポッドの水平オートスケーラーを構成する場合、実行できるレプリカの最小値と最大数を定義します。When you configure the horizontal pod autoscaler for a given deployment, you define the minimum and maximum number of replicas that can run. また、CPU 使用率など、監視するメトリックで、スケーリングの決定の基になるメトリックも定義します。You also define the metric to monitor and base any scaling decisions on, such as CPU usage.

AKS でポッドの水平オートスケーラーを開始するには、「ポッドを自動スケールする」を参照してください。To get started with the horizontal pod autoscaler in AKS, see Autoscale pods in AKS.

スケーリング イベントのクールダウンCooldown of scaling events

ポッドの水平オートスケーラーは、30 秒ごとにメトリックの API をチェックするので、前のスケーリング イベントが正しく完了していないうちに、別のチェックが行われる可能性があります。As the horizontal pod autoscaler checks the Metrics API every 30 seconds, previous scale events may not have successfully completed before another check is made. この動作のため、前のスケーリング イベントがアプリケーション ワークロードとリソースの需要を受け取ってそれに応じて調整できるようになるまでに、ポッドの水平オートスケーラーがレプリカの数を変更する可能性があります。This behavior could cause the horizontal pod autoscaler to change the number of replicas before the previous scale event has been able to receive application workload and the resource demands to adjust accordingly.

これらの競合イベントを最小限に抑えるために、クールダウンまたは遅延値が設定されます。To minimize these race events, cooldown or delay values are set. これらの値は、ポッドの水平オートスケーラーがスケーリング イベント後、別のスケーリング イベントをトリガーできるまで待機する必要のある時間を定義します。These values define how long the horizontal pod autoscaler must wait after a scale event before another scale event can be triggered. この動作により、新しいレプリカ数が有効になり、メトリックの API は、配分されたワークロードを反映できるようになります。This behavior allows the new replica count to take effect and the Metrics API reflect the distributed workload. 既定では、スケールアップ イベントの遅延は 3 分で、スケールダウン イベントの遅延は 5 分ですBy default, the delay on scale up events is 3 minutes, and the delay on scale down events is 5 minutes

現時点では、これらのクールダウン値を既定値から調整することはできません。Currently, you cannot tune these cooldown values from the default.

クラスター オートスケーラーCluster autoscaler

ポッドの需要の変化に対応するために、Kubernetes には、ノード プール内で要求されるコンピューティング リソースに基づいてノードの数を調整するクラスター オートスケーラー (現在 AKS でプレビューの段階です) があります。To respond to changing pod demands, Kubernetes has a cluster autoscaler (currently in preview in AKS) that adjusts the number of nodes based on the requested compute resources in the node pool. 既定では、クラスター オートスケーラーはノード数での必要な変更について 10 秒ごとに API サーバーをチェックします。By default, the cluster autoscaler checks the API server every 10 seconds for any required changes in node count. クラスター オートスケーラーが変更が必要だと判断した場合、それに応じて AKS クラスター内のノードの数が増減されます。If the cluster autoscale determines that a change is required, the number of nodes in your AKS cluster is increased or decreased accordingly. クラスターオートスケーラーは、Kubernetes 1.10.x 以降を実行する RBAC 対応 AKS クラスターで動作します。The cluster autoscaler works with RBAC-enabled AKS clusters that run Kubernetes 1.10.x or higher.

Kubernetes クラスター オートスケーラー

クラスター オートスケーラーは通常、ポッドの水平オートスケーラーと一緒に使用されます。Cluster autoscaler is typically used alongside the horizontal pod autoscaler. 組み合わせた場合、ポッドの水平オートスケーラーはアプリケーションの需要に基づいてポッド数を増減し、クラスター オートスケーラーはそれに応じて、これらの追加ポッドの実行に必要になるノードの数を調整します。When combined, the horizontal pod autoscaler increases or decreases the number of pods based on application demand, and the cluster autoscaler adjusts the number of nodes as needed to run those additional pods accordingly.

クラスター オートスケーラーはプレビューで AKS クラスターでのみテストする必要があります。Cluster autoscaler should only be tested in preview on AKS clusters.

AKS でクラスター オートスケーラーを開始するには、「Azure Kubernetes Service のクラスター オートスケーラー (AKS) - プレビュー」を参照してください。To get started with the cluster autoscaler in AKS, see Cluster Autoscaler on AKS.

スケール アップ イベントScale up events

ノードに、要求されたポッドを実行するために十分なコンピューティング リソースがない場合、そのポッドはスケジューリング プロセスを進めることができません。If a node does not have sufficient compute resources to run a requested pod, that pod cannot progress through the scheduling process. ノード プール内で追加のコンピューティング リソースが利用できない限り、ポッドを開始できません。The pod cannot start unless additional compute resources are available within the node pool.

ノード プールのリソース制約のためにスケジュール設定できないポッドを、クラスター オートスケーラーが確認した場合、ノード プール内のノードの数が、追加のコンピューティング リソースを提供するために増やされます。When the cluster autoscaler notices pods that cannot be scheduled due to node pool resource constraints, the number of nodes within the node pool is increased to provide the additional compute resources. これらの追加ノードが正常にデプロイされ、ノード プール内で使用できるようになると、ポッドはこれらのノードで実行するようにスケジュール設定されます。When those additional nodes are successfully deployed and available for use within the node pool, the pods are then scheduled to run on them.

アプリケーションが迅速にスケーリングする必要がある場合、クラスター オートスケーラーによってデプロイされた追加ノードがスケジュール設定されたポッドを受け入れるまで、一部のポッドはスケジュール設定の待機状態のままのことがあります。If your application needs to scale rapidly, some pods may remain in a state waiting to be scheduled until the additional nodes deployed by the cluster autoscaler can accept the scheduled pods. 高いバースト需要のあるアプリケーションの場合、仮想ノードと Azure Container Instances でスケーリングできます。For applications that have high burst demands, you can scale with virtual nodes and Azure Container Instances.

スケール ダウン イベントScale down events

クラスター オートスケーラーは、最近新しいスケジュール要求を受け取っていないノードのポッド スケジューリング状態も監視します。The cluster autoscaler also monitors the pod scheduling status for nodes that have not recently received new scheduling requests. このシナリオでは、ノード プールに必要以上のコンピューティング リソースがあり、ノードの数を削減できることを示しています。This scenario indicates that the node pool has more compute resources than are required, and that the number of nodes can be decreased.

既定で10分間、不要であるかどうかのしきい値を超えたノードは、削除対象としてスケジュールされます。A node that passes a threshold for no longer being needed for 10 minutes by default is scheduled for deletion. このような状況が発生した場合、ポッドは、ノード プール内の他のノードで実行するようにスケジュール設定され、クラスター オートスケーラーは、ノードの数を減らします。When this situation occurs, pods are scheduled to run on other nodes within the node pool, and the cluster autoscaler decreases the number of nodes.

クラスター オートスケーラーがノードの数を減らしたときに、ポッドは別のノード上にスケジュール設定されるので、アプリケーションに何からの中断が発生することがあります。Your applications may experience some disruption as pods are scheduled on different nodes when the cluster autoscaler decreases the number of nodes. 中断を最小限に抑えるには、単一のポッド インスタンスを使用するアプリケーションを使用しないでください。To minimize disruption, avoid applications that use a single pod instance.

Azure Container Instances へのバーストBurst to Azure Container Instances

AKS クラスターを迅速にスケーリングするために、Azure Container Instances (ACI) と統合できます。To rapidly scale your AKS cluster, you can integrate with Azure Container Instances (ACI). Kubernetes には、レプリカおよびノード数をスケーリングするコンポーネントが組み込まれています。Kubernetes has built-in components to scale the replica and node count. ただし、アプリケーションが迅速なスケーリングを必要としている場合、ポッドの水平オートスケーラーは、ノード プール内の既存のコンピューティング リソースが提供できる数より多くのポッドをスケジュール設定できます。However, if your application needs to rapidly scale, the horizontal pod autoscaler may schedule more pods than can be provided by the existing compute resources in the node pool. 構成されている場合、このシナリオは、クラスター オートスケーラーをトリガーして、ノード プール内の追加ノードをデプロイしますが、これらのノードが正常にプロビジョニングし、Kubernetes スケジューラがそれらの上でポッドを実行できるようになるまで数分かかることがあります。If configured, this scenario would then trigger the cluster autoscaler to deploy additional nodes in the node pool, but it may take a few minutes for those nodes to successfully provision and allow the Kubernetes scheduler to run pods on them.

ACI への Kubernetes バースト スケーリング

ACI では、追加のインフラストラクチャのオーバーヘッドなしに、コンテナー インスタンスを迅速にデプロイできます。ACI lets you quickly deploy container instances without additional infrastructure overhead. AKS で接続する場合、ACI は、AKS クラスターのセキュリティ保護された論理拡張機能になります。When you connect with AKS, ACI becomes a secured, logical extension of your AKS cluster. Virtual Kubelet コンポーネントは、仮想の Kubernetes ノードとして ACI を表示する AKS クラスターにインストールされます。The Virtual Kubelet component is installed in your AKS cluster that presents ACI as a virtual Kubernetes node. Kubernetes は続いて、直接 AKS クラスター内にある VM ノード上のポッドとしてではなく、仮想ノードを通じた ACI インスタンスとして実行するポッドをスケジュール設定できます。Kubernetes can then schedule pods that run as ACI instances through virtual nodes, not as pods on VM nodes directly in your AKS cluster. 仮想ノードは、現在 AKS でプレビューの段階です。Virtual nodes are currently in preview in AKS.

アプリケーションは、仮想ノードを使用するために変更は不要です。Your application requires no modification to use virtual nodes. クラスター オートスケーラーが AKS クラスター内に新しいノードをデプロイするときに、デプロイは AKS と ACI にわたって遅延なくスケーリングできます。Deployments can scale across AKS and ACI and with no delay as cluster autoscaler deploys new nodes in your AKS cluster.

仮想ノードは、AKS クラスターと同じ仮想ネットワーク内の追加サブネットにデプロイされます。Virtual nodes are deployed to an additional subnet in the same virtual network as your AKS cluster. この仮想ネットワーク構成は、ACI と AKS 間のトラフィックをセキュリティで保護できます。This virtual network configuration allows the traffic between ACI and AKS to be secured. AKS クラスターと同様に、ACI インスタンスは、他のユーザーから分離されたセキュリティ保護された論理的なコンピューティング リソースです。Like an AKS cluster, an ACI instance is a secure, logical compute resource that is isolated from other users.

次の手順Next steps

スケーリング アプリケーションを開始するには、最初にクイックスタートに従って、Azure CLI で AKS クラスターを作成します。To get started with scaling applications, first follow the quickstart to create an AKS cluster with the Azure CLI. 次に、AKS クラスターでスケーリング アプリケーションを手動でも自動でも開始できます。You can then start to manually or automatically scale applications in your AKS cluster:

Kubernetes と AKS の中心概念の詳細については、次の記事を参照してください。For more information on core Kubernetes and AKS concepts, see the following articles: