下载工作台
项目运维与部署

多环境与配置管理

试读上半部分 · 解锁后可读全文

第 2 章 · 多环境与配置管理

本章目标:规范 dev / staging / prod 三环境隔离;掌握 ConfigMap、Secret 分层与 12-Factor 配置外置;维护 demo-mall 环境差异矩阵,建立 staging→prod 配置晋升 流程。

学时建议:2~2.5 小时(含 1.5 小时跟练)

前置小紫云计算 · 应用部署PaaS ch15 多环境概念;ops-deploy ch01 三环境地图。


2.1 场景说明

项目内容
背景demo-mall API 在 dev 用 DEBUG 日志、连测试库;staging 需脱敏数据预发布;prod 严禁调试端口
事故伏笔某次 dev 的 DB_HOST 误复制到 prod ConfigMap,导致 staging 回归通过但 prod 连错库(本课 ch06 会演练)
你的角色DevOps,负责 Namespace 配额、ConfigMap/Secret 规范、env-matrix 文档
本章任务创建/核对 6 Namespace、部署带 envFrom 的 demo-api、完成一次 LOG_LEVEL 变更验证
约束Secret 明文 永不进 Git;prod 变更需走晋升检查清单

核心原则:staging 拓扑与 prod 同构(同组件、不同规模);镜像 无环境差异,差异全在配置层。


2.2 学完你能

能力验收标准
环境隔离画出 cluster 内 6 Namespace 及用途
ConfigMap / Secret各举 3 个 demo-mall 字段示例并说明归属
编写 env-matrix至少 8 行 dev/staging/prod 差异
资源配额解释 ResourceQuota、LimitRange 作用
配置晋升填写 staging→prod 晋升检查表
界面操作在小紫 应用部署 挂载 ConfigMap 并滚动验证

2.3 为什么要分环境

环境用途数据对外暴露变更频率
dev开发联调可伪造、可清库内网 / VPN随时
staging预发布验证脱敏生产快照内网 + 白名单每日多次
prod正式服务真实业务数据Ingress + HTTPS变更窗口

三原则

  1. staging 拓扑与 prod 同构
  2. 配置 外置,镜像 tag 唯一差异来源是「版本」而非「环境名写死在 Dockerfile」
  3. Secret 永不进 Git(Sealed Secrets / 小紫 Secret 管理,见 ch12)

2.4 逐步跟练 · 第一步:Namespace 与配额(约 30 分钟)

目标拓扑

cluster
├── dev-app / dev-middleware
├── staging-app / staging-middleware
├── prod-app / prod-middleware
└── devops          # CI、Registry、监控

步骤 1 — 创建 Namespace

  • 集群管理 → Namespace → 创建
  • 依次创建:dev-appdev-middlewarestaging-appstaging-middlewareprod-appprod-middleware(已存在则跳过)

你应该看到:6 个 Active Namespace;labels 建议加 env=dev|staging|prod

步骤 2 — 为 staging-app 配置 ResourceQuota

应用部署 → YAML 导入 或 kubectl 应用以下示例:

# 限制 staging 资源总量,防止压测挤爆集群
apiVersion: v1
kind: ResourceQuota
metadata:
  name: staging-quota
  namespace: staging-app
spec:
  hard:
    requests.cpu: "8"
    requests.memory: 16Gi
    pods: "30"

含义说明

字段作用
requests.cpustaging 所有 Pod CPU request 之和上限
requests.memory内存 request 上限
podsPod 总数上限

你应该看到集群管理 → ResourceQuota 显示 staging-quota,Used/Hard 列有数值。

步骤 3 — prod-app LimitRange(默认 requests)

apiVersion: v1
kind: LimitRange
metadata:
  name: default-limits
  namespace: prod-app
spec:
  limits:
    - default:
        cpu: 500m
        memory: 512Mi
      defaultRequest:
        cpu: 100m
        memory: 128Mi
      type: Container

你应该看到:未写 resources 的新 Pod 自动带上 defaultRequest,避免「裸 Pod」挤占节点。

环境规模对照

devstagingprod
副本数12≥3
CPU request100m250m500m
日志级别DEBUGINFOWARN
调试端口可开关闭关闭
PDBminAvailable 1minAvailable 2

2.5 逐步跟练 · 第二步:ConfigMap 与 Secret(约 40 分钟)

步骤 1 — 创建 staging ConfigMap

应用部署 → 配置 → ConfigMap → 创建,Namespace staging-app,名称 demo-api-config

apiVersion: v1
kind: ConfigMap
metadata:
  name: demo-api-config
  namespace: staging-app
data:
  LOG_LEVEL: "INFO"
  DB_HOST: "mysql.staging-middleware.svc.cluster.local"
  REDIS_URL: "redis://redis.staging-middleware.svc:6379/1"
  FEATURE_NEW_CHECKOUT: "true"
  HTTP_PORT: "8080"

步骤 2 — 创建 Secret(界面或 YAML)

名称 demo-api-secrets(密码用占位符,生产由管理员注入):

apiVersion: v1
kind: Secret

以下内容需解锁后阅读

试读已结束。解锁本章 ¥5.00,或开通年度会员畅读全部教程。
年度会员 ¥199.00/年; 小紫 AI 工作台有效会员 ¥99.00/年

正文仅在服务端鉴权后下发,未付费无法获取下半部分内容。