2. Kustomize 安装与基础配置:安装方式、kubectl 内置集成、初始化项目结构

在开始使用 Kustomize 管理环境差异化镜像配置之前,首先需要正确安装工具并理解其项目结构。Kustomize 提供了多种安装路径,且从 Kubernetes 1.14 开始已原生集成在 kubectl 中。本章将系统讲解三种安装方式、验证方法以及标准项目结构的初始化流程。

2.1 安装方式对比

根据团队工作流和集群版本的不同,可以选择以下三种安装方式之一:

安装方式 适用场景 版本管理 推荐度
kubectl 内置集成 Kubernetes ≥ 1.14,日常运维 随 kubectl 版本绑定 ⭐⭐⭐⭐⭐
独立二进制安装 CI/CD 管道、需要最新特性 独立升级,灵活可控 ⭐⭐⭐⭐
Go 源码编译 二次开发、定制化需求 完全自主控制 ⭐⭐⭐
推荐策略: 本地开发使用 kubectl 内置集成,CI/CD 环境使用独立二进制,确保版本一致且不受 kubectl 版本限制。

2.2 kubectl 内置集成(默认推荐)

从 Kubernetes 1.14 开始,kustomize 子命令已内置于 kubectl 中。验证方式如下:

# 检查 kubectl 版本(需 ≥ 1.14)
kubectl version --client

# 验证 kustomize 子命令可用
kubectl kustomize --help

# 查看内置 kustomize 版本
kubectl kustomize version

内置集成的核心命令映射关系:

独立 kustomize 命令 kubectl 等效命令 说明
kustomize build . kubectl kustomize . 渲染当前目录的 kustomization
kustomize build overlay/prod kubectl kustomize overlay/prod 渲染指定 overlay 目录
kustomize build . | kubectl apply -f - kubectl apply -k . 直接构建并应用(kubectl 1.21+)
注意: 内置版本可能落后于独立发布版。若需要使用 Kustomize 最新特性(如 Helm 集成、变量替换增强),建议使用独立二进制。

2.3 独立二进制安装(推荐 CI/CD)

适用于需要精确控制版本或使用最新功能的场景。以下为 Linux/macOS 通用安装步骤:

# 下载指定版本(以 v5.4.3 为例)
curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash -s 5.4.3

# 移动至系统 PATH
sudo mv kustomize /usr/local/bin/

# 验证安装
kustomize version

# 预期输出示例
# {kustomize/v5.4.3 (2024-05-20T15:00:00Z)  ...}

macOS 用户也可通过 Homebrew 安装:

brew install kustomize

2.4 初始化项目结构

Kustomize 项目遵循 base + overlay 的层级模式。以下为推荐的标准目录结构:

my-app/
├── base/                    # 基准配置(环境无关)
│   ├── kustomization.yaml   # 基准 kustomization 文件
│   ├── deployment.yaml      # Deployment 资源
│   ├── service.yaml         # Service 资源
│   └── configmap.yaml       # ConfigMap 资源
├── overlay/                 # 环境差异化配置
│   ├── dev/                 # 开发环境
│   │   ├── kustomization.yaml
│   │   ├── deployment-patch.yaml
│   │   └── configmap-patch.yaml
│   ├── staging/             # 预发布环境
│   │   ├── kustomization.yaml
│   │   └── deployment-patch.yaml
│   └── prod/                # 生产环境
│       ├── kustomization.yaml
│       ├── deployment-patch.yaml
│       └── secrets.yaml
└── README.md
核心原则:
  • base/ 存放所有环境共享的基准资源,不包含任何环境特定值。
  • overlay/ 每个子目录代表一个独立环境,通过 resources 引用 base,并通过 patches 进行差异化覆盖。
  • kustomization.yaml 是每个目录的入口文件,Kustomize 通过它识别配置。

2.5 初始化 kustomization.yaml

在 base/ 目录下创建基准 kustomization.yaml:

# base/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - deployment.yaml
  - service.yaml
  - configmap.yaml

# 公共标签(所有资源自动注入)
commonLabels:
  app: my-app
  managed-by: kustomize

# 公共注解
commonAnnotations:
  version: "1.0.0"
  environment: "base"

在 overlay/dev/ 目录下创建开发环境 kustomization.yaml:

# overlay/dev/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

# 引用 base 目录(相对路径)
resources:
  - ../../base

# 环境特定补丁
patches:
  - path: deployment-patch.yaml
    target:
      kind: Deployment
      name: my-app

# 环境特定镜像覆盖
images:
  - name: my-app-image
    newName: registry.dev.example.com/my-app
    newTag: dev-20240520

# 环境特定名称前缀
namePrefix: dev-

# 环境特定命名空间
namespace: dev-ns

2.6 验证项目结构

使用以下命令验证项目结构是否正确:

# 构建 base(验证基准配置)
kubectl kustomize base/

# 构建 dev overlay(验证环境差异化)
kubectl kustomize overlay/dev/

# 直接应用 dev 环境(kubectl 1.21+)
kubectl apply -k overlay/dev/
快速检查: 使用 kustomize build overlay/dev/ | yq eval 可以格式化输出,便于人工审查渲染结果。
Kustomize 项目结构:base + overlay 模式 my-app/ base/ kustomization.yaml deployment.yaml service.yaml overlay/ dev/ staging/ prod/ 说明: • base/ 存放环境无关的基准资源,所有环境共享 • overlay/ 每个子目录代表一个独立环境,通过 patches 差异化覆盖

2.7 常见安装问题排查

问题现象 可能原因 解决方案
kubectl kustomize 命令不存在 kubectl 版本低于 1.14 升级 kubectl 或使用独立二进制
kustomize build 报 "no such file" kustomization.yaml 路径错误 检查工作目录是否包含 kustomization.yaml
独立二进制安装后命令找不到 未添加到 PATH 或权限不足 执行 sudo mv kustomize /usr/local/bin/
Homebrew 安装版本过旧 brew 源未更新 执行 brew update && brew upgrade kustomize
最佳实践:
  • 将 kustomize version 写入 CI/CD 管道的日志头部,便于追溯构建版本。
  • 在项目根目录创建 .kustomize-version 文件,记录项目所需的 Kustomize 版本。
  • 使用 kustomize build 输出重定向到文件,进行版本对比审计:kustomize build overlay/prod/ > rendered-prod.yaml。