【问题标题】:helm upgrade: failed to create patch on google container builder掌舵升级:未能在谷歌容器生成器上创建补丁
【发布时间】:2018-10-09 03:23:45
【问题描述】:

我想做什么

我正在尝试使用 CI/CD 管道(Google 容器构建器)在我的 k8s 集群 (GKE) 上部署对 helm chart 的升级,但出现错误。

我正在使用什么

谷歌云 SDK 195.0.0

GKE 集群版本:v1.9.6-gke.0

kubectl v1.8.6

我正在使用这个构建器:https://github.com/GoogleCloudPlatform/cloud-builders-community/tree/master/helm

我正在像这样触发构建:

gcloud container builds submit . --config=cloudbuild.yaml --substitutions=TAG_NAME=v0.1.8

这是导致此错误的 cloudbuild.yaml 部分:

- name: 'gcr.io/$PROJECT_ID/helm'
  args:
  - upgrade
  - mmh-user
  - ./mmh-users-0.1.7.tgz
  - --reuse-values
  - --set
  - image.tag=${TAG_NAME}
  env:
  - 'CLOUDSDK_COMPUTE_ZONE=northamerica-northeast1-a'
  - 'CLOUDSDK_CONTAINER_CLUSTER=mycluster'

我在这一步遇到的错误:

Starting Step #17
Step #17: Already have image (with digest): gcr.io/myproject-2018/helm
Step #17: Running: helm init --client-only
Step #17: $HELM_HOME has been configured at /builder/home/.helm.
Step #17: Not installing Tiller due to 'client-only' flag having been set
Step #17: Happy Helming!
Step #17: Running: helm repo update
Step #17: Hang tight while we grab the latest from your chart repositories...
Step #17: ...Skip local chart repository
Step #17: ...Successfully got an update from the "stable" chart repository
Step #17: Update Complete. ⎈ Happy Helming!⎈
Step #17: Running: helm upgrade mmh-user ./mmh-users-0.1.7.tgz --reuse-values --set image.tag=v0.1.8
Step #17: Error: UPGRADE FAILED: failed to create patch: failed to get versionedObject: unable to convert unstructured object to extensions/v1beta1, Kind=Ingress: unrecognized type: string
Finished Step #17

我试图找到原因/解决方案:

  • 当我从笔记本电脑运行此命令 (helm upgrade mmh-user ./mmh-users-0.1.7.tgz --reuse-values --set image.tag=v0.1.8) 时,没有问题。
  • 我尝试将 cloudbuild.yaml 缩减为仅包含 helm 升级所需的步骤,同样的错误。
  • ci/cd 可以很好地运行 helm lint 和打包步骤。只有升级步骤失败。
  • 我在笔记本电脑和 ci/cd 上检查了 Helm 2.8.2 版。
  • 当我使用 --debug --dry-run 时,它不会报告错误并显示看似有效的 yaml,即使在入口附近也是如此

关于我还能做些什么来找到原因/解决方案的任何线索?

【问题讨论】:

  • 错误提示“无法将非结构化对象转换为 extensions/v1beta1,Kind=Ingress: unrecognized type: string”。我相信这是一个 Helm 问题。无论他们在服务器中得到什么都不正确,所以它会抛出这个错误。
  • @suren 确实,来自 Kubernetes helm slack 频道的某个人能够给我一个线索,让我知道 tls-acme 的值是 true 而不是“true”。我很快就会在这里发布答案。

标签: kubernetes google-cloud-platform kubernetes-helm google-kubernetes-engine


【解决方案1】:

感谢来自 Kubernetes #helm-users slack 频道的 juanchimienti,我能够解决这个问题。 Juanchimienti 建议它可能与 tls-acme 注释的值有关,显示为:

kubernetes.io/tls-acme: true

但应该显示为"true"

我更改了构建步骤以包含如下注释:

  - --set
  - 'ingress.annotations.kubernetes\.io/tls-acme="true"'

现在它可以工作了。

我认为这与 helm builder (https://github.com/GoogleCloudPlatform/cloud-builders-community/tree/master/helm) 中的 kubectl 版本有关,因为在没有注释的情况下从我的笔记本电脑运行相同的命令工作得很好。我的笔记本电脑有更新版本的 kubectl。我没有确认这一点。

【讨论】:

    猜你喜欢
    • 2020-01-25
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    相关资源
    最近更新 更多