使用 Kustomize 替换特定值

CSU*_*NNY 8 templating amazon-web-services kustomize

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

ports:
- containerPort: 8081
resources:
limits:
  cpu: $CPU_LIMIT
  memory: $MEMORY_LIMIT
requests:
  cpu: $CPU_REQUESTS
  memory: $MEMORY_REQUESTS
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,我想用配置驱动的值替换 CPU_LIMIT。我可以通过哪些选项来使用 Kustomize 执行此操作?

Hig*_*ife 15

Kustomize 不像模板引擎那样直接进行变量替换。但有一些解决方案取决于您需要变量化的属性。

\n

通常部署、statefulsets、daemonset、pod、job 等中的变量,属性允许您使用由 configmap 支持的变量,因此您不一定必须在编译时使用变量。但是,当控制资源限制和请求等值时,这不起作用,因为这些值将在安装配置映射之前进行处理。

\n

Kustomize 并非设计为模板引擎,它被设计为一种纯粹的声明式配置管理方法,这包括使用补丁进行覆盖(覆盖)和参考资源的能力,以允许您 DRY(不要重复一下),当您的配置支持多个 Kubernetes 集群时,这特别有用。

\n

对于 Kustomize,也许可以考虑修补是否可以满足您的需求。Kustomize 可以通过多种不同的方式修补文件。如果您需要更改单个属性,您可以使用 patchJSON6902 尽管当您必须更改部署中的大量值时,以这种方式一次更改一个属性很麻烦,而是使用诸如patchStrategicMerge之类的东西

\n

考虑以下使用补丁(覆盖)的方法:

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 base\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 kustomization.yaml\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 resource.yaml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 cluster\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 kustomization.yaml\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 pod_overlay.yaml\n
Run Code Online (Sandbox Code Playgroud)\n

内容base/main/resource.yaml

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 base\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 kustomization.yaml\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 resource.yaml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 cluster\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 kustomization.yaml\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 pod_overlay.yaml\n
Run Code Online (Sandbox Code Playgroud)\n

内容cluster/pod_overlay.yaml

\n
---\napiVersion: v1\nkind: Pod\nmetadata:\n  name: site\n  labels:\n    app: web\nspec:\n  containers:\n    - name: front-end\n      image: nginx\n      ports:\n        - containerPort: 8081\n      resources:\n        requests:\n          cpu: 100m\n          memory: 4Gi\n        limits:\n          cpu: 200m\n          memory: 8Gi\n
Run Code Online (Sandbox Code Playgroud)\n

请注意,我们只包含选择器 ( kindmetadata.namespec.containers[0].name) 和我们想要替换的值,在本例中是资源请求和限制。您不必复制整个资源即可应用补丁。

\n

现在使用 kustomize 应用补丁,内容如下cluster/kustomization.yaml

\n
---\napiVersion: v1\nkind: Pod\nmetadata:\n  name: site\nspec:\n  containers:\n    - name: front-end\n      resources:\n        requests:\n          cpu: 200m\n          memory: 8Gi\n        limits:\n          cpu: 400m\n          memory: 16Gi\n
Run Code Online (Sandbox Code Playgroud)\n

如果您确实需要模板功能,可以考虑的另一个选择是使用 Helm。

\n

Helm是您可能需要考虑的更强大的模板引擎,您可以结合使用 Helm 进行模板化和 Kustomize 进行资源管理、用于特定配置的补丁和覆盖。

\n