伸缩分为两种:
9.1. Scaling a Deployment
可以通过命令行手动对部署进行伸缩:
如果不想手动伸缩,可以自动伸缩。
Automatically Resizing a Cluster
in GKE
GKE – Google Kubernetes Engine
对集群进行伸缩,跳过……
in AWS
AWS – Amazon Web Services
对集群进行伸缩,跳过……
Cluster Autoscaler
https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler
Karpenter
官网:https://karpenter.sh/
文档:https://karpenter.sh/docs/
仓库:https://github.com/aws/karpenter-provider-aws
HAP | Horizontal Pod Autoscaling
on GKE
在 GKE 上使用 Pod 的横向自动伸缩。
(1)首先创建一个要被 HPA 的对象。
(2)为部署定义 HPA 对象:
(3)开始观察他们的行为:
# kubectl get deploy “deploy-appserver” –watch # 观察部署
# kubectl run -i -t loadgen –image=busybox /bin/sh # 生成负载
可以在 Dashboard 上观察到 HPA 的效果。
!!!这里的地动伸缩是通过「HPA 控制器」自动增加或减少副本数目,其会受到 HPA 资源的影响。作为 k8s 控制层内的控制器管理器的一部分,「HPA 控制器」将通过集群中各个节点上运行的 cAdvisor 检查 Pod 的指标,然后由 Heapster 进行汇总。然后「HPA 控制器」计算副本的数目是否符合 HPA 资源中定义的目标指数。最后 HPA 根据这个计算结果,调整目标资源的副本数。
Node cAdvisor -> HPA Controller -> Pod
!!!自动伸缩比较复杂,而且调节 CPU 和 RAM 的利用率等底层的指标可能会有意想不到的影响。如果可以应该尽量使用应用程序及的自定义指标(「Kubernetes 1.8: Now with 100% Daily Value of Custom Metrics」)。
方案
KEDA | Kubernetes Event-driven Autoscaling | https://keda.sh/
https://github.com/kedacore/keda
Time-based HPA
on Tencent Cloud TKE
on Alibaba Cloud ACK
a HPA controller that allows to scale your workload based on time schedule.
https://github.com/AliyunContainerService/kubernetes-cronhpa-controller
https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/cronhpa
on Private Cloud SHK
https://medium.com/symbl-ai-engineering-and-data-science/time-based-scaling-for-kubernetes-deployments-9ef7ada93eb7