背景


如上图所示,kubernetes提供了一个叫做Cluster AutoScaler(简称CA)的子模块来实现集群节点的伸缩,CA根据POD是否处于pending状态来判断是否需要进行扩容,这里需要云厂商提供接口模块来进行集群扩展的判断和节点授权加入操作,一旦新的节点加入集群,挂起的POD就会被调度到新的节点上。

Pod 水平自动扩缩(Horizontal Pod Autoscaler) 可以基于 CPU 利用率自动扩缩 ReplicationController、Deployment、ReplicaSet 和 StatefulSet 中的 Pod 数量。除了 CPU 利用率,也可以基于其他应程序提供的自定义度量指标 来执行自动扩缩。注意的问题:
k8s集群需要安装metrics-server服务,HPA通过Metrics Server接口获得监测数据进行伸缩判断 POD需要设置request资源,如: containers:- name: php-apacheimage: k8s.gcr.io/hpa-exampleports:- containerPort: 80resources:limits:cpu: 500mrequests:cpu: 200mautoscale相关命令
# 为deployment指定autoscale规则kubectl autoscale deployment httptest -n test --cpu-percent=50 --min=1 --max=5# 获取hpakubectl get hpa -n test# 查看hpakubectl describe hpa httptest -n test# 删除hpakubectl delete hpa httptest -n test
腾讯云提供了“容器服务”(TKE)和“弹性容器服务”(EKS)两种产品,两者最大的区别是是否需要用户购买集群节点,实际的操作通过底层的集群是否指定为伸缩集群来区分。

TKE通过节点池的方式支持节点的自动扩容 EKS 是一种全托管的 Kubernetes 服务,EKS 以 Pod 的形式交付计算资源

云厂商对容器产品的支持主要以两种形态呈现,一种是需要用户指定集群,一种是通过指定伸缩集群来屏蔽底层的节点,而后者属于serverless的概念,使用方的交付往往是POD的形式,该方式也符合serverless根据流量计费的形态。 两种形态都可以支持弹性伸缩,通过相应文档发现集群的伸缩其实都是通过K8s提供的Cluster AutoScaler来实现,而POD方面通过HPA来实现。伸缩的策略可以通过扩展来实现,比如通过Prometheus监控业务数据来判断。 具体的云产品选择个人认为一方面考虑成本,如serverless方式的流量计费方式是否确实更合理,如果更多的服务上容器云,自建集群的资源综合使用成本是否更划算?另一方面看是否有一些定制化的需求,比如新增k8s组件,比如接入istio,在serverless方式下是否能很好支持。
文章转载自码不禁言,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




