Kustomize K8S 配置管理教程
在 Kubernetes 环境中,不同部署环境(开发、测试、生产)往往需要不同的配置参数,但核心资源定义是相同的。Kustomize 是 Kubernetes 原生的配置管理工具(已内置在 kubectl 中),它通过 base + overlay 的分层结构来管理配置差异,无需模板语言,直接操作原生的 YAML 文件。
一、Kustomize 基础概念
- Base:基础配置,包含各环境通用的资源定义。
- Overlay:覆盖层,针对特定环境的配置修改。
- kustomization.yaml:声明文件,定义要使用哪些资源和应用哪些变换。
二、快速开始
# Kustomize 已内置在 kubectl 中
kubectl kustomize --help
# 也可以安装独立版本(功能更完整)
curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash
mv kustomize /usr/local/bin/
三、目录结构
mkdir -p myapp/{base,overlays/{dev,staging,prod}}
# 典型目录结构:
# myapp/
# ├── base/
# │ ├── kustomization.yaml
# │ ├── deployment.yaml
# │ ├── service.yaml
# │ └── configmap.yaml
# └── overlays/
# ├── dev/
# │ ├── kustomization.yaml
# │ └── patch-replicas.yaml
# ├── staging/
# │ ├── kustomization.yaml
# │ └── patch-resources.yaml
# └── prod/
# ├── kustomization.yaml
# ├── patch-replicas.yaml
# └── patch-resources.yaml
四、创建 Base 配置
cat > myapp/base/deployment.yaml <<'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 1
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:latest
ports:
- containerPort: 8080
resources:
requests:
cpu: 100m
memory: 128Mi
EOF
cat > myapp/base/service.yaml <<'EOF'
apiVersion: v1
kind: Service
metadata:
name: myapp
spec:
selector:
app: myapp
ports:
- port: 80
targetPort: 8080
EOF
cat > myapp/base/kustomization.yaml <<'EOF'
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
commonLabels:
managed-by: kustomize
EOF
五、创建 Overlay 配置
5.1 开发环境
cat > myapp/overlays/dev/kustomization.yaml <<'EOF'
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
namePrefix: dev-
namespace: dev
patches:
- target:
kind: Deployment
name: myapp
patch: |-
- op: replace
path: /spec/replicas
value: 1
- op: replace
path: /spec/template/spec/containers/0/image
value: myapp:dev
EOF
5.2 生产环境
cat > myapp/overlays/prod/kustomization.yaml <<'EOF'
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
namePrefix: prod-
namespace: production
patches:
- target:
kind: Deployment
name: myapp
patch: |-
- op: replace
path: /spec/replicas
value: 3
- op: replace
path: /spec/template/spec/containers/0/image
value: myapp:v1.2.0
- op: replace
path: /spec/template/spec/containers/0/resources
value:
requests:
cpu: 500m
memory: 512Mi
limits:
cpu: "1"
memory: 1Gi
EOF
六、构建和部署
# 预览生成的配置(不部署)
kubectl kustomize myapp/overlays/dev
kubectl kustomize myapp/overlays/prod
# 直接部署到集群
kubectl apply -k myapp/overlays/dev
kubectl apply -k myapp/overlays/prod
# 使用独立 kustomize 命令
kustomize build myapp/overlays/prod | kubectl apply -f -
七、ConfigMap 和 Secret 生成
cat >> myapp/base/kustomization.yaml <<'EOF'
configMapGenerator:
- name: app-config
literals:
- APP_ENV=base
- LOG_LEVEL=info
files:
- config.properties
secretGenerator:
- name: app-secret
literals:
- DB_PASSWORD=default-password
type: Opaque
generatorOptions:
disableNameSuffixHash: false
EOF
八、常用变换
# 在 kustomization.yaml 中可以使用以下变换:
# namePrefix / nameSuffix:添加名称前缀/后缀
# namespace:设置命名空间
# commonLabels:添加通用标签
# commonAnnotations:添加通用注解
# images:替换镜像
# 镜像替换示例
images:
- name: myapp
newName: registry.example.com/myapp
newTag: v2.0.0
总结
Kustomize 是 Kubernetes 原生的配置管理方案,无需学习额外的模板语言。在搬瓦工 VPS 上管理多环境 K8S 配置时,Kustomize 的 base/overlay 结构清晰直观。如果需要从 Docker Compose 迁移,可以先使用 Kompose 转换,再用 Kustomize 管理多环境差异。GitOps 持续交付可以参考 ArgoCD 和 Flux。选购搬瓦工 VPS 请访问 bwh81.net,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣。