介绍
HorizontalPodAutoscaler 是 Kubernetes 的一项功能,允许你根据资源利用率自动调整部署中的 Pod 数量。在本实验中,我们将学习如何使用 HorizontalPodAutoscaler 自动扩展我们的部署。
启动 Minikube 集群
在创建资源之前,你需要一个正在运行的 Kubernetes 集群。Minikube 是一个轻量级的 Kubernetes 环境,可以在你的本地机器上运行。
导航到工作目录:
打开终端并导航到默认的项目文件夹:
cd /home/labex/project启动 Minikube:
启动 Minikube 以初始化一个 Kubernetes 集群:
minikube start- 此命令将在你的本地机器上设置一个单节点的 Kubernetes 集群。
- 根据系统性能,Minikube 可能需要几分钟才能启动。
验证 Minikube 是否正在运行:
检查 Minikube 集群的状态:
minikube status- 查找
kubelet和apiserver等组件是否显示为Running。 - 如果集群未运行,请重新运行
minikube start。
- 查找
如果启动 Minikube 时遇到问题,可以使用 minikube delete 重置环境(如有需要)。
创建 Deployment
首先,我们需要创建一个 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 和内存设置了资源限制和请求。
- 创建 Deployment:
kubectl apply -f deployment.yaml
创建 HorizontalPodAutoscaler
现在我们已经有了一个 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%。
- 创建 HorizontalPodAutoscaler:
kubectl apply -f hpa.yaml
测试 HorizontalPodAutoscaler
现在我们已经创建了 HorizontalPodAutoscaler,可以通过在 Deployment 上生成负载来测试它。
- 启用 metrics-server:
minikube addons enable metrics-server
- 创建一个负载生成 Pod:
kubectl run -i --tty load-generator --image=busybox /bin/sh
- 在负载生成 Pod 中,运行以下命令以在 Deployment 上生成负载:
while true; do wget -q -O- http://hpa-demo; done
- 打开另一个终端,检查 HorizontalPodAutoscaler 的状态:
kubectl get hpa
你可以看到 hpa-demo 的副本数已扩展到 10。你可以使用以下命令检查副本数量:
kubectl get pods -l app=hpa-demo
- 在负载生成 Pod 中按
ctrl+c停止负载生成。
总结
在本实验中,我们学习了如何使用 HorizontalPodAutoscaler 根据资源利用率自动扩展 Deployment。我们创建了一个 Deployment,创建了一个 HorizontalPodAutoscaler,并通过在 Deployment 上生成负载来测试它。我们还观察到 HorizontalPodAutoscaler 如何根据增加的负载扩展 Deployment。


