4. 环境定义:开发(dev)、测试(staging)、预发(pre-prod)、生产(prod)的差异化配置策略

在跨环境迁移指标面板对账过程中,不同环境承担着截然不同的角色。开发环境追求快速迭代与调试,测试环境侧重功能验证与回归,预发环境模拟生产流量与配置,生产环境则必须保证稳定与可观测性。若四个环境使用同一套配置策略,将导致资源浪费、安全漏洞或数据污染。本章从资源配额、监控指标、告警阈值、日志级别、网络策略五个维度,定义各环境的差异化配置基线。

4.1 环境角色与配置总览

下表总结了四个核心环境在发布流水线中的定位及关键配置差异:

配置维度 开发 (dev) 测试 (staging) 预发 (pre-prod) 生产 (prod)
资源配额 最小规格,共享集群 中等规格,独立命名空间 接近生产,弹性预留 高规格,HPA + 资源预留
监控粒度 基础 CPU/内存/日志 全量指标 + 调用链采样 全量指标 + 全链路追踪 全量指标 + 实时告警 + 审计
告警阈值 宽松,仅严重错误 中等,关键业务告警 严格,模拟生产阈值 最严格,多级告警 + 值班
日志级别 DEBUG INFO WARN ERROR + 安全审计
网络策略 全通,无限制 命名空间隔离 严格隔离 + 白名单 零信任 + 微隔离
对账提示: 跨环境迁移时,务必检查目标环境的 资源配额 与 监控指标采集频率。预发环境若未开启全量指标采集,将导致对账面板数据缺失,无法提前发现生产级性能瓶颈。

4.2 资源配额与弹性策略

资源配额是环境隔离的第一道防线。开发环境通常使用共享集群,通过 ResourceQuota 限制每个团队的总资源上限;生产环境则依赖 Vertical Pod Autoscaler (VPA) 与 Horizontal Pod Autoscaler (HPA) 实现动态弹性。

# 开发环境:最小资源限制
apiVersion: v1
kind: ResourceQuota
metadata:
  name: dev-quota
  namespace: dev-team-a
spec:
  hard:
    requests.cpu: "4"
    requests.memory: "8Gi"
    limits.cpu: "8"
    limits.memory: "16Gi"
    pods: "20"
---
# 生产环境:HPA 弹性配置
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: prod-app-hpa
  namespace: prod
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: prod-app
  minReplicas: 3
  maxReplicas: 20
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70
  - type: Resource
    resource:
      name: memory
      target:
        type: Utilization
        averageUtilization: 80
避坑指南: 预发环境若使用与生产相同的 HPA 配置,但集群节点数不足,会导致 Pod 频繁驱逐。建议预发环境将 minReplicas 设为 1,maxReplicas 设为 5,并单独配置 PodDisruptionBudget。

4.3 监控指标与告警差异化配置

指标面板对账的核心在于各环境采集的指标集必须一致,但告警阈值与响应策略可以不同。下图展示了四个环境的监控指标采集范围与告警链路差异:

跨环境监控指标与告警差异化配置 跨环境监控指标与告警差异化配置 开发 (dev) 测试 (staging) 预发 (pre-prod) 生产 (prod) 指标采集 CPU / 内存 / 日志 无调用链 指标采集 全量指标 调用链采样 10% 指标采集 全量指标 全链路追踪 100% 指标采集 全量指标 + 审计 全链路追踪 100% 告警阈值 仅严重错误 CPU > 95% 告警阈值 关键业务告警 CPU > 85% 告警阈值 模拟生产阈值 CPU > 75% 告警阈值 多级告警 + 值班 CPU > 70% 对账关键点:预发与生产必须保持相同的指标采集范围(全量指标 + 全链路追踪), 但告警阈值可适当放宽(预发 CPU 75% vs 生产 CPU 70%),避免预发环境频繁误报。

4.4 日志级别与安全审计

日志是问题排查与安全审计的核心数据源。不同环境对日志的详细程度与保留周期有不同要求:

  • 开发 (dev): 日志级别 DEBUG,保留周期 24 小时,不采集到中心化日志平台,仅本地文件或 stdout。
  • 测试 (staging): 日志级别 INFO,保留周期 7 天,采集到 ELK/Loki,用于功能验证与回归测试。
  • 预发 (pre-prod): 日志级别 WARN,保留周期 15 天,开启结构化日志,用于模拟生产流量下的性能分析。
  • 生产 (prod): 日志级别 ERROR + 安全审计日志,保留周期 30 天(审计日志 180 天),必须加密传输与存储。
# 生产环境日志采集配置示例 (Fluentd)
<source>
  @type tail
  path /var/log/containers/*.log
  pos_file /var/log/fluentd-containers.log.pos
  tag kubernetes.*
  format json
  time_format %Y-%m-%dT%H:%M:%S.%NZ
</source>

<filter kubernetes.**>
  @type grep
  <exclude>
    key log
    pattern /^DEBUG|^INFO|^WARN/
  </exclude>
</filter>

<match kubernetes.**>
  @type s3
  s3_bucket prod-audit-logs
  s3_region us-east-1
  path logs/${tag}/%Y/%m/%d/
  <buffer>
    @type file
    path /var/log/fluentd-buffer
    flush_interval 60s
  </buffer>
</match>
对账最佳实践: 预发环境建议开启 WARN 级别日志,并同步到与生产相同的日志平台。这样在迁移指标面板时,可以提前验证日志采集管道是否正常,避免生产环境上线后才发现日志丢失。

4.5 网络策略与安全隔离

网络策略决定了服务间通信的边界。开发环境通常全通以降低调试成本,生产环境则必须实施零信任模型。下图展示了四个环境的网络隔离策略对比:

跨环境网络策略隔离对比 跨环境网络策略隔离对比 开发 (dev) 网络策略:全通 无 NetworkPolicy 所有 Pod 可互访 允许外部 Ingress 无 TLS 强制 测试 (staging) 网络策略:命名空间隔离 同命名空间全通 跨命名空间需白名单 允许测试工具访问 TLS 可选 预发 (pre-prod) 网络策略:严格隔离 仅允许必要服务互访 外部访问需白名单 强制 TLS 1.2+ 模拟生产网络策略 生产 (prod) 网络策略:零信任 微隔离 + 服务网格 mTLS 双向认证 所有流量加密 审计所有网络请求 隔离增强 隔离增强 隔离增强

4.6 配置策略对账清单

在进行跨环境迁移时,建议使用以下清单逐项核对配置一致性:

  1. 资源配额: 确认目标环境的 ResourceQuota 与 LimitRange 是否与源环境兼容,避免 Pod 因资源不足无法调度。
  2. 监控指标: 检查 Prometheus 或 VictoriaMetrics 的 ServiceMonitor 与 PodMonitor 是否已同步到目标环境,确保指标面板数据完整。
  3. 告警规则: 对比 PrometheusRule 中的告警阈值,预发环境建议使用生产阈值的 90% 作为预警线。
  4. 日志采集: 验证 Fluentd/Logstash 的 filter 与 match 规则是否匹配目标环境的日志级别要求。
  5. 网络策略: 使用 kubectl describe networkpolicy 确认白名单与隔离规则,避免迁移后服务间通信失败。
常见问题: 预发环境使用了与生产相同的 NetworkPolicy,但未开放监控系统(如 Prometheus)的抓取端口,导致指标面板数据为空。建议在预发环境的网络策略中显式添加 monitoring 命名空间的入站规则。