使用 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

请注意,我们只包含了选择器(kindmetadata.namespec.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 进行资源管理、特定配置的补丁和覆盖。