【问题标题】:Replace specific values using Kustomize使用 Kustomize 替换特定值
【发布时间】:2021-07-25 23:52:30
【问题描述】:

我正在评估 Kustomize 作为我项目的模板解决方案。我想要一个替换特定键值对的选项。

ports:
- containerPort: 8081
resources:
limits:
  cpu: $CPU_LIMIT
  memory: $MEMORY_LIMIT
requests:
  cpu: $CPU_REQUESTS
  memory: $MEMORY_REQUESTS

在上面的示例中,我想将 CPU_LIMIT 替换为配置驱动的值。使用 Kustomize 有哪些选项可以做到这一点?

【问题讨论】:

    标签: amazon-web-services templating kustomize


    【解决方案1】:

    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
    

    请注意,我们只包含了选择器(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。

    【讨论】:

    • 谢谢。我想这可以解释。我只是想确认一下。我正在考虑使用 yq 或代码来创建模板。也许那会;是一个更好的选择
    猜你喜欢
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多