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
这个页面对您有帮助吗?
有用
有用
无用
无用