「Kubernetes」- Scaling Workload

伸缩分为两种:

1)集群的伸缩:基础设施级别的伸缩。根据集群的利用率向集群内添加或删除工作节点。

2)应用的伸缩:也称为 Pod 的伸缩。根据各项数据指标调整 Pod 特征的处理。

– 横向自动伸缩(HPA)。根据指标增加或减少 Pod 的副本数。

– 纵向自动伸缩(VPA)。指的是增加或减少 Pod 内运行的容器的资源。截止 201801 时,该功能尚在开发。参阅「Container resource consumption—too important to ignore」一文。

9.1. Scaling a Deployment

可以通过命令行手动对部署进行伸缩:

# kubectl scale deployment fnacyapp –replicas=3

如果不想手动伸缩,可以自动伸缩。

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

Horizontal Pod Autoscaling

on GKE

在 GKE 上使用 Pod 的横向自动伸缩。

(1)首先创建一个要被 HPA 的对象。

(2)为部署定义 HPA 对象:

# kubectl autoscale deployment “deploy-appserver” –cpu-percetn=40 –min=1 max=5

(3)开始观察他们的行为:

# kubectl get hpa –watch # 观察 HPA

# kubectl get deploy “deploy-appserver” –watch # 观察部署

# kubectl run -i -t loadgen –image=busybox /bin/sh # 生成负载
> while true; do wget -q -O- http://deploy-appserver.default.svc.cluster.local; done

可以在 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

kubernetes-cronhpa-controller

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

cron-hpa | https://github.com/tkestack/cron-hpa

Cron Horizontal Pod Autoscaler (CronHPA)