如何将nginx-ingress注释转换为--set格式以启用Prometheus指标

问题描述

我想在安装nginx-ingress时在命令行上设置注释。我的values.yaml文件如下所示,我想使用命令行参数而不是values.yaml文件

controller:
  metrics:
    port: 10254
    enabled: true
    service:
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "10254"
    serviceMonitor:
      enabled: true
      namespace: monitoring
      namespaceSelector:
        any: true

我尝试了以下参数,但是给出了错误

 --set controller.metrics.service.annotations."prometheus\.io\/scrape"="true" --set controller.metrics.service.annotations."prometheus\.io\/port"="10254" 

错误

Error: release nginx-ingress Failed: Service in version "v1" cannot be handled as a Service: v1.Service.ObjectMeta: v1.ObjectMeta.Annotations: ReadString: expects " or n,but found 1,error found in #10 byte of ...|io/port":10254,"prom|...,bigger context ...|,"Metadata":{"annotations":{"prometheus.io/port":10254,"prometheus.io/scrape":true},"labels":{"app.k|...

任何建议应如何准确传递这些批注?

解决方法

我只是遇到了同样的问题!当您查看图表时,他们将其定义为字符串。因此,当我使用下面的命令时,它会成功设置值。诀窍是利用--set-string而不是--set

helm upgrade ingress-controller ingress-nginx/ingress-nginx --namespace ingress-nginx --set controller.metrics.enabled=true --set-string controller.metrics.service.annotations."prometheus\.io/scrape"="true" --set-string controller.metrics.service.annotations."prometheus\.io/port"="10254"

显示当我们使用helm get values ingress-controller --namespace ingress-nginx进行验证时设置的值

controller:
  metrics:
    enabled: true
    service:
      annotations:
        prometheus.io/port: "10254"
        prometheus.io/scrape: "true"

现在,如果您想将详细信息输入普罗米修斯,那么看来这对我来说并不奏效。我必须利用controller.podAnnotations来完成这项工作:

helm upgrade ingress-controller ingress-nginx/ingress-nginx \
  --namespace ingress-nginx \
  --set controller.metrics.enabled=true \
  --set-string controller.podAnnotations."prometheus\.io/scrape"="true" \
  --set-string controller.podAnnotations."prometheus\.io/port"="10254"

让我知道这是否对您有用! :)