このトピックでは、登録済みクラスターの自動スケーリングを設定する方法について説明します。
前提条件
自動スケーリングを設定すると、cluster-autoscalerコンポーネントが登録済みクラスターにデプロイとして自動的にデプロイされます。 スケールアウトイベント中にクラスタに追加されたクラウドコンピューティングノードは、後にスケールインイベントで削除することができる。 これらのノードにデプロイメントとして実行されるシステムコンポーネントをインストールすると、システムコンポーネントが安定したサービスを提供できない場合があります。 したがって、これらのコンポーネントがクラウドコンピューティングノードまたはオンプレミスノードを自動的に追加するようにスケジュールされていないことを確認する必要があります。 次の要件を満たす必要があります。
通常のノードプールが作成され、スケールアウトされます。 詳細については、「ノードプールの作成とスケールアウト」をご参照ください。
cloud-node-controllerがインストールされています。 詳細については、「NotReadyノードの自動クリーンアップ」をご参照ください。
alibabacloud.com/cloud-worker-nodes=true
ラベルがノードプール内のノードに追加されます。 詳細については、「一度に複数のノードにラベルを追加する」をご参照ください。これにより、cluster-autoscalerコンポーネントは、指定されたラベルを持つノードに自動的にスケジュールされます。
kubectlクライアントが登録済みクラスターに接続されています。 詳細については、「クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続する」をご参照ください。
ステップ1: 自動スケーリングの有効化
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[ノードプール] ページで、[自動スケーリングの設定] の右側にある [有効化] をクリックします。 [Auto Scalingの設定] パネルでパラメーターを設定し、[OK] をクリックします。
cluster-autoscalerコンポーネントを設定します。
自動スケーリングを設定すると、クラスターにデプロイが自動的にデプロイされます。
次のコマンドを実行して、配置を照会します。
kubectl -n kube-system get deploy |grep cluster-autoscaler
期待される出力:
cluster-autoscaler 1/1 1 1 5s
cluster-autoscalerコンポーネントが他のリソースにアクセスできるようにするRAMポリシーを設定します。 サンプルコードは次のとおりです。
{ "Version": "1", "Statement": [ { "Action": [ "ess:DescribeScalingGroups", "ess:DescribeScalingInstances", "ess:DescribeScalingActivities", "ess:DescribeScalingConfigurations", "ess:DescribeScalingRules", "ess:DescribeScheduledTasks", "ess:DescribeLifecycleHooks", "ess:DescribeNotificationConfigurations", "ess:DescribeNotificationTypes", "ess:DescribeRegions", "ess:CreateScalingRule", "ess:ModifyScalingGroup", "ess:RemoveInstances", "ess:ExecuteScalingRule", "ess:ModifyScalingRule", "ess:DeleteScalingRule", "ecs:DescribeInstanceTypes", "ess:DetachInstances", "ess:ScaleWithAdjustment", "vpc:DescribeVSwitches" ], "Resource": [ "*" ], "Effect": "Allow" } ] }
次のコマンドを実行して、RAMポリシーの付与に使用するAccessKeyペアを指定します。
export ACCESS_KEY_ID=<ACCESS KEY ID> export ACCESS_KEY_SECRET=<ACCESS KEY SECRET>
という名前のシークレットを作成するには、次のコマンドを実行します。alibaba-addon-secret.
kubectl -n kube-system create secret generic alibaba-addon-secret --from-literal='access-key-id=${ACCESS_KEY_ID}' --from-literal='access-key-secret=${ACCESS_KEY_SECRET}'
ステップ2: 自動スケーリング用のノードプールを作成する
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[ノードプール] ページの右上隅にある [ノードプールの作成] をクリックします。
[ノードプールの作成] ダイアログボックスで、ノードプールのパラメーターを設定します。 次に、[注文の確認] をクリックします。
次の表に、いくつかのパラメーターを示します。 パラメーターの詳細については、「ノードプールの作成」をご参照ください。
パラメーター
説明
期待されるノード
ノードプールが維持するノードの数。 このパラメーターを変更して、ノードプール内のノード数を調整できます。 ノードプールにノードを作成しない場合は、このパラメーターを0に設定します。 詳細については、「ノードプールのスケーリング」をご参照ください。
オペレーティングシステム
ノードのオペレーティングシステム。 CentOSおよびAlibaba Cloud Linuxオペレーティングシステムがサポートされています。
ECSラベル
ECSインスタンスにラベルを追加します。
テインツ
ノードプール内のノードにテイントを追加します。
ノードラベル
ノードプール内のノードにラベルを追加します。 例:
workload=auto
カスタムセキュリティグループ
ノードが属するセキュリティグループを選択します。
次のコマンドを実行して、ノードラベル
ワークロード=auto
はノードプールに作成できます。kubectl run nginx --image nginx -l workload=auto