一、简介
Cluster Autoscaler组件是一个K8S集群必不可少的组件之一,它主要根据node节点的压力大小,来横向伸缩node节点数量,以满足集群业务的稳定运行。
官方文档参考如下:
Github:
- kubernetes/autoscaler: Autoscaling components for Kubernetes (github.com)
- autoscaler/FAQ.md at master · kubernetes/autoscaler · GitHub
AWS:
二、安装部署
这里以AWS为例进行安装部署和使用。
1.准备
1.创建IAM Policy
policy内容如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"autoscaling:DescribeAutoScalingGroups",
"autoscaling:DescribeAutoScalingInstances",
"autoscaling:DescribeLaunchConfigurations",
"autoscaling:DescribeTags",
"autoscaling:SetDesiredCapacity",
"autoscaling:TerminateInstanceInAutoScalingGroup",
"ec2:DescribeLaunchTemplateVersions"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
提示:可以通过控制台直接创建,也可以通过如下命令行创建(需要将policy内容保存到文件cluster-autoscaler-policy.json,然后执行下面命令)
aws iam create-policy \
--policy-name AmazonEKSClusterAutoscalerPolicy \
--policy-document file://cluster-autoscaler-policy.json
2.创建IAM role
提示: 可通过控制台 IAM Management Console (amazon.com) 直接创建,也可以通过命令行创建,绑定上面创建好的Policy即可。
命令行:
eksctl create iamserviceaccount \
--cluster=<my-cluster> \
--namespace=kube-system \
--name=cluster-autoscaler \
--attach-policy-arn=arn:aws:iam::<AWS_ACCOUNT_ID>:policy/<AmazonEKSClusterAutoscalerPolicy> \
--override-existing-serviceaccounts \
--approve
2.部署
1.下载应用部署清单文件
wget https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml
2.在文件中找到名为cluster-autoscaler的service
- 添加annotations
eks.amazonaws.com/role-arn: "arn:aws:iam::<ACCOUNT_ID>
:role/<AmazonEKSClusterAutoscalerRole>"
3.在文件中找到名为cluster-autoscaler的deployment
- 添加annotations
cluster-autoscaler.kubernetes.io/safe-to-evict: "false"
- 添加如下两行内容,并将<YOUR CLUSTER NAME>替换为自己集群的名字:
--balance-similar-node-groups
--skip-nodes-with-system-pods=false
结果如下:
spec:
containers:
- command:
- ./cluster-autoscaler
- --v=4
- --stderrthreshold=info
- --cloud-provider=aws
- --skip-nodes-with-local-storage=false
- --expander=least-waste
- --node-group-auto-discovery=asg:tag=k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/<YOUR CLUSTER NAME>
- --balance-similar-node-groups
- --skip-nodes-with-system-pods=false
- 找到对应的image的tag值
在官方 Github仓库 中找到对应image的tag值,这里要根据自己cluster集群的版本来进行选择,例如下面选择的是v1.21.版本:
cluster-autoscaler=k8s.gcr.io/autoscaling/cluster-autoscaler:v<1.21.n>
我这里因为kubernetes版本是1.18,用的镜像版本是v1.18.1
3.测试
通过增加集群压力然后观察集群node节点数量,会发现node会自动增加。 这里就不再贴图了,亲测有效。
评论前必须登录!
注册