使用 Kustomize 替换特定值
Replace specific values using Kustomize
我正在评估 Kustomize 作为我项目的模板解决方案。我想要一个选项来替换特定的键值对。
ports:
- containerPort: 8081
resources:
limits:
cpu: $CPU_LIMIT
memory: $MEMORY_LIMIT
requests:
cpu: $CPU_REQUESTS
memory: $MEMORY_REQUESTS
在上面的示例中,我想将 CPU_LIMIT 替换为配置驱动的值。我必须使用 Kustomize 执行此操作的哪些选项?
Kustomize 不像模板引擎那样进行直接变量替换。但是有一些解决方案取决于您需要可变化的属性。
通常部署、statefulsets、daemonset、pod、job 等中的变量,属性允许您使用由 configmap 提供支持的变量,因此您不必在编译时使用变量。但是,这在控制资源限制和请求等值时不起作用,因为这些值将在装载配置映射之前处理。
Kustomize 并非设计为 模板引擎 ,它被设计为一种纯粹的声明式配置管理方法,这包括使用补丁进行覆盖(覆盖)和参考资源以允许您 DRY(不要重复自己),这在您的配置支持多个 Kubernetes 集群时特别有用。
对于 Kustomize,也许可以考虑打补丁是否可以满足您的需求。 Kustomize 可以通过多种不同的方式修补文件。如果需要更改个别属性,可以使用 patchesJSON6902, although when you have to change a lot of values in a deployment, changing them one at a time this way is cumbersome, instead use something like 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。
Helm 是您可能想要考虑的更强大的模板引擎,您可以结合使用 Helm 进行模板化和 Kustomize 进行资源管理、特定配置的补丁和覆盖。
我正在评估 Kustomize 作为我项目的模板解决方案。我想要一个选项来替换特定的键值对。
ports:
- containerPort: 8081
resources:
limits:
cpu: $CPU_LIMIT
memory: $MEMORY_LIMIT
requests:
cpu: $CPU_REQUESTS
memory: $MEMORY_REQUESTS
在上面的示例中,我想将 CPU_LIMIT 替换为配置驱动的值。我必须使用 Kustomize 执行此操作的哪些选项?
Kustomize 不像模板引擎那样进行直接变量替换。但是有一些解决方案取决于您需要可变化的属性。
通常部署、statefulsets、daemonset、pod、job 等中的变量,属性允许您使用由 configmap 提供支持的变量,因此您不必在编译时使用变量。但是,这在控制资源限制和请求等值时不起作用,因为这些值将在装载配置映射之前处理。
Kustomize 并非设计为 模板引擎 ,它被设计为一种纯粹的声明式配置管理方法,这包括使用补丁进行覆盖(覆盖)和参考资源以允许您 DRY(不要重复自己),这在您的配置支持多个 Kubernetes 集群时特别有用。
对于 Kustomize,也许可以考虑打补丁是否可以满足您的需求。 Kustomize 可以通过多种不同的方式修补文件。如果需要更改个别属性,可以使用 patchesJSON6902, although when you have to change a lot of values in a deployment, changing them one at a time this way is cumbersome, instead use something like 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。
Helm 是您可能想要考虑的更强大的模板引擎,您可以结合使用 Helm 进行模板化和 Kustomize 进行资源管理、特定配置的补丁和覆盖。