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 持续交付可以参考 ArgoCDFlux。选购搬瓦工 VPS 请访问 bwh81.net,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。