【问题标题】:Helm upgrade fails with error: expects " or n, but found tHelm 升级失败并出现错误:需要 " 或 n,但发现 t
【发布时间】:2020-04-08 18:26:34
【问题描述】:

我正在尝试向我的 helm 图表添加一个新 pod,它通过了验证(helm lint)但在部署的最后阶段失败:

2019 年 12 月 16 日星期一 10:01:58 信息运行 helm install/upgrade for xyz-stg
升级失败错误:“”无效:补丁:无效值: "{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"metadata\"
(...)
ReadString: 期望 " 或 n,但发现 t,在 #10 字节中发现错误 of ...|,"value":true},{"nam|..., 更大的上下文 ...|"value":"stg"}, (...)
错误:升级失败:“”无效:补丁:无效值: "{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"metadata\": (...)
ReadString: 期望 " 或 n,但发现 t,在 #10 字节中发现错误 of ...|,"value":true},{"nam|..., 更大的上下文 ...|"value":"stg"}, (...) Mon Dec 16 10:02:09 2019 错误升级/安装 xyz-stg 失败

我不知道这个错误是什么意思,也不知道如何调试它。这听起来像是一些语法缩进错误,但我所做的只是:从其他工作 pod 复制粘贴 pod 配置并更改所有名称。

【问题讨论】:

  • 图表中某处有一个空值。
  • @c4f4t0r 基于这个错误(它更长)有没有办法找到哪个变量是空的?当我更改任何内容时,我会收到 configMap already exists in the cluster 错误。无论如何,它确实会创建 POD,尽管它由于一些受污染的点头而处于未决状态 - 这些错误是否以任何方式相关?
  • helm 模板可以帮到你
  • 这里的实际错误是:```expects " or n, but found t, error found in #10 byte of ...|,"value":true} ``` 所以有部署 yaml 中的一块,带有 yaml "value": true 但它想要:yaml "value": "true"

标签: kubernetes-helm


【解决方案1】:

我遇到了类似的问题,显然 Kubernetes 的 Pod 规范要求将环境变量值强制转换为字符串,因此整数需要通过引号传递。所以,在您的 deployment.yaml 文件中,无论您使用的是数字值尝试按如下方式传递它们。

value: {{ .Values.environment.TEMP | quote}}

之后它会正常工作。希望对你有帮助

【讨论】:

  • 我发现还需要引用“True”或“False”的值
【解决方案2】:

添加双引号并使用以下更改更新deployment.yaml

deployment.yaml 文件中

        value: {{ .Values.environment.TEMP }}
        value: {{ quote .Values.environment.TEMP }}

Values.yaml 文件中

Envrionment:
  TEMP: "true"

【讨论】:

    【解决方案3】:

    我从 PowerShell 添加注释时遇到了这个问题。尝试了几件事才发现<double><single><value><single><double>

    helm upgrade userprofile $helmfile.ToString() --install --wait --timeout 90s
    --set ingress.annotations."nginx.ingress.kubernetes.io/auth-tls-verify-depth"="'1'"
    --set ingress.annotations."nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream"="'false'"
    

    在 Azure DevOps HelmDeploy@0 任务参数中,我需要 <double><single><single><value><single><single><double>

      - task: HelmDeploy@0
        displayName: 'Install UserProfile'
        inputs:
          ...
          command: upgrade
          arguments: '
            ...
            --set ingress.annotations."nginx\.ingress\.kubernetes\.io/auth-tls-verify-depth"="''1''"
            --set ingress.annotations."nginx\.ingress\.kubernetes\.io/auth-tls-pass-certificate-to-upstream"="''false''"'
    

    【讨论】:

      【解决方案4】:

      Helm lint - 不会捕获此错误。 对于 env 值/布尔检查 - 建议使用引号。下面是一个例子,假设zookeeperConnectionTimeoutvalues.yml中有一个条目

      value: {
          {
              .Values.zookeeperConnectionTimeout | quote
          }
      }
      

      检查: 您可以在应用安装之前使用 helm 模板查看实际替换值。

      实际替换值如下所示:

      value: "180000"
      

      【讨论】:

        猜你喜欢
        • 2023-03-21
        • 2019-08-15
        • 1970-01-01
        • 2012-12-24
        • 2021-01-12
        • 1970-01-01
        • 2022-11-11
        • 2021-12-17
        • 2022-10-13
        相关资源
        最近更新 更多