如何在Kubernetes中,当通过单个服务公开时,Prometheus如何抓取单个Pod的执行器端点

66次阅读
没有评论

问题描述

在Kubernetes中创建了一个包含2个副本集的部署。但是,该服务使用NodePort公开了8080端口和管理端点。如果Prometheus部署应该获取2个目标而不是一个(k8s服务端口映射),那么应该如何设置Pods的部署?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

对于Prometheus,如果您正在部署一个Prometheus Operator,那么一个简单的ServiceMonitor就可以满足您的需求。ServiceMonitor根据选择器选择要监视的服务,然后在服务下标识要监视的端点。
按照以下步骤设置ServiceMonitor:
1. 创建一个ServiceMonitor的YAML文件。
2. 在该文件中定义要监视的服务(即您的Kubernetes服务)以及它们的选择器。
3. 使用Prometheus Operator来部署ServiceMonitor。
以下是一个示例ServiceMonitor的YAML文件:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: rps-app-monitor
  labels:
    app: rps-app
spec:
  selector:
    matchLabels:
      app: rps-app
  endpoints:
  - port: app
    path: /actuator/health
    interval: 30s

在上面的示例中,我们定义了一个名为rps-app-monitor的ServiceMonitor,它选择了具有标签app: rps-app的服务。在endpoints部分,我们指定了要监视的端点的端口和路径。在这种情况下,我们监视了app端口的/actuator/health路径。
请注意,您需要根据您的实际情况修改ServiceMonitor的配置,以适应您的服务和端点。

方案2

如果您不使用Prometheus Operator,您可以手动配置Prometheus来监视您的服务和端点。
以下是一个示例Prometheus配置文件的片段,用于监视您的服务和端点:

scrape_configs:
  - job_name: 'rps-app'
    static_configs:
      - targets: ['your_service_ip:8080', 'your_service_ip:8091']

在上面的示例中,我们定义了一个名为rps-app的作业,它监视了两个目标:your_service_ip:8080your_service_ip:8091。您需要将your_service_ip替换为您的服务的实际IP地址。
请注意,您需要根据您的实际情况修改Prometheus配置文件,以适应您的服务和端点。

方案3

如果您的服务是通过Ingress暴露的,您可以使用Prometheus的Ingress监视器来监视您的服务和端点。
以下是一个示例Prometheus配置文件的片段,用于监视您的Ingress服务和端点:

scrape_configs:
  - job_name: 'rps-app'
    kubernetes_sd_configs:
      - role: ingress
    relabel_configs:
      - source_labels: [__meta_kubernetes_ingress_name]
        regex: 'your_ingress_name'
        action: keep
      - source_labels: [__meta_kubernetes_ingress_path]
        regex: '/actuator/health'
        action: keep

在上面的示例中,我们定义了一个名为rps-app的作业,它使用Kubernetes的Ingress服务发现配置。在relabel_configs部分,我们使用正则表达式来选择要监视的Ingress服务和端点。您需要将your_ingress_name替换为您的Ingress服务的实际名称。
请注意,您需要根据您的实际情况修改Prometheus配置文件,以适应您的服务和端点。

方案4

如果您的服务是通过Service暴露的,并且您希望Prometheus直接监视Pod的IP地址和端口,而不是通过Service暴露的IP地址和端口,您可以使用Prometheus的Pod监视器来监视您的Pod和端点。
以下是一个示例Prometheus配置文件的片段,用于监视您的Pod和端点:

scrape_configs:
  - job_name: 'rps-app'
    kubernetes_sd_configs:
      - role: pod
    relabel_configs:
      - source_labels: [__meta_kubernetes_pod_label_app]
        regex: 'rps-app'
        action: keep
      - source_labels: [__address__]
        regex: '(.+):8080'
        replacement: '$1:8091'
        target_label: __address__

在上面的示例中,我们定义了一个名为rps-app的作业,它使用Kubernetes的Pod服务发现配置。在relabel_configs部分,我们使用正则表达式来选择要监视的Pod和端点。在这种情况下,我们选择了具有标签app: rps-app的Pod,并将端口8080替换为端口8091
请注意,您需要根据您的实际情况修改Prometheus配置文件,以适应您的Pod和端点。
以上是几种常见的解决方案,您可以根据您的实际情况选择适合您的方法。根据您的需求和环境,您可能需要进行一些调整和配置。

正文完