介绍
HorizontalPodAutoscaler 是 Kubernetes 的一项功能,允许你根据资源利用率自动调整部署中的 Pod 数量。在本实验中,我们将学习如何使用 HorizontalPodAutoscaler 自动扩展我们的部署。
💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版
HorizontalPodAutoscaler 是 Kubernetes 的一项功能,允许你根据资源利用率自动调整部署中的 Pod 数量。在本实验中,我们将学习如何使用 HorizontalPodAutoscaler 自动扩展我们的部署。
在创建资源之前,你需要一个正在运行的 Kubernetes 集群。Minikube 是一个轻量级的 Kubernetes 环境,可以在你的本地机器上运行。
导航到工作目录:
打开终端并导航到默认的项目文件夹:
cd /home/labex/project
启动 Minikube:
启动 Minikube 以初始化一个 Kubernetes 集群:
minikube start
验证 Minikube 是否正在运行:
检查 Minikube 集群的状态:
minikube status
kubelet
和 apiserver
等组件是否显示为 Running
。minikube start
。如果启动 Minikube 时遇到问题,可以使用 minikube delete
重置环境(如有需要)。
首先,我们需要创建一个 Deployment,以便对其应用 HorizontalPodAutoscaler。
deployment.yaml
的部署文件,内容如下:apiVersion: apps/v1
kind: Deployment
metadata:
name: hpa-demo
spec:
replicas: 1
selector:
matchLabels:
app: hpa-demo
template:
metadata:
labels:
app: hpa-demo
spec:
containers:
- name: hpa-demo
image: nginx
resources:
limits:
cpu: "1"
memory: 512Mi
requests:
cpu: "0.5"
memory: 256Mi
---
apiVersion: v1
kind: Service
metadata:
name: hpa-demo
spec:
selector:
app: hpa-demo
ports:
- name: http
port: 80
targetPort: 80
此 Deployment 指定了一个 Nginx 容器的单个副本,并为 CPU 和内存设置了资源限制和请求。
kubectl apply -f deployment.yaml
现在我们已经有了一个 Deployment,接下来可以创建一个 HorizontalPodAutoscaler 来自动扩展该 Deployment。
hpa.yaml
的 HorizontalPodAutoscaler 文件,内容如下:apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: hpa-demo
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: hpa-demo
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
averageUtilization: 1
type: Utilization
此 HorizontalPodAutoscaler 指定我们希望将 hpa-demo
Deployment 的副本数扩展为 1 到 10 个,并且目标 CPU 利用率为 50%。
kubectl apply -f hpa.yaml
现在我们已经创建了 HorizontalPodAutoscaler,可以通过在 Deployment 上生成负载来测试它。
minikube addons enable metrics-server
kubectl run -i --tty load-generator --image=busybox /bin/sh
while true; do wget -q -O- http://hpa-demo; done
kubectl get hpa
你可以看到 hpa-demo
的副本数已扩展到 10
。你可以使用以下命令检查副本数量:
kubectl get pods -l app=hpa-demo
ctrl+c
停止负载生成。在本实验中,我们学习了如何使用 HorizontalPodAutoscaler 根据资源利用率自动扩展 Deployment。我们创建了一个 Deployment,创建了一个 HorizontalPodAutoscaler,并通过在 Deployment 上生成负载来测试它。我们还观察到 HorizontalPodAutoscaler 如何根据增加的负载扩展 Deployment。