当用户使用自建 Prometheus 监控集群时,可以在集群中部署开源 Prometheus Adapter,用于对接自建 Prometheus,实现基于自定义指标的容器水平伸缩(HPA)。本文介绍如何在集群中部署开源 Prometheus Adapter,并实现 HPA。
您可以使用自建 Prometheus 或 托管 Prometheus 对接容器服务集群,并实现基于指标的容器水平伸缩(HPA)。对接不同系统时的主要差异,如下所示。
对比项 | Prometheus-adapter 组件 | 开源 Prometheus-adapter |
---|---|---|
稳定性与支持 | 容器服务提供稳定性保障与技术支持。 | 由用户运维 ,从社区获取支持。 |
适配性 | 可自动适配托管 Prometheus 服务。 | 需用户自行搭建并适配自建 Prometheus 服务。 |
易用性 | 易用性强。 | 与社区特性一致。 |
对比项 | 托管 Prometheus | 自建 Prometheus |
---|---|---|
适配性 | 与容器服务集群深度适配。 | 由用户运维 ,与社区一致。 |
服务范围 | 提供从采集到观测的完整托管方案。 | - |
访问方式 | 支持标准 Prometheus 访问方式。 | - |
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update helm pull prometheus-community/prometheus-adapter
prometheus-adapter-4.11.0.tgz
为例)。tar -zxvf prometheus-adapter-4.11.0.tgz && cd prometheus-adapter
values.yaml
文件,将其中的 Prometheus URL 修改为自建 Prometheus 的 Query 地址。若不需要端口号,可直接删除。values.yaml
中添加extraArguments
字段,进行 Prometheus Adapter 鉴权。鉴权 Token 需通过在线或离线工具,依据 Prometheus Basic Auth 的账号和密码生成,并添加到相应配置项中。linux/amd64
架构为例)。docker pull --platform linux/amd64 registry.k8s.io/prometheus-adapter/prometheus-adapter:v0.12.0
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
docker push doc-cn-beijing.cr.volces.com/vke/prometheus-adapter-demo:v1.0
values.yaml
文件中的镜像路径,指向推送后的镜像地址。values.yaml
中关于自定义指标的配置部分,将default
设置为false
,表示不启用默认配置。custom
自定义规格字段,以网络指标container_network_receive_bytes_total
和container_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'
在prometheus-adapter
文件夹下,执行以下命令,安装 Chart。其中prom-adapter
可根据需求换成其他名称。
helm install prom-adapter .
Pormetheus-adapter 安装完成后,登录集群,确认相关工作负载、配置项均正常。
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
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