【发布时间】:2021-07-12 20:48:33
【问题描述】:
自定义目录结构
├── base
│ ├── deployment.yaml
│ └── kustomization.yaml
└── overlays
└── prod
├── kustomization.yaml
├── namespace-a
│ ├── deployment-a1
│ │ ├── kustomization.yaml
│ │ └── patch.yaml
│ ├── deployment-a2
│ │ ├── kustomization.yaml
│ │ └── patch.yaml
│ ├── kustomization.yaml
│ └── namespace.yaml
├── namespace-b
│ ├── deployment-b1
│ │ ├── kustomization.yaml
│ │ └── patch.yaml
│ ├── deployment-b2
│ │ ├── kustomization.yaml
│ │ └── patch.yaml
│ ├── kustomization.yaml
│ └── namespace.yaml
└── namespace-c
正如你在上面看到的,我有 prod 环境,namesapce-a 和 namespace-b 等等。
要为所有人创建部署,我可以简单地运行以下命令:
> kustomize overlays/prod
完美运行,两个命名空间与其他部署文件一起为所有部署创建。
仅为命名空间-a 创建部署:
> kustomize overlays/prod/namespace-a
这也有效。 :)
但至少我的故事还没有到此结束。
我想保留当前功能并能够部署deployment-a1, deployment-a2 ...
> kustomize overlays/prod/namespace-a/deployment-a1
如果我将 namespace.yaml 放入 deployment-a1 文件夹并将其添加到 kustomization.yaml
那么上面的命令可以工作,但是之前的 2 个失败并出现错误,因为现在我们有 2 个同名的命名空间文件。
我有 2 个查询。
- 这个目录结构可以改进吗?
- 如何在不破坏其他功能的情况下通过单一部署创建命名空间?
完整代码可见here
【问题讨论】:
-
我建议关注Kustomize best practices。关于命名空间最重要的部分:
1. Create separate component bases for resources that are intended to be deployed in different namespaces.2. Create one live overlay per namespace. Do not set the namespace directly in resources or patches. Set the namespace with the namespace transformer. -
@matt_j 首先非常感谢您提供的链接 :) 非常有帮助 1. 为了这个问题,我们假设我只有一个命名空间,我想多次部署同一个应用程序不同的部署名称。同时能够一次性部署所有应用程序或仅使用 kustomize 构建命令部署单个应用程序(将在 GitHub Actions 中使用它)。
标签: kubernetes kustomize