K8S + 私有镜像仓库 + CI/CD 自动发布标准方案

AI摘要
本文是一份关于使用Kubernetes、私有镜像仓库和CI/CD工具构建自动化发布流程的技术方案【知识分享】。内容详细阐述了从代码提交到自动构建Docker镜像、推送到私有仓库、部署至K8S集群,并支持多环境、版本追溯与回滚的标准化流程,同时提供了具体的配置示例、规范及最佳实践建议。

🚀 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 协议》,转载必须注明作者和本文链接
每天一点小知识,到那都是大佬,哈哈
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
php @ 远程
文章
95
粉丝
16
喜欢
77
收藏
88
排名:522
访问:1.6 万
私信
所有博文
社区赞助商