Auto Scaling - Eksctl ユーザーガイド

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Auto Scaling

Auto Scaling を有効にする

クラスターオートスケーラーの使用を許可する IAM ロールを使用して、クラスター (または既存のクラスター内のノードグループ) を作成できます。

eksctl create cluster --asg-access

このフラグは k8s.io/cluster-autoscaler/enabledk8s.io/cluster-autoscaler/<clusterName> タグも設定するため、ノードグループ検出は機能します。

クラスターが実行されたら、Cluster Autoscaler 自体をインストールする必要があります。

また、マネージド型またはアンマネージド型のノードグループ定義に以下を追加して、Cluster Autoscaler がノードグループをスケーリングするために必要なタグを追加する必要があります (複数可)。

nodeGroups: - name: ng1-public iam: withAddonPolicies: autoScaler: true

0 からスケールアップする

ノードグループを 0 からスケールアップでき、ノードグループにラベルやテイントが定義されている場合は、Auto Scaling Groups (ASGs) にタグとして伝達する必要があります。

これを行う 1 つの方法は、ノードグループ定義の tagsフィールドに ASG タグを設定することです。たとえば、次のラベルとテイントを持つノードグループがあるとします。

nodeGroups: - name: ng1-public ... labels: my-cool-label: pizza taints: key: feaster value: "true" effect: NoSchedule

次の ASG タグを追加する必要があります。

nodeGroups: - name: ng1-public ... labels: my-cool-label: pizza taints: feaster: "true:NoSchedule" tags: k8s.io/cluster-autoscaler/node-template/label/my-cool-label: pizza k8s.io/cluster-autoscaler/node-template/taint/feaster: "true:NoSchedule"

マネージド型ノードグループとアンマネージド型ノードグループの両方で、これは propagateASGTagsを に設定することで自動的に実行できます。これによりtrue、ラベルとテイントがタグとして Auto Scaling グループに追加されます。

nodeGroups: - name: ng1-public ... labels: my-cool-label: pizza taints: feaster: "true:NoSchedule" propagateASGTags: true

ゾーン対応の Auto Scaling

ワークロードがゾーン固有である場合は、ゾーンごとに個別のノードグループを作成する必要があります。これは、 がグループ内のすべてのノードが完全に同等であることをcluster-autoscaler前提としているためです。したがって、例えば、ゾーン固有の PVC (EBS ボリュームなど) を必要とするポッドによってスケールアップイベントがトリガーされた場合、新しいノードが間違った AZ でスケジュールされ、ポッドの起動が失敗する可能性があります。

環境が次の基準を満たしている場合、AZ ごとに個別のノードグループは必要ありません。

  • ゾーン固有のストレージ要件はありません。

  • 必須ではない podAffinity とホスト以外のトポロジ。

  • ゾーンラベルに nodeAffinity は必要ありません。

  • ゾーンラベルに nodeSelector がありません。

(詳細については、こちらこちらを参照してください)。

上記のすべての要件 (場合によってはその他) を満たしている場合は、複数の AZs にまたがる単一のノードグループで安全である必要があります。それ以外の場合は、個別の単一 AZ ノードグループを作成します。

前:

nodeGroups: - name: ng1-public instanceType: m5.xlarge # availabilityZones: ["eu-west-2a", "eu-west-2b"]

後:

nodeGroups: - name: ng1-public-2a instanceType: m5.xlarge availabilityZones: ["eu-west-2a"] - name: ng1-public-2b instanceType: m5.xlarge availabilityZones: ["eu-west-2b"]