K8S + 私有镜像仓库 + CI/CD 自动发布标准方案
🚀 K8S + 私有镜像仓库 + CI/CD 自动发布标准方案
一、目标
构建一套标准化流程,实现:
- 自动构建 Docker 镜像
- 自动推送到私有仓库
- 自动部署到 Kubernetes
- 支持多环境(dev / test / prod)
- 支持版本可追溯、可回滚
二、整体架构
开发提交代码
↓
CI/CD(Jenkins / GitLab CI)
↓
构建 Docker 镜像
↓
推送到私有仓库(Harbor / Registry)
↓
更新 K8S Deployment
↓
滚动发布
↓
K9S 监控运行状态
三、镜像仓库规范
1. 命名规范
//:
示例:
192.168.1.100:5000/lake/lake-server:1.4.13
2. Tag 规范
| 类型 | 示例 |
|---|---|
| 开发版本 | dev |
| 测试版本 | test |
| 发布版本 | v1.4.13 |
| 最新版本 | latest |
3. 禁止行为
- 禁止覆盖生产版本 tag
- 禁止使用不规范 tag(如 random、test1)
四、Docker 构建规范
1. Dockerfile 示例
FROM eclipse-temurin:8-jdk
WORKDIR /app
COPY target/lake-server.jar .
ENTRYPOINT ["sh", "-c"]
CMD ["java -jar lake-server.jar --spring.profiles.active=${SPRING_PROFILES_ACTIVE:-prod}"]
2. 构建命令
docker build -t lake-server:1.4.13 .
3. 打 Tag
docker tag lake-server:1.4.13 192.168.1.100:5000/lake/lake-server:1.4.13
4. 推送镜像
docker push 192.168.1.100:5000/lake/lake-server:1.4.13
五、Kubernetes 部署规范
1. Deployment 示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: lake-server
spec:
replicas: 2
selector:
matchLabels:
app: lake-server
template:
metadata:
labels:
app: lake-server
spec:
containers:
- name: lake-server
image: 192.168.1.100:5000/lake/lake-server:1.4.13
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8078
2. 更新发布
kubectl apply -f deployment.yaml
或:
kubectl set image deployment/lake-server lake-server=192.168.1.100:5000/lake/lake-server:1.4.13
3. 滚动更新
kubectl rollout status deployment/lake-server
六、CI/CD 自动化流程
1. 流程步骤
代码提交 → 构建 → 打包 → 镜像构建 → 推送 → 部署
2. 示例(Jenkins Pipeline)
pipeline {
agent any
environment {
REGISTRY = "192.168.1.100:5000"
PROJECT = "lake"
IMAGE = "lake-server"
VERSION = "1.4.${BUILD_NUMBER}"
}
stages {
stage('Build') {
steps {
sh 'mvn clean package -DskipTests'
}
}
stage('Docker Build') {
steps {
sh "docker build -t $IMAGE:$VERSION ."
}
}
stage('Push Image') {
steps {
sh """
docker tag $IMAGE:$VERSION $REGISTRY/$PROJECT/$IMAGE:$VERSION
docker push $REGISTRY/$PROJECT/$IMAGE:$VERSION
"""
}
}
stage('Deploy') {
steps {
sh """
kubectl set image deployment/$IMAGE
$IMAGE=$REGISTRY/$PROJECT/$IMAGE:$VERSION
"""
}
}
}
}
七、多环境配置方案
1. Profile 控制
--spring.profiles.active=dev
--spring.profiles.active=test
--spring.profiles.active=prod
2. 配置外置(推荐)
--spring.config.additional-location=/config/
3. K8S ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: lake-config
data:
application-prod.properties: |
server.port=8078
八、回滚机制
1. 查看历史版本
kubectl rollout history deployment/lake-server
2. 回滚
kubectl rollout undo deployment/lake-server
九、清理策略
1. 镜像清理
仅保留最近 N 个版本(建议 5 个)
定期清理无 tag 镜像
2. Docker 清理
docker image prune -a
docker builder prune
十、监控与运维
1. 查看 Pod
kubectl get pods
2. 日志
kubectl logs -f <pod>
3. 使用 K9S
k9s
十一、最佳实践总结
一套镜像,多环境复用
禁止手动改容器(必须走 CI/CD)
配置外置,不打进镜像
使用语义化版本号
定期清理镜像
十二、扩展建议
接入 Harbor 权限控制
引入 Helm 管理部署
加入灰度发布 / 蓝绿发布
接入 Prometheus + Grafana 监控
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu