在 Kubernetes 中使用自定义的应用程序指标(通过 Prometheus 等监控系统暴露的指标)结合 Horizontal Pod Autoscaler(HPA)进行自动扩容,可以按照以下步骤进行操作:

一、准备工作

  1. 安装 Prometheus 和相关组件:

    • 在 Kubernetes 集群中安装 Prometheus 服务器、服务发现组件(如 Prometheus Operator)等,以便收集和存储应用程序的指标数据。
    • 确保 Prometheus 能够正确地发现和监控目标应用程序的指标。
  2. 应用程序暴露指标:

    • 在应用程序中集成指标暴露功能,例如使用 Prometheus client libraries 来暴露自定义的应用程序指标。
    • 确保应用程序能够正确地将指标数据暴露给 Prometheus。

二、配置 Prometheus 和 HPA

  1. 创建 ServiceMonitor:

    • 如果使用 Prometheus Operator,创建一个 ServiceMonitor 对象来定义 Prometheus 应该监控的目标服务。
    • ServiceMonitor 通常指定要监控的服务的标签选择器、端口和指标路径等信息。
    • 例如:
apiVersion: monitoring.coreos.com/v1  # 声明此资源对象的 API 版本来自 CoreOS 的监控组件
kind: ServiceMonitor  # 表明这是一个 ServiceMonitor(服务监控器)资源对象
metadata:
  name: my-app-monitor  # 此服务监控器的名称为 my-app-monitor
spec:
  selector:  # 用于选择要监控的服务的标签选择器
    matchLabels:
      app: my-app  # 选择具有标签 app: my-app 的服务进行监控
  endpoints:  # 定义要监控的服务的端点信息
  - port: web  # 要监控的服务的端口名为 web
    path: /metrics  # 指标数据的路径为 /metrics,即 Prometheus 从这里获取指标数据
  1. 创建 HPA:

  • 使用自定义指标创建一个 HPA 对象,指定要监控的指标名称、目标值和扩缩容规则。
  • 例如:
apiVersion: autoscaling/v2beta2  # 声明此资源对象的 API 版本为 autoscaling/v2beta2
kind: HorizontalPodAutoscaler  # 表明这是一个 HorizontalPodAutoscaler(水平 Pod 自动扩缩器)资源对象
metadata:
  name: my-app-hpa  # 此自动扩缩器的名称为 my-app-hpa
spec:
  scaleTargetRef:  # 指定要进行自动扩缩的目标资源
    apiVersion: apps/v1  # 目标资源的 API 版本为 apps/v1
    kind: Deployment  # 目标资源的种类是 Deployment(部署)
    name: my-app  # 目标 Deployment 的名称为 my-app
  metrics:
  - type: Pods  # 指标类型为 Pods,表示基于 Pod 的指标进行扩缩容
    pods:
      metric:
        name: my_custom_metric  # 要使用的自定义指标名称为 my_custom_metric
      target:
        type: AverageValue  # 目标值的类型为平均值
        averageValue: 100  # 目标平均值为 100,即当自定义指标的平均值达到 100 时触发扩缩容操作

三、验证和调整

  1. 验证指标收集:

    • 通过 Prometheus 的 Web UI 或查询接口验证 Prometheus 是否正确地收集了应用程序的自定义指标。
    • 可以使用 PromQL 查询语言来检查指标的可用性和值。
  2. 观察自动扩容:

    • 模拟应用程序的负载变化,观察 HPA 是否根据自定义指标自动调整 Pod 的数量。
    • 可以通过增加负载生成工具(如abhey等)的并发请求数量来模拟高负载情况,观察 Pod 数量是否自动增加。
  3. 调整参数:

    • 根据实际应用的需求和性能测试结果,调整 HPA 的参数,如目标值、最大和最小副本数等。
    • 同时,也可以调整应用程序的指标暴露方式和阈值,以确保自动扩容机制能够有效地响应负载变化。

总之,使用自定义的应用程序指标结合 Prometheus 和 HPA 可以实现更加灵活和精确的自动扩容机制。通过正确地配置 Prometheus 和 HPA,并验证指标的收集和自动扩容的效果,可以提高应用程序的可用性和资源利用率。