阿里云K8S集群的一个重要特性,是集群的节点可以动态的增加或减少。有了这个特性,集群才能在计算资源不足的情况下扩容新的节点,同时也可以在资源利用率降低的时候,释放节点以节省费用。
这篇文章,我们讨论阿里云K8S集群扩容与缩容的实现原理。理解实现原理,在遇到问题的时候,我们就可以高效地排查并定位原因。我们的讨论基于当前的1.12.6版本。
节点增加原理
阿里云K8S集群可以给集群增加节点的方式有,添加已有节点,集群扩容,和自动伸缩。其中,添加已有节点又可分为手动添加已有节点和自动添加已有节点。节点的增加涉及到的组件有,节点准备,弹性伸缩(ESS),管控,Cluster Autoscaler以及调度器。
手动添加已有节点
节点准备,其实就是把一个普通的ECS实例,安装配置成为一个K8S集群节点的过程。这个过程仅靠一条命令就可以完成。这条命令使用curl下载attach_node.sh脚本,然后以openapi token为参数,在ECS上运行。
curl http:///public/pkg/run/attach//attach_node.sh | bash -s – --openapi-token
这里token是一个对的key,而value是当前集群的基本信息。阿里云K8S集群的管控,在接到手动添加已有节点请求的时候,会生成这个对,并把key作为token返回给用户。
这个token(key)存在的价值,是其可以让attach_node.sh脚本,以匿名身份在ECS上索引到集群的基本信息(value),而这些基本信息,对节点准备至关重要。
总体上来说,节点准备就做两件事情,读和写。读即数据收集,写即节点配置。