Helm:如何用名称中的句点覆盖值

pno*_*nak 7 kubernetes-helm

我正在尝试编写Jenkins的脚本,以便我可以使用helm以编程方式创建和拆除Jenkins群集.我遇到了一个恼人的障碍,我无法在名称中设置带点的键.我的helm values.yaml文件如下所示:

---
rbac:
  install: true

Master:
  HostName: jenkins.mycompany.com
  ServiceType: ClusterIP
  ImageTag: lts
  InstallPlugins:
    - kubernetes
    - workflow-aggregator
    - workflow-job
    - credentials-binding
    - git
    - blueocean
    - github
    - github-oauth

  ScriptApproval:
    - "method groovy.json.JsonSlurperClassic parseText java.lang.String"
    - "new groovy.json.JsonSlurperClassic"
    - "staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods leftShift java.util.Map java.util.Map"
    - "staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods split java.lang.String"
    - "method java.util.Collection toArray"
    - "staticMethod org.kohsuke.groovy.sandbox.impl.Checker checkedCall java.lang.Object boolean boolean java.lang.String java.lang.Object[]"
    - "staticMethod org.kohsuke.groovy.sandbox.impl.Checker checkedGetProperty java.lang.Object boolean boolean java.lang.Object"

  Ingress:
    Annotations:
      kubernetes.io/ingress.class: nginx
      kubernetes.io/tls-acme: "true"
    TLS:
      - secretName: jenkins-mycompany-com
        hosts:
          - jenkins.mycompany.com

  Memory: "2Gi"
  # This breaks the init container
  # RunAsUser: 1000
  # FSGroup: 1000

Agent:
  Enabled: false
  ImageTag: latest
Run Code Online (Sandbox Code Playgroud)

安装cert-manager之后external-dns,nginx-ingress(现在通过bash脚本)我安装它是这样的:

helm install --values helm/jenkins.yml stable/jenkins
Run Code Online (Sandbox Code Playgroud)

我根本没有阅读letsencrypt文档,因此在整个测试过程中我使用了我的生产配额.我希望能够为:添加注释Ingress:certmanager.k8s.io/cluster-issuer: letsencrypt-staging以便我可以继续测试(并将其设置为将来的默认值,在我准备好生产时重写).

问题是......我无法弄清楚如何通过--set标志传递此信息,因为密钥名称中有句点.我试过了:

helm install --values helm/jenkins.yml stable/jenkins --set Master.Ingress.Annotations.certmanager.k8s.io/cluster-issuer=letsencrypt-staging
Run Code Online (Sandbox Code Playgroud)

helm install --values helm/jenkins.yml stable/jenkins --set Master.Ingress.Annotations.certmanager\.k8s\.io/cluster-issuer=letsencrypt-staging
Run Code Online (Sandbox Code Playgroud)

我当然可以通过添加一个我用作标志的值来解决这个问题,但它不太明确.有没有办法直接设置它?

sk1*_*14j 15

您需要用引号括起键,然后转义点

helm install --values helm/jenkins.yml stable/jenkins --set Master.Ingress.Annotations."certmanager\.k8s\.io/cluster-issuer"=letsencrypt-staging
Run Code Online (Sandbox Code Playgroud)


小智 15

用于\转义键中的点。需要使用引号来防止 shell 解释该\字符。

helm install --values helm/jenkins.yml stable/jenkins --set 'Master.Ingress.Annotations.certmanager\.k8s\.io/cluster-issuer=letsencrypt-staging'
Run Code Online (Sandbox Code Playgroud)

Helm 要求对这些字符进行转义:. [ , =

来源: https: //paul-boone.medium.com/helm-chart-install-advanced-usage-of-the-set-argument-3e214b69c87a

  • 我不得不使用这个(单引号)。我在 ubuntu 上,在接受的答案中使用双引号对我来说不起作用。 (2认同)