cfanbo / cfanbo.github.io

1 stars 0 forks source link

Kubernetes集群扩缩容方案 | 学习笔记 #256

Open cfanbo opened 6 months ago

cfanbo commented 6 months ago

https://blog.haohtml.com/posts/autoscaling-in-kubernetes/

动态扩缩容主要包括两个层级的动态扩缩容。一个层级是应用本身级别的扩缩容,如HPA、VPA。当应用负载过高时,可以通过HPA多部署几个Pods副本;或者通过VPA对当前Pod硬件资源进行扩容,以此来减少应用负载。 另一层是对集群自身的扩容,如 worker 节点的扩容。如部署Pods应用时,如果出现无可用节点资源可用时,则通过 Cluster Autoscaler 加入一些新的节点,并在新节点上重建Pods。 本文主要看一下应用这个层级的扩缩容方案。 水平扩展HPA && 垂直扩展VPA HPA 在 Kubernetes 中,HPA(HorizontalPodAutoscaler)也称为水平扩缩容,它将根据当前应用程序工作负载,自动更新工作负载资源 (例如 Deployment 或者 StatefulSet)以满足当前需求。简单讲的话,就是如果集群检测到当前应用程序的n个Pod负载如果比较高的话,就再创建几个Pod副本,以减少当前负载,也就是我们平时说的水平扩容。相反如果应用程序Pod负载比较低的话,则将Pod副本数量进行减少,节省服务器资源,这个就是水平缩容。 它的工作原理是这样的,集群控制器会定期(默认每 30 秒)查询目标资源的 Pod 的资源使用情况,并将其与 HPA 对象中指定的指标进行比较。如果资源使用情况超过或低于目标指标,HPA 控制器会根据扩缩容策略来扩缩容 Pod 数量。 Kubernetes 默认支持根据容器的 CPU 和内存的使用率。拿下面例子来说 apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: web-app-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: web-app minReplicas: 1 maxReplicas: 10 metrics: - type: Resource resource: name: cpu targetAverageUtilization: 80 这里 scaleTargetRef 表示要操作的 Kind 对象 Deployment,其中副本最小数量为1,最大为10。而对条件的定义就是 metrics字段,这个示例里只指定了CPU,表示当 CPU 平均使用率达到80% 的时候就开始扩容。