当我们在kustomization.yaml文件的resources部分指定基础清单文件时,Kubernetes kustomize命令会出现错误。

22

我正在尝试为特定环境(例如:test)构建清单文件,并且我想重用下面提到的基本清单文件。

k8s/kustomize/overlays/test/kustomization.yaml

commonLabels:
  variant: test
  app: test-app
resources:
- ../../base/deployment.yaml
- ../../base/service.yaml
- ../../base/configmap.yaml
- ../../base/secret.yaml
- namespace.yaml
namespace: app-test
patchesStrategicMerge:
- secret.yaml
- configmap.yaml

在运行命令 kustomize build k8s/kustomize/overlay/test 时,我遇到了以下错误:

2020/02/19 16:04:36 got file 'deployment.yaml', but 'path/k8s/kustomize/base/deployment.yaml' must be a directory to be a root
Error: accumulating resources: accumulating resources from '../../base/deployment.yaml': security; file 'path/k8s/kustomize/base/deployment.yaml' is not in or below 'path/k8s/kustomize/overlay/test'

P.S: kustomize version is - Version: {KustomizeVersion:3.2.0 GitCommit:a3103f1e62ddb5b696daa3fd359bb6f2e8333b49 BuildDate:2019-09-18T18:31:04+01:00 GoOs:darwin GoArch:amd64}

我是kubernetes和kustomize的新手,能请你帮忙吗?


你使用过bases吗?为什么在资源目录是../../base的情况下,你要使用kustomize build k8s/kustomize/overlay/test呢?你能修复它并让我知道它是否有效吗?如果不行,你能像这里一样向我展示你的文件结构吗? - Jakub
FYI,文档中提到“bases字段在v2.1.0中已被弃用”。 - Lam Le
3个回答

22

Kustomize不允许您直接包含不在与kustomization.yml文件相同目录或其子目录中的资源文件。

在您的叠加中使用基础的常规方式是在基础中添加kustomization.yml文件,并将该基础目录包含在您的叠加的kustomization.yml中。例如:

k8s/kustomize/base/kustomization.yaml

resources:
- deployment.yaml
- service.yaml
- configmap.yaml
- secret.yaml

k8s/kustomize/overlays/test/kustomization.yaml 文件中:

resources:
- ../../base
- namespace.yaml

namespace: app-test

commonLabels:
  variant: test
  app: test-app

patchesStrategicMerge:
- secret.yaml
- configmap.yaml

如下答案所述,该答案是不正确的。Kustomize在底层使用go-getter(hashicorp)。任何git仓库都应该可以正常工作,如果被正确地标注了的话。 - Robert Smith
@RobertSmith 我认为它仍然适用。请参见:https://github.com/kubernetes-sigs/kustomize/pull/700 和 https://github.com/kubernetes-sigs/kustomize/issues/865。您不允许在根目录下方的目录中加载资源文件。您可以从任何地方加载kustomization文件。这与go-getter无关,而是与kustomize逻辑相关。 - ITChap
很棒的回答。清楚地解釋了問題和解決方案。適用於2023年6月。 - RukshanJS

1
也许有些变化是因为以下示例实现了问题所需的操作:https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/resource/
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
- myNamespace.yaml
- sub-dir/some-deployment.yaml
- ../../commonbase
- github.com/kubernetes-sigs/kustomize/examples/multibases?ref=v1.0.6
- deployment.yaml
- github.com/kubernets-sigs/kustomize/examples/helloWorld?ref=test-branch

我猜这个例子会加载一个在../../commonbase文件夹中的kustomize文件,然后从那里加载同一文件夹或更低级别的资源。 - nice_pink
2
提到的URL已更改为https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/resource/。 - oliver nadj

0
您可以按照以下步骤禁用此限制:
kustomize build --load-restrictor LoadRestrictionsNone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接