在 Kubernetes 中使用 HorizontalPodAutoscaler

KubernetesKubernetesIntermediate
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

HorizontalPodAutoscaler 是 Kubernetes 的一项功能,允许你根据资源利用率自动调整部署中的 Pod 数量。在本实验中,我们将学习如何使用 HorizontalPodAutoscaler 自动扩展我们的部署。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("`Kubernetes`")) -.-> kubernetes/BasicsGroup(["`Basics`"]) kubernetes(("`Kubernetes`")) -.-> kubernetes/BasicCommandsGroup(["`Basic Commands`"]) kubernetes(("`Kubernetes`")) -.-> kubernetes/AdvancedCommandsGroup(["`Advanced Commands`"]) kubernetes(("`Kubernetes`")) -.-> kubernetes/AdvancedDeploymentGroup(["`Advanced Deployment`"]) kubernetes(("`Kubernetes`")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["`Troubleshooting and Debugging Commands`"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("`Initialization`") kubernetes/BasicCommandsGroup -.-> kubernetes/get("`Get`") kubernetes/BasicCommandsGroup -.-> kubernetes/create("`Create`") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("`Apply`") kubernetes/AdvancedDeploymentGroup -.-> kubernetes/scale("`Scale`") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("`Describe`") subgraph Lab Skills kubernetes/initialization -.-> lab-34031{{"`在 Kubernetes 中使用 HorizontalPodAutoscaler`"}} kubernetes/get -.-> lab-34031{{"`在 Kubernetes 中使用 HorizontalPodAutoscaler`"}} kubernetes/create -.-> lab-34031{{"`在 Kubernetes 中使用 HorizontalPodAutoscaler`"}} kubernetes/apply -.-> lab-34031{{"`在 Kubernetes 中使用 HorizontalPodAutoscaler`"}} kubernetes/scale -.-> lab-34031{{"`在 Kubernetes 中使用 HorizontalPodAutoscaler`"}} kubernetes/describe -.-> lab-34031{{"`在 Kubernetes 中使用 HorizontalPodAutoscaler`"}} end

启动 Minikube 集群

在创建资源之前,你需要一个正在运行的 Kubernetes 集群。Minikube 是一个轻量级的 Kubernetes 环境,可以在你的本地机器上运行。

  1. 导航到工作目录

    打开终端并导航到默认的项目文件夹:

    cd /home/labex/project
  2. 启动 Minikube

    启动 Minikube 以初始化一个 Kubernetes 集群:

    minikube start
    • 此命令将在你的本地机器上设置一个单节点的 Kubernetes 集群。
    • 根据系统性能,Minikube 可能需要几分钟才能启动。
  3. 验证 Minikube 是否正在运行

    检查 Minikube 集群的状态:

    minikube status
    • 查找 kubeletapiserver 等组件是否显示为 Running
    • 如果集群未运行,请重新运行 minikube start

如果启动 Minikube 时遇到问题,可以使用 minikube delete 重置环境(如有需要)。

创建 Deployment

首先,我们需要创建一个 Deployment,以便对其应用 HorizontalPodAutoscaler。

  1. 创建一个名为 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 和内存设置了资源限制和请求。

  1. 创建 Deployment:
kubectl apply -f deployment.yaml

创建 HorizontalPodAutoscaler

现在我们已经有了一个 Deployment,接下来可以创建一个 HorizontalPodAutoscaler 来自动扩展该 Deployment。

  1. 创建一个名为 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%。

  1. 创建 HorizontalPodAutoscaler:
kubectl apply -f hpa.yaml

测试 HorizontalPodAutoscaler

现在我们已经创建了 HorizontalPodAutoscaler,可以通过在 Deployment 上生成负载来测试它。

  1. 启用 metrics-server:
minikube addons enable metrics-server
  1. 创建一个负载生成 Pod:
kubectl run -i --tty load-generator --image=busybox /bin/sh
  1. 在负载生成 Pod 中,运行以下命令以在 Deployment 上生成负载:
while true; do wget -q -O- http://hpa-demo; done
  1. 打开另一个终端,检查 HorizontalPodAutoscaler 的状态:
kubectl get hpa

你可以看到 hpa-demo 的副本数已扩展到 10。你可以使用以下命令检查副本数量:

kubectl get pods -l app=hpa-demo
  1. 在负载生成 Pod 中按 ctrl+c 停止负载生成。

总结

在本实验中,我们学习了如何使用 HorizontalPodAutoscaler 根据资源利用率自动扩展 Deployment。我们创建了一个 Deployment,创建了一个 HorizontalPodAutoscaler,并通过在 Deployment 上生成负载来测试它。我们还观察到 HorizontalPodAutoscaler 如何根据增加的负载扩展 Deployment。

您可能感兴趣的其他 Kubernetes 教程