【问题标题】:Helm: How to Override Value with Periods in NameHelm:如何用名称中的句点覆盖值
【发布时间】:2021-02-04 00:27:03
【问题描述】:

我正在尝试编写 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

在安装 cert-managerexternal-dnsnginx-ingress(现在通过 bash 脚本)之后,我安装它:

helm install --values helm/jenkins.yml stable/jenkins

我根本没有阅读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

helm install --values helm/jenkins.yml stable/jenkins --set Master.Ingress.Annotations.certmanager\.k8s\.io/cluster-issuer=letsencrypt-staging

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

【问题讨论】:

    标签: kubernetes-helm


    【解决方案1】:

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

    helm install --values helm/jenkins.yml stable/jenkins --set Master.Ingress.Annotations."certmanager\.k8s\.io/cluster-issuer"=letsencrypt-staging
    

    【讨论】:

      【解决方案2】:

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

      helm install --values helm/jenkins.yml stable/jenkins --set 'Master.Ingress.Annotations.certmanager\.k8s\.io/cluster-issuer=letsencrypt-staging'
      

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

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

      【讨论】:

      • 我不得不使用这个(单引号)。我在 ubuntu 上,在接受的答案中使用双引号对我不起作用。
      猜你喜欢
      • 2018-08-19
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 2020-09-11
      相关资源
      最近更新 更多