SuperAPI AI 工具集

kustomize

部署与运维

查看项目

更新于 10-27 02:31

技能介绍

用途

Kustomize 用于以声明方式定制 Kubernetes 资源,不借助模板即可实现配置复用与变体管理。适用于跨环境管理 Kubernetes 配置、在不修改原始清单的前提下打补丁、从 base 派生配置变体、定制第三方清单,以及偏好声明式而非模板化方案的用户。

前置条件

需要 kubectl 1.14+(已内置 kustomize),或独立安装的 kustomize CLI,并具备基本的 Kubernetes 清单知识。

目录结构

典型结构由一个 base 目录和多个 overlays 组成:myapp/ 下包含 base/(kustomization.yaml、deployment.yaml、service.yaml、configmap.yaml)以及 overlays/ 下的 development/、staging/、production/,各环境目录放置各自的 kustomization.yaml 与补丁文件。

主要能力

  • Base 配置:在 kustomization.yaml 中通过 resources 引用清单,使用 commonLabels、commonAnnotations 统一添加标签与注解。
  • Overlays 覆盖层:通过 resources 引用 ../../base,并设置 namespace、namePrefix、commonLabels、images、replicas、patches 等实现环境差异。
  • 补丁:支持 strategic merge patch、JSON patch 与内联 patch,可指定 target 按 kind、name 定位资源。
  • 配置生成:configMapGenerator 支持 literals、files、envs,可配置 disableNameSuffixHash;secretGenerator 支持 files 与 type(如 kubernetes.io/tls)。
  • 镜像变换:可修改 newTag、newName 或使用 digest。
  • 资源变换:namePrefix/nameSuffix、namespace、commonLabels、commonAnnotations、replicas。
  • 组件:以 Component 类型定义可选功能(如监控),在 overlay 中通过 components 引入。
  • 远程资源:引用远程 Git 仓库(带 ref)或远程 URL 清单。
  • Helm Chart 集成:通过 helmCharts 指定 name、repo、version、releaseName、namespace、valuesFile、includeCRDs 等。
  • 变量替换:使用 replacements 从来源字段读取值并写入目标字段路径。

使用方式与命令

常用命令包括:kubectl kustomize overlays/production 构建并查看输出;kubectl apply -k overlays/production 应用到集群;kubectl delete -k overlays/production 删除资源;kubectl diff -k overlays/production 查看差异;kustomize build overlays/production 使用独立 CLI 构建;kustomize build overlays/production | kubectl apply -f - 构建后应用。文档说明这些命令互为备选,并非需要依次执行的序列。

常见问题与最佳实践

常见问题包括:ConfigMap 变更后资源未更新(启用名称后缀哈希或使用 replacement)、补丁未生效(核对资源名称,复杂改动改用 JSON patch)、远程资源获取失败(检查 URL、ref/tag 与网络)、commonLabels 破坏选择器(使用 labels 变换并设置 includeSelectors: false,检查渲染差异)。最佳实践:base 保持环境无关、用 overlays 承载环境配置、简单改动优先 strategic merge patch、可选功能用 components、固定远程资源版本、启用 ConfigMap/Secret 哈希后缀、在 README 记录 overlay 结构、应用前先测试构建。

安全与限制

不要提交真实 TLS 密钥或生成的 Secret YAML,base64 并非加密,应使用经批准的密钥传递或加密机制,并将输出保存在私有临时位置。namespace 变换不会创建该命名空间,需要时显式提供 Namespace 资源。远程 base 必须使用经审查的不可变引用,不要对不可信输入启用插件/exec 或远程资源。Helm 膨胀需要所安装工具明确支持并启用 Helm。相关操作会作用于真实环境,执行前需确认目标、影响范围与回滚方案,未经明确批准不得部署到生产环境。本导入为纯文档,未附带上游脚本与模板。

相关资料

文档列出 kubernetes-ops(K8s 基础)、helm-charts(Helm 替代方案)、argocd-gitops(GitOps 部署)为相关技能。