【问题标题】:Use Kustomize to patch across more than one dimension?使用 Kustomize 跨越多个维度进行修补?
【发布时间】:2023-02-24 07:17:18
【问题描述】:

我正在探索 Kustomize。我看到它是如何用于创建基本配置文件和补丁来为不同环境(例如开发、测试、生产)自定义特定设置的。它可以用于跨多个维度进行修补吗?

我的项目包含多个在 Kubernetes 中运行的应用程序。我希望能够指定基本设置并能够在某些情况下根据环境调整它们,在某些情况下根据应用程序调整它们,在某些情况下两者兼而有之。现在,我已经为每个环境/应用程序组合获得了完全独立的完整配置文件,其中包含大量重复项。作为我正在寻找的简单示例:

  • 有些值在整个项目中是通用的,例如 Splunk 收集器的 URL。
  • 为了记录到 Splunk,有一个环境变量指定将事件记录到哪个索引。对于开发和测试,事件被添加到“沙盒”索引中,两周后从中清除事件。对于 Prod,它们被记录到我们项目特定的索引中,保留期为三个月。所以我希望能够根据环境修补该变量——Kustomize 的基本用例。
  • 还有一个环境变量用于记录到 Splunk,它指定要添加到每个日志条目的 APP_NAME 字段的值。 (虽然特定于应用程序的值大多可以在应用程序内设置,但假设该值也将用于应用程序外部的目的。)所以我想根据应用程序修补该变量。
  • 我希望能够为每个环境/应用程序组合独立设置 minReplicas 和 maxReplicas。此外,由于每个应用程序都有自己的开发、测试和生产数据库,每个环境/应用程序组合都有自己的数据库连接字符串存储为环境变量。

Kustomize 可以处理这个吗?有人能给我指出说明多维场景的资源吗?如果有的话,我还没有想出一个可以引导我找到它的搜索字符串。

【问题讨论】:

    标签: kustomize


    【解决方案1】:

    有些值在整个项目中是通用的,例如 Splunk 收集器的 URL。

    不确定如何处理:如果值是指“我们部署中的环境变量”,这很容易,但如果该值在多个对象类型的多个位置使用,则无法使用 kustomize 处理(除非你开始将 helm 模板作为流程的一部分)。

    为了记录到 Splunk,有一个环境变量指定将事件记录到哪个索引...所以我希望能够根据环境修补该变量——Kustomize 的基本用例。

    这非常容易管理(只要您只是尝试将变量插入单个资源类型,如 Deployment)。像这样的 kustomization.yaml 作为每个覆盖的一部分会将 SPLUNK_INDEX 环境变量注入名为 example-app1 的 Deployment 的 my-app 容器中:

    patches:
      - patch: |
          apiVersion: apps/v1
          kind: Deployment
          metadata:
            name: example-app1
          spec:
            template:
              spec:
                containers:
                  - name: my-app
                    env:
                      - name: SPLUNK_INDEX
                        value: dev
    

    同样为了记录到 Splunk,有一个环境变量指定要添加到每个日志条目的 APP_NAME 字段的值......所以我想根据应用程序修补该变量。

    您可以使用各种标准(包括名称通配符和标签选择器)将补丁定位到资源。因此,例如,我们可以编写此代码以仅将 SPLUNK_APP_NAME 环境变量注入到标签为 app: app1 的部署中:

    patches:
      - target:
          kind: Deployment
          labelSelector: "app=app1"
        patch: |
          apiVersion: apps/v1
          kind: Deployment
          metadata:
            name: not-important
          spec:
            template:
              spec:
                containers:
                  - name: my-app
                    env:
                      - name: SPLUNK_APP_NAME
                        value: app1
    

    我希望能够为每个环境/应用程序组合独立设置 minReplicas 和 maxReplicas。

    这似乎与前面的示例相同:每个“环境”都是一个叠加层,您可以使用任何可用标准将补丁定位为设置 minReplicas 和 maxReplicas。

    此外,由于每个应用程序都有自己的开发、测试和生产数据库,每个环境/应用程序组合都有自己的数据库连接字符串存储为环境变量。

    这似乎也没有引入任何新要求。

    我认为这涵盖了一切!

    【讨论】:

      猜你喜欢
      • 2021-10-23
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多