在不使用Helm的情况下启用ingress-nginx Prometheus监控

42次阅读
没有评论

问题描述

之前在Kubernetes集群中安装了ingress-nginx,但后来意识到这是个错误,因为它并没有自动启用Prometheus监控,更糟糕的是,它也没有使用Helm。现在,ingress-nginx-controller已经设置好并且运行正常,但是无法使用Helm更改设置,以创建ServiceMonitor并从中提取指标。

用户已经在各处搜寻了解决方法,但无法找到任何关于如何在不使用Helm的情况下让Prometheus监控ingress-nginx的文档。用户理解需要创建一个ServiceMonitor资源,但不知道如何为ingress-nginx创建一个特定的ServiceMonitor,因为几乎每个在线解决方案都简单地归结为:”嗨,就用Helm吧”。

用户尝试了以下方式创建自己的ServiceMonitor资源:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    app: ingress-nginx
    release: kube-prometheus-stack
  name: ingress-nginx-metrics
  namespace: ingress-nginx
spec:
  endpoints:
    - interval: 30s
      port: prometheus
  namespaceSelector:
    matchNames:
      - ingress-nginx
  selector:
    matchLabels:
      app: ingress-nginx-controller

但是这似乎并不起作用,因为几乎没有在线例子。大部分情况下,人们都似乎只是指望Helm能为他们完成所有的工作。ServiceMonitor是否需要在kube-prometheus-stack命名空间中,还是在被监控的服务的命名空间中,或者根本不需要指定命名空间?

以下是相关信息:
ingress-nginx-controller部署在ingress-nginx命名空间。
kube-prometheus-stack安装在kube-prometheus-stack命名空间。

用户是否能指导如何在不使用Helm的情况下让Prometheus发现这个Ingress控制器呢?

解决方案

在没有使用Helm的情况下,使Prometheus监控ingress-nginx需要执行一些步骤。请按照以下指南逐步操作。

步骤1:在NGINX Controller中添加Prometheus端口

首先,需要在NGINX Controller的部署配置中添加一个与Prometheus通信的端口。在ingress-nginx-controller的部署配置中,找到容器端口部分,并添加一个名为prometheus的端口:

containers:
  - name: ingress-nginx-controller
    ports:
      - containerPort: 80
        # 其他端口配置...
      - containerPort: 10254
        name: prometheus
        protocol: TCP

步骤2:创建NGINX Metrics Service

然后,需要创建一个服务,将Prometheus通信端口映射到监控端口。创建一个Service资源,如下所示:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: ingress-nginx-metrics
  name: ingress-nginx-metrics
  namespace: ingress-nginx
spec:
  ports:
    - name: prometheus
      protocol: TCP
      port: 10254
      targetPort: prometheus
  selector:
    app: ingress-nginx-controller
  type: ClusterIP

步骤3:创建NGINX Service Monitor

接下来,您需要创建一个ServiceMonitor资源,以便Prometheus能够发现并监控这个服务。创建一个如下所示的ServiceMonitor资源:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: ingress-nginx-metrics
  namespace: kube-prometheus-stack
  labels:
    app: ingress-nginx-metrics
    release: kube-prometheus-stack
spec:
  endpoints:
    - interval: 30s
      path: /metrics
      port: prometheus
  namespaceSelector:
    matchNames:
      - ingress-nginx
  selector:
    matchLabels:
      app: ingress-nginx-metrics

步骤4:验证Prometheus是否发现Service Monitor

现在,您可以验证Prometheus是否能够发现ServiceMonitor。您可以通过执行以下步骤来验证:

  1. 首先,确保Prometheus可以在kube-prometheus-stack命名空间中找到ServiceMonitor。您可以在Prometheus UI的“Targets”选项卡中查看。

  2. 在Prometheus UI的“Service Discovery”选项卡中,您应该能够看到ingress-nginx-metrics的Service Monitor。

如果您成功验证了这些步骤,那么您的ingress-nginx应该开始在Prometheus中提供指标。

补充说明

  • 如果您的配置与上述步骤有所不同,请确保您的标签和选择器匹配,以便正确关联相关资源。
  • 如果仍然存在问题,请检查ingress-nginx是否实际上会在/metrics路径上提供Prometheus指标,这是Prometheus抓取数据的地方。

通过执行上述步骤,您应该能够在不使用Helm的情况下启用ingress-nginx的Prometheus监控。如果您遇到问题,请参考Prometheus和Kubernetes文档进行进一步的调试和排除故障。

正文完