Helm 调试未知字段

Helm debug unknown field

我正在尝试使用以下方式安装 Kritis:

azureuser@Azure:~/kritis/docs/standalone$ helm install  kritis https://storage.googleapis.com/kritis-charts/repository/kritis-charts-0.2.0.tgz --set certificates.ca="$(cat ca.crt)" --set certificates.cert="$(cat kritis.crt)" --set certificates.key="$(cat kritis.key)" --debug

但我遇到了下一个错误:

install.go:148: [debug] Original chart version: ""
install.go:165: [debug] CHART PATH: /home/azureuser/.cache/helm/repository/kritis-charts-0.2.0.tgz

Error: unable to build kubernetes objects from release manifest: error validating "": error validating data: ValidationError(ClusterRole.metadata): unknown field "kritis.grafeas.io/install" in io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta
helm.go:76: [debug] error validating "": error validating data: ValidationError(ClusterRole.metadata): unknown field "kritis.grafeas.io/install" in io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta
helm.sh/helm/v3/pkg/kube.scrubValidationError
        /home/circleci/helm.sh/helm/pkg/kube/client.go:520
helm.sh/helm/v3/pkg/kube.(*Client).Build
        /home/circleci/helm.sh/helm/pkg/kube/client.go:135

有没有办法准确知道是哪个文件触发了错误?这个错误到底是什么意思? 原始图表文件可在此处获得:https://github.com/grafeas/kritis/blob/master/kritis-charts/templates/preinstall/clusterrolebinding.yaml

你无法确切地知道这是从哪里来的,但这个输出提供了一些线索。 在您的错误消息中,我们提供了一些有用的信息:

helm.go:76: [debug] error validating "": error validating data: ValidationError(ClusterRole.metadata): unknown field "kritis.grafeas.io/install" in io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta
  • error validating ""
  • ClusterRole
  • kritis.grafeas

您可以下载您的图表并使用 cat 深入研究这些术语,如下所示:

$ wget https://storage.googleapis.com/kritis-charts/repository/kritis-charts-0.2.0.tgz
$ tar xzvf kritis-charts-0.2.0.tgz 
$ cd kritis-charts/

如果您对 kritis.grafeas.io/install 使用 grep,您可以看到正在设置 "variable":

$ grep -R "kritis.grafeas.io/install" *
values.yaml:kritisInstallLabel: "kritis.grafeas.io/install"

现在我们可以 grep 这个变量并检查我们能找到什么:

$ grep -R "kritisInstallLabel" *
templates/rbac.yaml:      {{ .Values.kritisInstallLabel }}: ""
templates/rbac.yaml:    {{ .Values.kritisInstallLabel }}: ""
templates/kritis-server-deployment.yaml:    {{ .Values.kritisInstallLabel }}: ""
templates/preinstall/pod.yaml:    {{ .Values.kritisInstallLabel }}: ""
templates/preinstall/pod.yaml:      - {{ .Values.kritisInstallLabel }}
templates/preinstall/serviceaccount.yaml:    {{ .Values.kritisInstallLabel }}: ""
templates/preinstall/clusterrolebinding.yaml:    {{ .Values.kritisInstallLabel }}: ""
templates/postinstall/pod.yaml:    {{ .Values.kritisInstallLabel }}: ""
templates/postinstall/pod.yaml:      - {{ .Values.kritisInstallLabel }}
templates/secrets.yaml:    {{ .Values.kritisInstallLabel }}: ""
templates/predelete/pod.yaml:    {{ .Values.kritisInstallLabel }}: ""
templates/kritis-server-service.yaml:    {{ .Values.kritisInstallLabel }}: ""
values.yaml:kritisInstallLabel: "kritis.grafeas.io/install"

在这个输出中我们可以看到一个 rbac.yaml 文件。与我们正在寻找的其中一个术语相匹配 (ClusterRole):

如果我们阅读这个文件,我们可以看到 ClusterRole 和引用 kritisInstallLabel:

的一行
- apiVersion: rbac.authorization.k8s.io/v1beta1
  kind: ClusterRoleBinding
  metadata:
    name: {{ .Values.clusterRoleBindingName }}
    labels:
      {{ .Values.kritisInstallLabel }}: ""

{{ .Values.kritisInstallLabel }}: "" 将被 helm 翻译为 .Values.kritis.grafeas.io/install,这就是您的错误来源。