摘要:Kubernetes 的自动扩缩容功能(Horizontal Pod Autoscaler,简称 HPA)是运维和开发人员管理应用负载的重要工具。通过 HPA,Kubernetes 可以根据 CPU 使用率、内存使用率或其他自定义指标,自动调整 Pod 的数量
Kubernetes 的自动扩缩容功能(Horizontal Pod Autoscaler,简称 HPA)是运维和开发人员管理应用负载的重要工具。通过 HPA,Kubernetes 可以根据 CPU 使用率、内存使用率或其他自定义指标,自动调整 Pod 的数量,从而确保应用在高负载时能够扩展,在低负载时能够收缩,既提高了资源利用率,又保证了应用的稳定性。
本文将详细介绍如何在 Kubernetes 中配置和使用 HPA,并结合实际示例帮助您快速上手。
HPA 的核心原理是通过监控目标 Pod 的资源使用情况(如 cpu、内存)或自定义指标,动态调整 Pod 的副本数量。HPA 的工作流程如下:
监控指标:HPA 从 Metrics Server 或其他监控系统中获取目标 Pod 的资源使用情况。计算期望副本数:根据当前指标值和目标值,计算所需的 Pod 副本数。调整副本数:通过 Kubernetes API 更新 Deployment 或 ReplicaSet 的副本数。持续监控:HPA 会定期检查指标,并根据需要调整副本数。在配置 HPA 之前,请确保您的 Kubernetes 集群满足以下条件:
Metrics Server:HPA 依赖于 Metrics Server 来获取 Pod 的资源使用情况。如果您的集群尚未安装 Metrics Server,可以通过以下命令安装:kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml资源请求配置:HPA 需要 Pod 配置资源请求(requests),例如 CPU 和内存。如果未配置资源请求,HPA 将无法正常工作。首先,我们需要创建一个 Deployment 作为 HPA 的目标。以下是一个简单的 nginx Deployment 示例:
apiVersion: apps/v1kind: Deploymentmetadata:name: nginx-deploymentspec:replicas: 2selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.14.2resources:requests:cpu: "200m" # 配置 CPU 请求memory: "128Mi"使用以下命令创建 Deployment:
kubectl apply -f nginx-deployment.yaml接下来,我们为 Deployment 创建一个 HPA。以下是一个基于 CPU 使用率的 HPA 示例:
apiVersion: autoscaling/v2kind: HorizontalPodAutoscalermetadata:name: nginx-hpaspec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: nginx-deploymentminReplicas: 2 # 最小副本数maxReplicas: 10 # 最大副本数metrics:- type: Resourceresource:name: CPUtarget:type: UtilizationaverageUtilization: 50 # 目标 CPU 使用率使用以下命令创建 HPA:
kubectl apply -f nginx-hpa.yaml创建 HPA 后,可以通过以下命令查看 HPA 的状态:
kubectl get hpa输出示例:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGEnginx-hpa Deployment/nginx-deployment 50%/50% 2 10 2 1mTARGETS:当前指标值与目标值的比率。REPLICAS:当前的 Pod 副本数。为了测试 HPA 的效果,我们可以通过增加负载来触发自动扩容。
使用 kubectl run 创建一个临时的 Pod 来模拟负载:
kubectl run -i --tty load-generator --image=busybox --restart=Never -- /bin/sh -c "while true; do wget -q -O- http://nginx-deployment; done"通过以下命令观察 HPA 的变化:
kubectl get hpa -w当 CPU 使用率超过目标值(50%)时,HPA 会自动增加 Pod 的副本数。
停止负载生成 Pod:
kubectl delete pod load-generator当负载降低后,HPA 会自动减少 Pod 的副本数。
高级配置5.1 基于内存的自动扩缩容
除了 CPU,HPA 还支持基于内存的自动扩缩容。只需在 HPA 的 metrics 部分添加内存指标即可:metrics:- type: Resourceresource:name: memorytarget:type: UtilizationaverageUtilization: 50
HPA 还支持基于自定义指标的自动扩缩容。例如,可以根据请求量或队列长度来调整 Pod 的副本数。具体配置需要结合 Prometheus 和 Kubernetes Custom Metrics API 实现。
通过 HPA,Kubernetes 可以自动调整应用的 Pod 数量,确保应用在
高负载时能够扩展,在低负载时能够收缩。本文介绍了如何配置基于 CPU 和内存的 HPA,并提供了测试方法和高级配置建议。
来源:小鱼科技每日一讲