【问题标题】:Why won't it kustomize the node already visited为什么不自定义已经访问过的节点
【发布时间】:2020-11-23 19:46:01
【问题描述】:

我正在使用kubectl kustomizecommands 部署具有相似配置的多个应用程序(解析器和接收器),但我遇到了 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

【问题讨论】:

  • 我应该补充一点,直接在自己的作品上运行#2 kustomization 就好了。
  • 明确地说,#2 kustomization.yaml 被忽略了,对吧?
  • OhHiMark - 是的,没错。我知道它“访问”该节点,但它没有创建该 #2 kustomize.yaml 中的配置文件

标签: yaml kubectl kustomize


【解决方案1】:

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

├── 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 $1dev $2 解析为 kustomization.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

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

【讨论】:

  • 这很有帮助 - 需要研究它以将我的思想包裹起来......但我开始看到我的愚蠢了。
  • 我不知道促进组合模型的“组件”。我确实注意到阅读该部分,默认情况下,kustomize 解决方案支持我试图实现但不能实现的继承模型。有没有简单继承模型的例子,我觉得可能适合我们的需求?
  • 我对继承的唯一另一个转折是我需要至少有一个三层结构,每个级别都有变体:即logstash base > logstash parser common configs > logstash parser dev unique settings。对我来说,该结构代表继承,我只是不知道如何实现该设置。
  • @JamesD 我认为最好在一个单独的问题中解决您的问题以避免混淆主题。在这里,您问为什么您的结构不起作用,我们已经介绍过。让我们关闭这个主题并打开一个新主题,您可以在其中描述您想要实现的确切目标。对于您和希望帮助您的社区其他人来说,这将变得更容易、更清楚。
猜你喜欢
  • 2014-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-07
  • 1970-01-01
  • 1970-01-01
  • 2012-09-08
  • 1970-01-01
相关资源
最近更新 更多