You need to enable JavaScript to run this app.
导航
基于自建 Prometheus 实现弹性伸缩
最近更新时间:2025.02.14 11:41:09首次发布时间:2025.02.14 11:41:09

当用户使用自建 Prometheus 监控集群时,可以在集群中部署开源 Prometheus Adapter,用于对接自建 Prometheus,实现基于自定义指标的容器水平伸缩(HPA)。本文介绍如何在集群中部署开源 Prometheus Adapter,并实现 HPA。

差异性说明

您可以使用自建 Prometheus 或 托管 Prometheus 对接容器服务集群,并实现基于指标的容器水平伸缩(HPA)。对接不同系统时的主要差异,如下所示。

Prometheus-adapter 组件与开源 Prometheus-adapter

对比项Prometheus-adapter 组件开源 Prometheus-adapter
稳定性与支持容器服务提供稳定性保障与技术支持。由用户运维 ,从社区获取支持。
适配性可自动适配托管 Prometheus 服务。需用户自行搭建并适配自建 Prometheus 服务。
易用性易用性强。与社区特性一致。

托管 Prometheus 与自建 Prometheus

对比项托管 Prometheus自建 Prometheus
适配性与容器服务集群深度适配。由用户运维 ,与社区一致。
服务范围提供从采集到观测的完整托管方案。-
访问方式支持标准 Prometheus 访问方式。-

前提条件

  • 已创建集群,且集群运行状态正常。详情请参见 创建集群
  • 已完成自建 Prometheus 服务搭建,且保证 VKE 集群能够正常访问该服务,采集指标数据。
  • 完成本地环境(Linux/Mac)的配置,包括:
    • 安装并完成配置 Helm 工具,确保 Helm 能正常连接到指定的 Helm 仓库。
    • 已安装 kubectl 工具到本地。具体操作说明,请参见 安装和设置 kubectl
    • 已通过 kubectl 连接目标集群。具体操作说明,请参见 连接集群

使用限制

  • 在修改 Prometheus URL 和配置鉴权时 ,若配置错误可能导致 Prometheus Adapter 无法正常获取指标数据 ,进而影响 HPA 的弹性伸缩功能。
  • 拉取镜像时,若指定的镜像架构与 Kubernetes 集群节点架构不一致 ,可能导致镜像无法在集群中正常运行。
  • 配置自定义指标时,若指标配置错误,HPA 将无法按照预期的自定义指标进行弹性伸缩,可能造成资源浪费或业务性能下降。

操作步骤

步骤一:拉取 Chart

  1. 在本地主机中,执行以下命令,拉取 Prometheus-adapter Chart 到本地。
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm pull prometheus-community/prometheus-adapter
  1. 解压拉取到的 Chart 文件,并进入解压后的文件夹(本文以文件名prometheus-adapter-4.11.0.tgz为例)。
tar -zxvf prometheus-adapter-4.11.0.tgz && cd prometheus-adapter

步骤二:修改配置

  1. 在本地环境中打开values.yaml文件,将其中的 Prometheus URL 修改为自建 Prometheus 的 Query 地址。若不需要端口号,可直接删除。
    alt
  2. 若自建 Prometheus 配置了 Basic Auth 鉴权,则需要在values.yaml中添加extraArguments字段,进行 Prometheus Adapter 鉴权。鉴权 Token 需通过在线或离线工具,依据 Prometheus Basic Auth 的账号和密码生成,并添加到相应配置项中。
    alt

步骤三:构建镜像

  1. 在本地拉取与 Kubernetes 集群节点架构一致的镜像(本文以linux/amd64架构为例)。
docker pull --platform linux/amd64 registry.k8s.io/prometheus-adapter/prometheus-adapter:v0.12.0
  1. 为拉取的镜像打标签,并指定目标镜像仓库地址、镜像名称和版本号。本文以doc-cn-beijing.cr.volces.com/vke/prometheus-adapter-demo:v1.0为例。
docker tag registry.k8s.io/prometheus-adapter/prometheus-adapter:v0.12.0 doc-cn-beijing.cr.volces.com/vke/prometheus-adapter-demo:v1.0
  1. 将镜像推送到目标镜像仓库。如果您使用火山引擎镜像仓库产品,更多操作详情,请参见 推送和拉取镜像
docker push doc-cn-beijing.cr.volces.com/vke/prometheus-adapter-demo:v1.0
  1. 修改values.yaml文件中的镜像路径,指向推送后的镜像地址。
    alt

步骤四:配置自定义指标

  1. 打开values.yaml中关于自定义指标的配置部分,将default设置为false,表示不启用默认配置。
    alt
  2. 配置custom自定义规格字段,以网络指标container_network_receive_bytes_totalcontainer_network_transmit_bytes_total为例,配置示例如下。
rules:
  default: false

  custom:
    - seriesQuery: 'container_network_receive_bytes_total'
      resources:
        overrides:
          namespace: {resource: "namespace"}
          pod: {resource: "pod"}
      name: {as: 'k8s_pod_network_receive_throughput'}
      metricsQuery: 'sum(rate(<<.Series>>{<<.LabelMatchers>>,pod!=""}[1m])) by (<<.GroupBy>>) / 125000.0'
    - seriesQuery: 'container_network_transmit_bytes_total'
      resources:
        overrides:
          namespace: {resource: "namespace"}
          pod: {resource: "pod"}
      name: {as: 'k8s_pod_network_transmit_throughput'}
      metricsQuery: 'sum(rate(<<.Series>>{<<.LabelMatchers>>,pod!=""}[1m])) by (<<.GroupBy>>) / 125000.0'

步骤五:安装 Chart

prometheus-adapter文件夹下,执行以下命令,安装 Chart。其中prom-adapter可根据需求换成其他名称。

helm install prom-adapter .

查看配置

Pormetheus-adapter 安装完成后,登录集群,确认相关工作负载、配置项均正常。

  1. 登录 容器服务控制台
  2. 单击左侧导航栏中的 集群
  3. 在集群列表页面,单击需要配置的目标集群。
  4. 在集群管理页面的左侧导航栏中,选择 工作负载 > 无状态负载,在列表中确认工作负载运行正常。
    alt
  5. 在集群管理页面的左侧导航栏中,选择 配置管理 > 配置项,查看配置项。
    alt
  6. 在集群管理页面的左侧导航栏中,单击 工作负载 > 对象浏览器,在 分类 下拉菜单中选择 API Group,查看 API Group。
    alt

结果验证

  1. 在集群中创建工作负载。本示例以创建无状态负载(Deployment)为例。
apiVersion: apps/v1
kind: Deployment
metadata:
  name: workload-demo
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: workload-demo
  template:
    metadata:
      labels:
        app: workload-demo
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
  1. 创建与工作负载关联的 HPA,指定按照网络指标进行弹性伸缩。
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-demo
  namespace: default
spec:
  maxReplicas: 10
  metrics:
  - pods:
      metric:
        name: k8s_pod_network_receive_throughput
      target:
        averageValue: "80"
        type: AverageValue
    type: Pods
  - pods:
      metric:
        name: k8s_pod_network_transmit_throughput
      target:
        averageValue: "80"
        type: AverageValue
    type: Pods
  minReplicas: 1
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: workload-demo
  1. 查看工作负载详情,选择 弹性伸缩 页签,即可查看当前工作负载的 HPA 配置。实现基于自建 Prometheus 的工作负载水平伸缩。

alt