在CI/CD流水线中实现环境隔离是保障发布质量的关键实践。本文分享一个基于Kubernetes的多环境隔离方案。
环境架构
我们采用命名空间(Namespace)方式隔离开发、测试、预发布和生产环境,每个环境对应独立的K8s命名空间。
核心配置
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-deployment
namespace: {{ENV_NAMESPACE}} # 动态替换
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: app-container
image: myapp:{{IMAGE_TAG}}
ports:
- containerPort: 8080
envFrom:
- configMapRef:
name: app-config-{{ENV_NAME}}
Jenkins Pipeline配置
pipeline {
agent any
environment {
NAMESPACE = "dev"
IMAGE_TAG = "v1.0.${BUILD_NUMBER}"
}
stages {
stage('Deploy') {
steps {
script {
if (env.BRANCH_NAME == 'main') {
NAMESPACE = 'prod'
} else if (env.BRANCH_NAME == 'release') {
NAMESPACE = 'staging'
}
sh "kubectl set image deployment/app-deployment app-container=myapp:${IMAGE_TAG} -n ${NAMESPACE}"
}
}
}
}
}
隔离策略
- 网络隔离:通过NetworkPolicy控制命名空间间通信
- 资源隔离:为不同环境设置ResourceQuota和LimitRange
- 配置隔离:使用不同的ConfigMap和Secret
监控指标
- 部署成功率:99.5%
- 平均部署时间:3分钟
- 环境间切换延迟:< 10秒
该方案已在公司多个项目中应用,可有效避免环境污染问题。

讨论