本文將為您介紹如何使用注冊集群的自動彈性伸縮能力。
前提條件
創建自動彈性伸縮配置時,cluster-autoscaler組件將以Deployment形式自動部署在注冊集群中。由于云上節點會在自動縮容后銷毀,不利于Deployment類型部署的系統組件提供穩定的服務,所以這種提供云上服務的組件需要避免被調度到自動擴容出來的云上節點,同時也要避免被調度到云下節點。需要滿足以下條件:
已創建節點池并擴容。
已為節點池中的節點配置節點標簽
alibabacloud.com/cloud-worker-nodes=true
。具體操作,請參見添加節點標簽。cluster-autoscaler組件將會自動調度到擁有節點標簽的云上節點上。
已通過kubectl連接注冊集群。具體操作,請參見通過kubectl連接集群。
步驟一:開啟自動彈性伸縮配置
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在節點池頁面,單擊集群自動彈性伸縮配置右側的去配置,然后在集群自動彈性伸縮配置面板,完成彈性伸縮配置并單擊確定。
配置cluster-autoscaler組件。
在成功完成自動彈性伸縮配置后,集群中將會自動部署一個Deployment。
執行以下命令查看Deployment。
kubectl -n kube-system get deploy |grep cluster-autoscaler
預期輸出:
cluster-autoscaler 1/1 1 1 5s
配置cluster-autoscaler組件相關云資源的RAM Policy,代碼示例如下所示。
{ "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 Policy的AccessKey信息。
export ACCESS_KEY_ID=<ACCESS KEY ID> export ACCESS_KEY_SECRET=<ACCESS KEY SECRET>
執行以下命令創建一個名為alibaba-addon-secret的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}'
步驟二:創建自動彈性伸縮節點池
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在節點池頁面右上角,單擊創建節點池。
在創建節點池對話框,設置創建節點池的配置項。然后單擊確認配置。
執行以下命令,根據設置的節點標簽
workload=auto
驗證節點池是否可以正確彈出節點。kubectl run nginx --image nginx -l workload=auto