You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

复制全文
下载 pdf
基础配置
服务发现
复制全文
下载 pdf
服务发现
服务发现用于将 VKE 集群中的业务指标端点接入托管 Prometheus,实现自定义指标采集。本文介绍 VKE 集群支持的服务发现方式和配置步骤,并验证指标是否正常采集。
背景信息
Prometheus 主要通过 Pull 的方式来抓取目标服务暴露的监控接口。因此,您需要在集群中配置对应的服务发现规则,指定采集对象,才能完成数据采集,并写入到托管 Prometheus 服务的工作区中。
容器服务集群中支持使用如下 CRD 资源,自定义指标采集配置。不同资源的概念和适用场景,如下表所示。
资源类型
说明
适用场景
ServiceMonitor
使用 NameSpace 和 Label 指定需要进行监控的 Service,并通过 Service 发现后端 Pod。
通过 Service 暴露指标的组件或业务。例如 CoreDNS、控制面服务、业务服务等。
PodMonitor
直接使用 NameSpace 和 Label 指定需要进行监控的 Pod。
未通过 Service 暴露指标、或希望直接按 Pod 采集的组件。例如 CSI 组件等。
VMNodeScrape
直接采集 Kubernetes 节点级别的指标,无需通过 Service 或 Pod 中转。
节点级组件指标,例如 node-exporter、kubelet、cadvisor 等。
Service/Pod annotation
通过给 Service 或 Pod 配置指定的 annotation,实现服务发现。
适用场景与 ServiceMonitor 和 PodMonitor 一致。但通过在部署资源对象时,添加指定的 annotation 字段,方便在资源对象较多时,实现快速接入。
前提条件
通过 ServiceMonitor 实现服务发现
配置步骤
ServiceMonitor 通过匹配 Service 来发现后端 Pod,适用于应用已通过 Service 暴露指标端口的场景。配置后,系统会按 ServiceMonitor 中的端口、路径和标签规则抓取目标指标。操作步骤如下:
  1. 在左侧菜单栏中选择 集群,并在右侧集群列表中选择目标集群。
  1. 单击集群名称,进入集群配置页面。
  1. 在左侧菜单栏中选择 工作负载 > 对象浏览器,单击 使用 Yaml 创建 ,通过 ServiceMonitor 配置服务发现。
  • 类型 下拉菜单中选择 自定义
  • Yaml 配置框内输入 Yaml 配置。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: service-discover # 配置服务发现的名称
namespace: volcano-metrics # 配置服务发现的命名空间
labels:
volcengine.vmp: "true" # 配置服务发现的标签,允许被 Agent 发现
spec:
endpoints:
- interval: 15s # 配置采集的时间间隔,默认为 15 秒
scrapeTimeout: 10s # 配置采集超时时间,默认为 10 秒
port: metrics # 填写服务端口名称,该端口名称必须在容器的配置中显式声明
path: /metrics # 填写指标暴露的 URI 路径,默认为 /metrics
scheme: http # 配置采集协议,支持 HTTP 和 HTTPS ,默认为 HTTP
relabelings: # 配置指标的 relabel。如没有需求,可省略。本示例以添加一个固定 label:environment="Production"为例
- targetLabel: environment
action: replace
replacement: Production
namespaceSelector: # 配置为采集对象所在的命名空间,不填写表示选择当前命名空间
matchNames:
- volcano-metrics
selector: # 配置 Service 的 Label 值,以定位和选择目标 Service
matchLabels:
app.kubernetes.io/name: ek8s-gpu-exporter
说明
更多配置项说明,请参见 官方文档
  1. 单击 确定,完成配置。
查看配置
在容器服务中创建 CRD 后,可以遵循以下步骤,查看、编辑或删除配置。
  1. 在左侧菜单栏中选择 集群,并在右侧集群列表中选择目标集群。
  1. 单击集群名称,进入集群配置页面。
  1. 在左侧菜单栏中选择 工作负载 > 对象浏览器,在 分类 下拉菜单中选择 CRD,即可查看创建的 CRD 资源。
  • alt
  1. 单击 ServiceMonitor,进入详情页。
  1. 选择需要编辑或删除的配置项,单击 操作 栏的...,选择 编辑 Yaml删除,即可编辑或删除该配置。
  • alt
通过 PodMonitor 实现服务发现
配置步骤
PodMonitor 直接通过 Pod 标签发现采集目标,适用于目标 Pod 没有通过 Service 暴露,或希望绕过 Service 直接采集 Pod 指标的场景。配置后,系统会按 PodMonitor 中的端口、路径和标签规则抓取目标指标。操作步骤如下:
  1. 在左侧菜单栏中选择 集群,并在右侧集群列表中选择目标集群。
  1. 单击集群名称,进入集群配置页面。
  1. 在左侧菜单栏中选择 工作负载 > 对象浏览器,单击 使用 Yaml 创建 ,通过 PodMonitor 配置服务发现。
  • 类型 下拉菜单中选择 自定义
  • Yaml 配置框内输入 Yaml 配置。
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: pod-discover # 配置服务发现的名称
namespace: volcano-metrics # 配置服务发现的命名空间
labels:
volcengine.vmp: "true" # 配置服务发现的标签,允许被 Agent 发现
spec: # 描述采集目标 Pod 的特征和采集任务的配置
podMetricsEndpoints: # 配置需要监控对象的 Prometheus HTTP 接口,可以配置多个 Endpoint
- interval: 15s # 配置采集的时间间隔,默认为 15 秒
scrapeTimeout: 10s # 配置采集超时时间,默认为 10 秒
port: metric-port # 填写容器端口名称,该端口名称必须在容器的配置中显式声明
path: /metrics # 填写指标暴露的 URI 路径,默认为 /metrics
scheme: http # 配置采集协议,支持 HTTP 和 HTTPS ,默认为 HTTP
relabelings: # 配置指标的标签改写功能,允许配置多个改写规则,按照顺序执行
- action: replace # 标签匹配后的操作,包括:replace(替换)、keep、drop
sourceLabels: # 从原始 labels 中取哪些 label 的值进行 relabel
- instance
regex: (.*) # 对 source labels 对应值进行正则匹配的表达式
targetLabel: instance # 当 action 为 replace 时,通过 target_label 来指定对应 label name
replacement: 'kafka-xxxxxx' # 当 action 为 replace 时,通过 replacement 来定义当 regex 匹配之后需要替换的表达式
namespaceSelector: # 配置为采集对象所在的命名空间,不填写表示选择当前命名空间
matchNames:
- volcano-metrics
selector: # 配置采集对象的 Label 值,以定位和选择目标 Pod
matchLabels:
app-name: kafka-exporter
说明
更多配置项说明,请参见 官方文档
  1. 单击 确定,完成配置。
查看配置
在容器服务中创建 CRD 后,可以遵循以下步骤,查看、编辑或删除配置。
  1. 在左侧菜单栏中选择 集群,并在右侧集群列表中选择目标集群。
  1. 单击集群名称,进入集群配置页面。
  1. 在左侧菜单栏中选择 工作负载 > 对象浏览器,在 分类 下拉菜单中选择 CRD,即可查看创建的 CRD 资源。
  • alt
  1. 单击 PodMonitor,进入详情页。
  1. 选择需要编辑或删除的配置项,单击 操作 栏的...,选择 编辑 Yaml删除,即可编辑或删除该配置。
  • alt
通过 VMNodeScrape 实现服务发现
配置步骤
您可以通过 VMNodeScrape 配置节点级别的指标发现。本文以配置 kubelet 指标为例,操作步骤如下:
注意
  • 配置 kubelet 的指标时,建议保留节点发现和 TLS 相关配置,然后在metricRelabelConfigs中补充需要新增采集的指标名,例如kubelet_evictions
  • 请合理选择自定义采集规则中的采集范围和指标,如果您自定义采集规则中的配置与集群默认采集规则存在重叠,将会导致指标被重复抓取,进而重复计费。
  1. 在左侧菜单栏中选择 集群,并在右侧集群列表中选择目标集群。
  1. 单击集群名称,进入集群配置页面。
  1. 在左侧菜单栏中选择 工作负载 > 对象浏览器,单击 使用 Yaml 创建 ,通过 VMNodeScrape 配置服务发现。
  • 类型 下拉菜单中选择 自定义
  • Yaml 配置框内输入 Yaml 配置。
apiVersion: operator.victoriametrics.com/v1beta1
kind: VMNodeScrape
metadata:
name: custom-kubelet # 自定义服务发现名称
namespace: kube-system # 自定义服务发现所属命名空间
labels:
volcengine.vmp: "true" # 配置服务发现的标签,允许被 Agent 发现
spec:
bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
interval: 15s # 采集频率,每 15 秒抓取一次所有目标节点的指标
scheme: https # kubelet 默认通过 HTTPS(端口 10250)暴露指标,必须显式声明
selector: # 通过 Kubernetes Label Selector 过滤要采集的节点
matchExpressions:
- key: node.kubernetes.io/instance-type
operator: NotIn
values:
- dcp-node
tlsConfig: # 节点 TLS 配置,与默认规则保持一致即可
caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
insecureSkipVerify: true
relabelConfigs:
- replacement: kubelet-custom # 将节点的 job 标签改写为 kubelet-custom,方便后续使用 job="kubelet-custom" 进行指标过滤
targetLabel: job
- regex: (.+)
sourceLabels:
- __meta_kubernetes_node_name
targetLabel: node
- regex: volcengine://(.+)
sourceLabels:
- __meta_kubernetes_node_provider_id
targetLabel: ecs
metricRelabelConfigs: # 指标过滤配置
- action: keep # 保留指标
sourceLabels: # 基于指标名称过滤,在本例中仅保留正则表达式匹配的指标
- __name__
regex: kubelet_running_pods|kubelet_node_name|kubelet_evictions # 指定需要保留的指标名称或正则表达式,即该采集规则最终采集的指标
  1. 单击 确定,完成配置。
查看配置
在容器服务中创建自定义配置后,可以遵循以下步骤,查看、编辑或删除配置。
  1. 在左侧菜单栏中选择 集群,并在右侧集群列表中选择目标集群。
  1. 单击集群名称,进入集群配置页面。
  1. 在左侧菜单栏中选择 工作负载 > 对象浏览器,在 分类 下拉菜单中选择 CRD,通过关键字vmnodescrape进行检索,即可查看集群中的配置。
  1. 单击资源名称,进入详情页。
  1. 选择需要编辑或删除的配置项,单击 操作 栏的...,选择 编辑 Yaml删除,即可编辑或删除自定义配置。
警告
请勿删除集群默认配置,否则可能导致集群观测功能异常。
通过 Service/Pod annotation 实现服务发现
背景
如上文所述,您可以使用 ServiceMonitor 或 PodMonitor 实现服务发现。但是,如果集群中有很多的 Service/Pod,那么就需要人工去创建多个 ServiceMonitor 或 PodMonitor 对象来进行监控,这会使得您的配置变得尤为复杂。
为了解决上述问题,托管 Prometheus 为您提供了另外一种服务发现方式,即通过配置 Service/Pod annotation 来实现服务发现。您可以在部署 Service 或 Pod 时,添加指定的 annotation 字段,实现业务的快速接入。
注意
  • Service/Pod annotation 是一种快速的服务发现方式,但也存在部分问题,例如:无法实现指标的 Relabel 等。您需要根据实际需求,合理选择使用。
  • kube-system 命名空间下无法使用 Service/Pod annotation 实现服务发现。如有需求,建议使用 ServiceMonitor 或 PodMonitor 实现。
概述
当您在集群中配置 Service/Pod 时,可以通过添加如下的 annotation,实现对自定义目标的服务发现。
prometheus.io/scrape: "true" # 配置为 true 表示开启采集
prometheus.io/port: "9400" # 配置为采集指标暴露的端口号
prometheus.io/path: "/metrics" # 填写指标暴露的 URI 路径,一般是 /metrics
说明
使用prometheus.io/port: "9400"指定目标的端口号时,该端口必须在容器的配置中显式声明,如下所示:
...
spec:
containers:
ports:
- containerPort: 9400 # 在容器配置中,对容器端口进行显式声明
通过 Service annotation 配置服务发现
当您在集群中配置服务时,可以添加 annotation 完成服务发现。方便服务快速接入监控,步骤如下:
  1. 单击左侧导航栏中的 集群
  1. 在集群列表页面,单击目标集群,进入集群管理页面。
  1. 在左侧导航栏中,选择 服务与路由 > 服务,单击 使用 Yaml 创建 ,配置服务,并同时添加 annotation,实现服务发现。
apiVersion: v1
kind: Service
metadata:
name: golang-service-demo
namespace: volcano-metrics # 配置服务所在的命名空间
labels:
app: golang-service-demo # 配置服务的标签
annotations:
prometheus.io/scrape: "true" # 配置为 true 表示开启服务发现
prometheus.io/port: "2023" # 配置为采集指标暴露的端口号,该端口号必须在容器的配置中显式声明
prometheus.io/path: "/metrics" # 填写指标暴露的 URI 路径,一般是 /metrics
spec:
selector:
app: golang-demo
ports:
- protocol: TCP
port: 2023
targetPort: 2023
name: metrics # 配置服务端口名称
type: ClusterIP
通过 Pod Annotation 配置服务发现
当您在集群中配置 Pod 时,可以添加 annotation 完成服务发现。方便 Pod 快速接入监控,步骤如下:
  1. 单击左侧导航栏中的 集群
  1. 在集群列表页面,单击目标集群,进入集群管理页面。
  1. 在左侧菜单栏中选择 工作负载 > 无状态负载,单击 使用 Yaml 创建 ,部署应用,并同时添加 annotation,实现服务发现。
apiVersion: apps/v1
kind: Deployment
metadata:
name: golang-demo # 配置应用的名称
namespace: volcano-metrics # 配置应用所在的命名空间
labels:
app: golang-demo # 配置应用的标签
spec:
replicas: 2 # 配置应用副本数
selector:
matchLabels:
app: golang-demo
template:
metadata:
labels:
app: golang-demo
annotations:
prometheus.io/scrape: "true" # 配置为 true 表示开启服务发现
prometheus.io/port: "2023" # 配置为采集指标暴露的端口号,该端口号必须在容器的配置中显式声明
prometheus.io/path: "/metrics" # 填写指标暴露的 URI 路径,一般是 /metrics
spec:
containers:
- name: golang-demo # 配置容器名称
image: doc-cn-beijing.cr.volces.com/vmp/golang-demo:1.0 # 配置应用镜像的地址和版本
ports:
- containerPort: 2023 # 配置容器端口号
说明
  • 本例以配置无状态负载(Deployment)为例,其他类型工作负载配置的方法相同。
  • 本例中的镜像地址为举例,您需要将其修改为实际环境中镜像的正确地址。
  • 使用 Pod annotation 实现服务发现时,不能同时支持 HTTP 和 HTTPS。
后续操作
配置服务发现后,您可以使用托管 Prometheus 的 Explore 功能,确认是否已经发现了期望的服务。操作步骤如下:
  1. 登录 VMP 服务控制台
  1. 在顶部导航栏,选择目标地域。
  1. 单击左侧导航栏的 Explore,进入 Explore 页面。
  1. 在右上角的配置项中,配置需要查询指标的 工作区,并在 指标检索 文本框内,输入 up{job="xxx"}语句,查看对应的服务是否被正确发现。指标的值为 1 表示对应的服务已经被正确发现。
  • alt
说明
如果您仍然无法正确查询到预期的指标,请参见 无法正确查看到预期的指标?
最近更新时间:2026.08.31 15:13:06
这个页面对您有帮助吗?
有用
有用
无用
无用