如何配置和优化 Kubernetes 水平 Pod 自动扩缩器

KubernetesKubernetesBeginner
立即练习

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

简介

本教程将指导你了解和配置 Kubernetes 水平 Pod 自动扩缩器(Horizontal Pod Autoscaler,HPA)功能。HPA 会根据观察到的资源利用率或其他自定义指标自动调整部署或副本集中的 Pod 数量,确保你的应用程序无需人工干预即可处理增加的流量或负载。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedDeploymentGroup(["Advanced Deployment"]) kubernetes(("Kubernetes")) -.-> kubernetes/ClusterManagementCommandsGroup(["Cluster Management Commands"]) kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/run("Run") kubernetes/AdvancedDeploymentGroup -.-> kubernetes/scale("Scale") kubernetes/ClusterManagementCommandsGroup -.-> kubernetes/top("Top") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") subgraph Lab Skills kubernetes/get -.-> lab-417662{{"如何配置和优化 Kubernetes 水平 Pod 自动扩缩器"}} kubernetes/run -.-> lab-417662{{"如何配置和优化 Kubernetes 水平 Pod 自动扩缩器"}} kubernetes/scale -.-> lab-417662{{"如何配置和优化 Kubernetes 水平 Pod 自动扩缩器"}} kubernetes/top -.-> lab-417662{{"如何配置和优化 Kubernetes 水平 Pod 自动扩缩器"}} kubernetes/describe -.-> lab-417662{{"如何配置和优化 Kubernetes 水平 Pod 自动扩缩器"}} end

了解 Kubernetes 水平 Pod 自动扩缩器

Kubernetes 水平 Pod 自动扩缩器(Horizontal Pod Autoscaler,HPA)是一项强大的功能,它可以根据观察到的 CPU 利用率或其他指标自动调整部署或副本集中的 Pod 数量。这有助于确保你的应用程序无需人工干预即可处理增加的流量或负载。

HPA 的工作方式是监控部署或副本集中 Pod 的资源利用率,并自动调整副本数量以满足你指定的目标利用率。这有助于防止资源过度配置或配置不足,并确保你的应用程序高效运行。

要使用水平 Pod 自动扩缩器,你需要在 Kubernetes 集群中定义一个 HorizontalPodAutoscaler 资源。此资源指定目标指标、副本的最小和最大数量以及其他配置选项。

以下是一个 HorizontalPodAutoscaler 资源的示例:

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: example-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: example-deployment
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        targetAverageUtilization: 50

在此示例中,HPA 被配置为根据 Pod 的平均 CPU 利用率扩展 example-deployment 部署。副本的最小数量设置为 2,最大数量设置为 10。目标平均 CPU 利用率设置为 50%。

当 Pod 的平均 CPU 利用率超过 50% 时,HPA 将自动增加副本数量以满足目标利用率。当 CPU 利用率降至 50% 以下时,HPA 将自动减少副本数量。

HPA 还可以配置为使用其他指标,例如内存利用率、每秒 HTTP 请求数或你的应用程序提供的自定义指标。

总体而言,Kubernetes 水平 Pod 自动扩缩器是一个强大的工具,可根据资源利用率自动扩展你的应用程序,确保你的应用程序无需人工干预即可处理增加的负载。

配置 Kubernetes 水平 Pod 自动扩缩器

配置 Kubernetes 水平 Pod 自动扩缩器(Horizontal Pod Autoscaler,HPA)涉及定义目标指标、扩缩阈值及其他参数,以控制应用程序的自动扩缩。

HPA 最常用的指标之一是 CPU 利用率。你可以将 HPA 配置为根据 Pod 的平均 CPU 利用率来扩展你的部署或副本集。例如,你可以将目标平均 CPU 利用率设置为 50%,HPA 将自动增加或减少副本数量以维持此目标。

以下是如何基于 CPU 利用率配置 HPA 的示例:

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: example-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: example-deployment
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        targetAverageUtilization: 50

除了 CPU 利用率,你还可以将 HPA 配置为基于其他指标进行扩缩,例如内存利用率、每秒 HTTP 请求数或你的应用程序提供的自定义指标。要配置自定义指标,你需要设置一个 Prometheus 服务器或其他监控解决方案,以便将指标暴露给 Kubernetes API。

以下是如何基于自定义指标配置 HPA 的示例:

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: example-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: example-deployment
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Pods
      pods:
        metricName: http_requests
        targetAverageValue: 100

在此示例中,HPA 被配置为基于 http_requests 指标进行扩缩,目标平均值为每秒 100 个请求。

你还可以将 HPA 配置为使用多个指标,并为每个指标指定扩缩阈值。这可以帮助你微调应用程序的扩缩行为,以满足你的特定要求。

总体而言,配置 Kubernetes 水平 Pod 自动扩缩器涉及定义目标指标、扩缩阈值及其他参数,以控制应用程序的自动扩缩。通过利用 HPA,你可以确保你的应用程序无需人工干预即可处理增加的负载。

监控和优化 Kubernetes 水平 Pod 自动扩缩器

监控 Kubernetes 水平 Pod 自动扩缩器(Horizontal Pod Autoscaler,HPA)对于确保其正常运行并满足应用程序的扩缩需求至关重要。Kubernetes 提供了多个工具和指标供你用于监控 HPA。

要监控的最重要指标之一是 Pod 的当前和目标资源利用率。你可以使用 kubectl top pods 命令查看 Pod 的当前 CPU 和内存使用情况,并将其与 HPA 配置中指定的目标利用率进行比较。

$ kubectl top pods
NAME                        CPU(cores)   MEMORY(bytes)
example-deployment-5b7f8b   250m         256Mi
example-deployment-7b6f9c   200m         300Mi
example-deployment-a4e2d5   150m         200Mi

你还可以使用 kubectl describe hpa 命令查看 HPA 生成的扩缩事件。这将向你展示 HPA 何时进行了扩缩以及扩缩事件的原因。

$ kubectl describe hpa example-hpa
...
Events:
  Type    Reason             Age   From                       Message
  ----    ------             ----  ----                       -------
  Normal  SuccessfulRescale  2m    horizontal-pod-autoscaler  New size: 5; reason: cpu resource utilization (percentage of request) above target
  Normal  SuccessfulRescale  1m    horizontal-pod-autoscaler  New size: 3; reason: cpu resource utilization (percentage of request) below target

为了优化 HPA 的性能,你可以根据观察到的性能指标调整扩缩阈值和参数。例如,如果你的应用程序扩缩过于频繁,你可能想要提高目标 CPU 利用率;如果应用程序缩容过快,你可以降低目标利用率。

你还可以将 HPA 配置为使用自定义指标,例如每秒 HTTP 请求数或队列深度,以便使扩缩行为更好地符合应用程序的特定要求。

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: example-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: example-deployment
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Pods
      pods:
        metricName: http_requests
        targetAverageValue: 100

通过监控 HPA 的性能并根据需要调整扩缩阈值和参数,你可以确保应用程序高效扩缩并满足用户需求。

总结

在本教程中,你学习了如何使用 Kubernetes 水平 Pod 自动扩缩器(Horizontal Pod Autoscaler,HPA)基于各种指标(包括 CPU 利用率、内存使用情况和自定义指标)自动扩展你的应用程序。通过配置 HPA,你可以优化资源利用率,并确保你的应用程序无需手动扩缩即可处理增加的流量或负载。HPA 是一项强大的功能,可帮助你更高效、可靠地运行基于 Kubernetes 的应用程序。