知识卡片

Kustomize的base与overlay分层

专业/工作 · 528.c

内容

一个应用往往要部署到开发、预发、生产等多个环境,每个环境的副本数、镜像版本、配置值都不一样,如果每个环境各写一份完整的 Kubernetes 清单,环境越多冗余和不一致的风险越大。Kustomize 用 base(基础清单,组合起 Deployment/Service/ConfigMap 等资源,不知道也不关心有哪些 overlay 在用它)加 overlay(针对某个具体环境的定制目录,引用一个或多个 base,再叠加针对该环境的补丁)这两层结构解决这个问题:所有环境共享同一份 base,差异只以补丁的形式体现在各自的 overlay 里。base 甚至可以放在应用自己的代码仓库、overlay 放在独立的部署仓库,实现应用代码和部署配置的仓库级分离,天然贴合 GitOps 里”交付和部署解耦”的理念。发散:这是继承加差异覆盖的经典设计模式在部署配置领域的应用——共性下沉到基类(base),差异留在子类(overlay),换个领域名字,结构性思路是一样的。

参考来源

《Cloud Native Spring in Action》第14章《Configuration and secrets management》