容器编排系统 Kubernetes 在实际应用中需要面对的一个核心问题就是如何进行集群的自动伸缩和扩容,为了提高服务的可用性和负载均衡能力,我们需要对 Kubernetes 集群进行水平扩展。而对于前端应用来说,请求频繁的情况下经常出现 CPU 和内存占用过高的问题,我们需要对容器进行动态调整,使其在保证最高性能的同时降低资源占用率。这时候就需要引入 Kubernetes 中的 Horizontal Pod Autoscaler(HPA),本文就要来详细讲解如何使用 HPA 进行水平扩容。
Horizontal Pod Autoscaler 简介
Horizontal Pod Autoscaler(水平 Pod 副本自动扩展器)是 Kubernetes 官方提供的一个能根据 CPU 使用率以及自定义的应用指标调整 Pod 副本数的机制。HPA 可以动态伸缩 Pod 副本数量,以满足应用请求量的变化,提高 Kubernetes 应用的性能和可用性。它通过监控 Kubernetes 集群中部署的 Pod 的 CPU 占用率来检测是否需要创建或删除 Pod 副本,从而根据负载情况自动调整 Pod 数量。
使用 Horizontal Pod Autoscaler 实现自动扩容
引入metrics-server
metrics-server 是一个 Kubernetes 集群中的组件,能够抓取 Kubernetes 集群中所有 Pod 对 CPU 和内存的使用情况,从而提供给 HPA 进行分析。我们需要先将其安装到 Kubernetes 集群中:
$ git clone git@github.com:kubernetes-sigs/metrics-server.git $ cd metrics-server/deploy/kubernetes $ kubectl apply -f metrics-server-deployment.yaml
查看 metrics-server 是否部署完成:
$ kubectl get pods -n kube-system | grep metrics
如果输出了一个名字为 metrics-server-xxxx 的 Pod 记录,说明 metrics-server 已经部署完成。
定义 Pod 部署和 Service 声明
在定义 HPA 之前,我们需要先编写部署 Pod 和声明 Service 的 YAML 配置文件,应用部署的容器镜像可以自行选择。下面是部署 frontend-app 的 YAML 文件:
-- -------------------- ---- ------- ----------- ------- ----- ---------- --------- ----- -------- ------- ---- -------- ----- --------- - --------- ------------ ---- -------- --------- --------- ------- ---- -------- ----- ----------- - ----- -------- ------ ------------ ------ - -------------- --
下面是 frontend-app 的 Service 声明文件:
-- -------------------- ---- ------- ----------- -- ----- ------- --------- ----- ---------------- ----- --------- ---- -------- ------ - ----- -- ----------- -- ----- --------
设置 Horizontal Pod Autoscaler
设置 HPA 的方法有两种。一种是手动设置,另一种是自动设置。手动设置需要指定 HPA 的最小和最大 Pod 副本数量,以及 HPA 被触发时 Pod 副本的数量,形如:
-- -------------------- ---- ------- ----------- ------------------- ----- ----------------------- --------- ----- ------------ ----- --------------- ----- ---------- ----- -------- ------------ - ------------ -- -------- - ----- -------- --------- ----- --- ------- ----- ----------- ------------------- --
这里,minReplicas 表示最小 Pod 副本数量,maxReplicas 表示最大 Pod 副本数量,当 CPU 使用率高于 50% 时,HPA 被触发,Pod 副本数时 2 至 10 之间。这种方法需要手动编写 YAML 文件,并使用 kubectl apply 命令将其应用到 Kubernetes 集群中。
另外一个自动设置的方法更为简单,只需要执行以下命令:
$ kubectl autoscale deployment frontend --cpu-percent=50 --min=2 --max=10
这里,frontend 是我们前面定义的 Deployment 部署名字。这条命令将自动创建一个 HPA,并设置最小 Pod 副本数为 2,最大为 10,当 CPU 使用率高于 50% 时,HPA 被触发,自动伸缩 Pod 副本数量。
结论
HPA 的自动伸缩能够自动调整 Pod 的副本数量,保证 Kubernetes 集群能够动态适应对容器的请求。在前端应用中,通过对请求负载的监控和分析,我们可以利用 HPA 对容器进行自动伸缩,使其能够在 CPU、内存占用率等不同环境下动态调整,为应用的稳定和可持续性提供了保障。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67223faf2e7021665e0afc70