跳到主要内容

环境管理

GitOps 仓库结构

fleet-repo/
├── apps/
│ ├── my-app/
│ │ ├── base/ # 基础清单
│ │ │ ├── deployment.yaml
│ │ │ ├── service.yaml
│ │ │ └── kustomization.yaml
│ │ └── overlays/ # 环境差异
│ │ ├── dev/
│ │ │ ├── kustomization.yaml
│ │ │ └── patch-replicas.yaml
│ │ ├── staging/
│ │ │ └── kustomization.yaml
│ │ └── production/
│ │ ├── kustomization.yaml
│ │ └── patch-resources.yaml
│ └── another-app/
├── infrastructure/ # 基础设施组件
│ ├── nginx-ingress/
│ ├── cert-manager/
│ └── monitoring/
└── clusters/ # 集群级别配置
├── dev/
├── staging/
└── production/

Kustomize 多环境管理

apps/my-app/base/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 1
template:
spec:
containers:
- name: app
image: my-app:latest
resources:
requests:
cpu: 100m
memory: 128Mi
apps/my-app/overlays/production/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: production
resources:
- ../../base
patches:
- path: patch-resources.yaml
images:
- name: my-app
newTag: v1.2.3 # 生产环境固定版本
apps/my-app/overlays/production/patch-resources.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3 # 生产 3 副本
template:
spec:
containers:
- name: app
resources:
requests:
cpu: 500m
memory: 512Mi
limits:
cpu: "1"
memory: 1Gi

密钥管理

危险

永远不要将明文密钥提交到 Git 仓库,即使是私有仓库。

Sealed Secrets

# 安装 Sealed Secrets Controller
kubectl apply -f https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.24.0/controller.yaml

# 加密 Secret(可安全提交到 Git)
kubeseal --format yaml < secret.yaml > sealed-secret.yaml

SOPS + Age

# 使用 SOPS 加密
sops --encrypt --age age1xxx... secret.yaml > secret.enc.yaml

# Flux 集成 SOPS 解密
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
spec:
decryption:
provider: sops
secretRef:
name: sops-age
方案优点缺点
Sealed SecretsK8s 原生,简单依赖控制器
SOPS + Age通用,支持多种格式密钥轮转复杂
External Secrets对接 Vault/AWS SM需要额外组件
Vault Agent功能最强架构最复杂

常见面试问题

Q1: GitOps 多环境管理的最佳实践?

答案

  1. 单仓库 + Kustomize Overlay:所有环境在同一仓库,用 overlays/ 管理差异(推荐)
  2. 分支策略:避免用 branch 区分环境(合并冲突多),用目录区分
  3. 镜像版本:dev 用 latest,staging/production 用固定 tag
  4. 密钥管理:使用 Sealed Secrets 或 SOPS,密钥加密后才能提交
  5. 推进流程:dev → staging → production,通过 PR 推进版本

相关链接