1

我正在使用kubectl kustomize命令来部署具有类似配置的多个应用程序(解析器和接收器),并且我遇到了 kustomization.yaml 文件的层次结构问题(不了解什么是可能的,什么不是)。

我从自定义目录运行 kustomize 命令,如下所示: $ kubectl kustomize overlay/pipeline/parsers/commercial/dev- 这工作正常,它会根据需要产生在 kustomization.yaml #1 中定义的预期输出。不起作用的是它不会自动执行 #2 kustomization,它位于(已经遍历的)目录路径 2 级以上。#2 kustomization.yaml 包含所有解析器环境通用的 configMap 创建。我不想在每个环境中重复这些。当我尝试从 #2 引用 #1 时,我收到有关循环引用的错误,但它无法运行配置创建。

我有以下目录结构树:

custom
├── base
|   ├── kustomization.yaml
│   ├── logstash-config.yaml
│   └── successful-vanilla-ls7.8.yaml
├── install_notes.txt
├── overlay
│   └── pipeline
│       ├── logstash-config.yaml
│       ├── parsers
│       │   ├── commercial
│       │   │   ├── dev
│       │   │   │   ├── dev-patches.yaml
│       │   │   │   ├── kustomization.yaml    <====== #1 this works
│       │   │   │   ├── logstash-config.yaml
│       │   │   │   └── parser-config.yaml
│       │   │   ├── prod
│       │   │   ├── stage
│       │   ├── kustomization.yaml  <============= #2 why won't this run automatically?
│       │   ├── logstash-config.yaml
│       │   ├── parser-config.yaml
│

这是我的 #1 kustomization.yaml:

bases:
- ../../../../../base
namePrefix: dev-
commonLabels:
  app: "ls-7.8-logstash"
  chart: "logstash"
  heritage: "Helm"
  release: "ls-7.8"

patchesStrategicMerge:
- dev-patches.yaml

这是我的#2 kustomization.yaml 文件:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
# generate a ConfigMap named my-generated-configmap-<some-hash> where each file
# in the list appears as a data entry (keyed by base filename).
- name: logstashpipeline-parser
  behavior: create
  files:
  - parser-config.yaml
- name: logstashconfig
  behavior: create
  files:
  - logstash-config.yaml
4

1 回答 1

1

问题在于你的结构。base中的每个条目都应解析为包含一个kustomization.yaml文件的目录。覆盖也是如此。现在,我认为用一个例子来解释会更容易(我将使用 $ 来显示去哪里):

├── base $1
│   ├── deployment.yaml
│   ├── kustomization.yaml $1
│   └── service.yaml
└── overlays
    ├── dev $2
    │   ├── kustomization.yaml $2
    │   └── patch.yaml
    ├── prod #3
    │   ├── kustomization.yaml $3
    │   └── patch.yaml
    └── staging #4
        ├── kustomization.yaml $4
        └── patch.yaml

每个条目都解析为其对应的kustomization.yaml文件。Base $1解析为kustomization.yaml $1, dev $2tokustomization.yaml $2等等。

但是在您的用例中:

├── base $1
|   ├── kustomization.yaml $1
│   ├── logstash-config.yaml
│   └── successful-vanilla-ls7.8.yaml
├── install_notes.txt
├── overlay
│   └── pipeline
│       ├── logstash-config.yaml
│       ├── parsers
│       │   ├── commercial
│       │   │   ├── dev $2
│       │   │   │   ├── dev-patches.yaml
│       │   │   │   ├── kustomization.yaml $2 
│       │   │   │   ├── logstash-config.yaml
│       │   │   │   └── parser-config.yaml
│       │   │   ├── prod $3
│       │   │   ├── stage $4
│       │   ├── kustomization.yaml $???
│       │   ├── logstash-config.yaml
│       │   ├── parser-config.yaml
│

没有什么能解决你的第二个问题kustomization.yaml

因此,要使其正常工作,您应该将这些文件分别放在每个环境下。您可以在下面找到带有更多示例的源代码,这些示例显示了典型目录结构的外观:

于 2020-08-05T11:34:52.873 回答