深入理解 Kustomize

介绍

Kustomize 是一个 Kubernetes 原生配置管理工具,允许用户通过覆盖和组合的方式来定制 Kubernetes 资源定义(YAML 文件),而无需直接修改原始文件。

Kustomize 的核心概念

  • Base:基础配置,包含通用的 Kubernetes 资源定义。
  • Overlay:覆盖层,基于 Base 进行定制化修改。
  • kustomization.yaml:定义如何组合和修改资源的配置文件。

Argo CD 与 Kustomize 的集成使得 GitOps 实践更加高效,能够实现声明式的持续交付,示例如下:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: kustomize-example
spec:
  project: default
  source:
    path: examples/helloWorld
    repoURL: 'https://github.com/kubernetes-sigs/kustomize'
    targetRevision: HEAD
  destination:
    namespace: default
    server: 'https://kubernetes.default.svc'

如果 repoURLpath 指向的位置存在 kustomization.yaml 文件,Argo CD 将使用 Kustomize 呈现清单。

Kustomize 有以下配置选项:

  • namePrefix:附加在 Kustomize 生成的资源名称上的前缀。
  • nameSuffix:附加在 Kustomize 生成的资源名称上的后缀。
  • images:Kustomize 图像覆盖列表。
  • replicas:Kustomize 副本覆盖列表。
  • commonLabels:附加到所有资源的标签映射。
  • labelWithoutSelector:布尔值,定义是否将通用标签应用于资源选择器和模板。
  • forceCommonLabels:布尔值,允许覆盖现有标签。
  • commonAnnotations:附加到所有资源的注释映射。
  • namespace:Kubernetes 资源命名空间。
  • forceCommonAnnotations:布尔值,允许覆盖现有注释。
  • commonAnnotationsEnvsubst:布尔值,允许在注释值中使用环境变量替换。
  • patches:支持内联更新的 Kustomize 补丁列表。
  • components:Kustomize 组件列表。

要将 Kustomize 与覆盖一起使用,请将路径指向覆盖目录。

优势

  • 声明式配置:通过 YAML 文件(通过 kustomization.yaml)定义资源的组合和修改。
  • 无模板:通过补丁和覆盖实现配置定制,而无需模板引擎。
  • 与 Kubernetes 原生集成:Kustomize 内置于 kubectl 中,无需额外工具。

使用场景

  • 多环境分发:通过 Base 和 Overlay 实现针对不同环境的特定配置(例如:应用、集群)。
  • 配置复用:适合在多个项目中复用基础配置。
  • 渐进式交付:通过补丁逐步调整资源配置。

参考资料

更加详细的说明请参考:Kustomize