DUICUO

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

[[394970]]

クラスターオートスケーラーとは何ですか?

Cluster Autoscaler (CA) は、Kubernetes クラスターを弾力的にスケーリングするためのスタンドアロン プログラムです。Kubernetes クラスターを使用する際によくある質問は、「アプリケーションの需要を満たすにはどの程度のノード数を維持すべきか」です。Cluster Autoscaler は、デプロイされたアプリケーションが要求するリソースに基づいてクラスターを動的に自動スケーリングすることで、この問題を解決します。

  • プロジェクトアドレス: https://github.com/kubernetes/autoscaler

Cluster Autoscaler はいつクラスターをスケーリングしますか?

次の状況では、クラスターは自動的にスケールアップまたはスケールダウンします。

  • スケールアップ: リソースが不足しているため、一部のポッドを現在のノードにスケジュールできません。
  • スケールダウン: ノードのリソース使用率が低い場合、そのノード上に存在するすべてのポッドを他のノードで実行するように再スケジュールできます。

クラスター ノードが CA によって削除されなくなるのはどのような場合ですか?

  • ノード上には、PodDisruptionBudget コントローラーによって制限されているポッドがあります。
  • ノードには、名前空間 kube-system を持つポッドがあります。
  • ノード上のポッドは、コントローラー (デプロイメント、レプリカ セット、ジョブ、ステートフル セットなど) によって作成されたものではありません。
  • ノード上のポッドはローカルストレージを使用しています
  • ポッドがノードから追い出されると、そのポッドは行く場所がなくなり、他のノードがそれをスケジュールできなくなります。
  • ノードには、次のアノテーションがあります: "cluster-autoscaler.kubernetes.io/scale-down-disabled": "true" (CA 1.0.3 以降でサポートされています)。

Horizo​​ntal Pod Autoscaler を Cluster Autoscaler と併用するにはどうすればよいですか?

Horizo​​ntal Pod Autoscaler(HPA)は、現在のCPU負荷に基づいて、デプロイメントまたはレプリカセット内のレプリカ数を調整します。負荷が増加すると、HPAは新しいレプリカを作成しますが、クラスター内に十分なスペースがない場合や不足する場合があります。十分なリソースがない場合、CAはHPAによって作成されたPodを実行できるように、一部のノードを起動しようとします。負荷が減少すると、HPAは一部のレプリカを停止します。その結果、一部のノードが十分に活用されなくなったり、完全に空になったりする可能性があります。その場合、CAはこれらの不要なノードを終了します。

CA によってノードが削除されるのを防ぐにはどうすればよいですか?

CA 1.0 以降では、ノードに次のタグを付けることができます。

"cluster-autoscaler.kubernetes.io/scale-down-disabled": "true"

kubectl を使用して、これをノードに追加 (またはノードから削除) できます。

$ kubectl ノードに注釈を付けるクラスターオートスケーラー.kubernetes.io/スケールダウン無効=true

Cluster Autoscaler を実行するためのベストプラクティスは何ですか?

  • 自動スケーリングノードグループに属するノードを直接変更しないでください。同じノードグループ内のすべてのノードは、同じ容量、ラベル、および実行中のシステムポッドを持つ必要があります。
  • ポッドはリクエストのリソース制限を宣言します
  • PodDisruptionBudgets を使用すると、Pod が突然削除されるのを防ぐことができます (必要な場合)。
  • ノード プールの最小/最大設定を指定する前に、クラウド プロバイダーの割り当てが十分な大きさであることを確認してください。
  • 他のノード グループ オートスケーラー (特にクラウド プロバイダーのもの) を実行しないでください。

Cluster Autoscaler はどのクラウド プロバイダーをサポートしていますか?

  • GCE https://kubernetes.io/docs/concepts/cluster-administration/cluster-management/
  • GKE https://cloud.google.com/container-engine/docs/cluster-autoscaler
  • AWS https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/README.md
  • Azure https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/azure/README.md
  • アリババクラウド https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/alicloud/README.md
  • OpenStack マグナム https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/magnum/README.md
  • DigitalOcean https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/digitalocean/README.md
  • クラウドスタック https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/cloudstack/README.md
  • エクソスケール https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/exoscale/README.md
  • パケット https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/packet/README.md
  • OVHクラウド https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/ovhcloud/README.md
  • Linode https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/linode/README.md
  • ヘッツナー https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/hetzner/README.md
  • クラスター API https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/clusterapi/README.md

クラスタオートスケーラーのデプロイメントとその他の実践

次のリンクを参照してください: https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md

参考リンク

https://github.com/kubernetes/autoscaler

https://blog.csdn.net/hello2mao/article/details/80418625