Kustomize 不像模板引擎那样直接进行变量替换。但是有一些解决方案取决于您需要对哪些属性进行变量化。
部署、状态集、守护进程、pod、作业等中的变量通常允许您使用由 configmap 提供支持的变量,因此您不必在编译时使用变量。但是,这在控制资源限制和请求等值时不起作用,因为这些值会在 configmap 挂载之前进行处理。
Kustomize 并非设计为一个模板引擎,它被设计为一种纯粹的配置管理声明方法,这包括使用补丁进行覆盖(覆盖)和参考资源的能力,以允许您到 DRY(不要重复自己),这在您的配置支持多个 Kubernetes 集群时特别有用。
对于 Kustomize,也许考虑修补是否可以满足您的需求。 Kustomize 可以通过几种不同的方式修补文件。如果您需要更改个别属性,可以使用patchesJSON6902,尽管当您必须在部署中更改大量值时,一次更改一个这样很麻烦,而是使用patchesStrategicMerge之类的东西
考虑以下方式来使用补丁(覆盖):
.
├── base
│ └── main
│ ├── kustomization.yaml
│ └── resource.yaml
└── cluster
├── kustomization.yaml
└── pod_overlay.yaml
base/main/resource.yaml的内容:
---
apiVersion: v1
kind: Pod
metadata:
name: site
labels:
app: web
spec:
containers:
- name: front-end
image: nginx
ports:
- containerPort: 8081
resources:
requests:
cpu: 100m
memory: 4Gi
limits:
cpu: 200m
memory: 8Gi
cluster/pod_overlay.yaml的内容:
---
apiVersion: v1
kind: Pod
metadata:
name: site
spec:
containers:
- name: front-end
resources:
requests:
cpu: 200m
memory: 8Gi
limits:
cpu: 400m
memory: 16Gi
请注意,我们只包含了选择器(kind、metadata.name、spec.containers[0].name)和我们想要替换的值,在本例中是资源请求和限制。您不必复制整个资源即可应用补丁。
现在用kustomize应用补丁,cluster/kustomization.yaml的内容:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../base/main
patchesStrategicMerge:
- pod_overlay.yaml
如果您真的需要模板功能,可以考虑的另一个选择是使用 Helm。