腾讯云K8s容器部署SpringBoot项目实现方案

发布于:2025-04-04 ⋅ 阅读:(17) ⋅ 点赞:(0)

腾讯云Kubernetes容器服务部署SpringBoot项目实现方案

Jenkins+GitLab+腾讯云CODING+腾讯云Kubernetes容器服务部署SpringBoot项目的实现方案和演示

微服务架构
微服务架构适用于构建复杂的应用,将单体式应用从不同维度拆分成多个微服务,每个微服务的内容使用一个 docker 镜像管理。微服务架构如下图所示:
在这里插入图片描述

微服务架构优势
通过在腾讯云容器服务上部署服务,开发人员在 Git 或其他代码平台提交新代码后,可立即进行构建、测试、打包集成。在持续集成的基础上,将集成的代码部署到预发布环境和现网环境上。
持续集成与持续交付过程如下图所示:
在这里插入图片描述

一、环境准备

  • 腾讯云账号:拥有足够权限的账号。
  • 服务器:至少一台安装了CentOS 7或更高版本的服务器。
  • 网络环境:确保服务器能够访问外网,以便下载相关软件和镜像。
  • GitLab仓库:用于存放SpringBoot项目代码。
  • Jenkins服务器:用于自动化构建和部署。
  • 腾讯云CODING账号:用于CI/CD流程。
  • 腾讯云Kubernetes容器服务集群:用于部署SpringBoot应用。

二、腾讯云K8s容器服务环境搭建

  1. 安装Docker
    # 安装依赖包
    yum -y install yum-utils device-mapper-persistent-data lvm2
    # 添加Docker官方仓库
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    # 安装Docker
    yum -y install docker-ce docker-ce-cli containerd.io
    
    由于网络原因,可选择使用国内镜像源加速下载,如阿里云镜像源:
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  2. 配置Docker
    编辑Docker配置文件/etc/docker/daemon.json,添加以下内容:
    {
      "exec-opts": ["native.cgroupdriver=systemd"],
      "registry-mirrors": ["https://mirror.ccs.tencentyun.com"],
      "insecure-registries": ["你的访问IP:PORT"]
    }
    
    重载配置并启动Docker服务:
    systemctl daemon-reload
    systemctl start docker
    systemctl enable docker
    
  3. 安装kubeadm、kubelet和kubectl
    # 添加kubernetes的yum源
    cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    # 安装kubeadm、kubelet和kubectl
    yum install -y kubelet kubeadm kubectl
    systemctl enable --now kubelet
    
  4. 初始化k8s集群
    kubeadm init --pod-network-cidr=10.244.0.0/16
    
    初始化完成后,执行以下命令配置kubectl:
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
  5. 安装网络插件
    这里以flannel为例:
    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    

三、SpringBoot项目准备

  1. 创建SpringBoot项目
    使用Spring Initializr创建一个简单的SpringBoot项目,添加Web依赖。
  2. 配置application.yml
    server:
      port: 8080
    
  3. 编写Dockerfile
    在项目根目录下创建Dockerfile:
    FROM openjdk:8-jdk-alpine
    VOLUME /tmp
    ADD target/your-springboot-app.jar app.jar
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
    
    其中your-springboot-app.jar是你的SpringBoot项目打包后的jar包名称。

四、GitLab仓库配置

  1. 创建GitLab仓库
    在GitLab上创建一个新的仓库,将SpringBoot项目的代码推送至该仓库。
  2. 配置Webhook
    在GitLab仓库的设置中配置Webhook,指向Jenkins服务器的地址,以便在代码推送时触发Jenkins构建。

五、Jenkins配置

安装Jenkins

  1. 安装Jenkins
    在服务器上安装Jenkins,并进行初始设置。
  2. 安装插件
    安装Git、Docker、Kubernetes等相关插件。
  3. 创建Jenkinsfile
    在SpringBoot项目根目录下创建Jenkinsfile,定义构建和部署流程:
    pipeline {
        agent any
        stages {
            stage('拉取代码') {
                steps {
                    git 'https://gitlab.com/your-username/your-springboot-project.git'
                }
            }
            stage('构建项目') {
                steps {
                    sh 'mvn clean package -Dmaven.test.skip=true'
                }
            }
            stage('构建Docker镜像') {
                steps {
                    script {
                        dockerImage = docker.build("your-image-name:latest")
                    }
                }
            }
            stage('推送镜像到腾讯云容器镜像服务') {
                steps {
                    script {
                        dockerImage.push()
                    }
                }
            }
            stage('部署到K8s') {
                steps {
                    sh 'kubectl apply -f deployment-config.yaml'
                }
            }
        }
    }
    

配置Jenkins任务

  1. 配置Jenkins任务
    在Jenkins中创建一个新的Pipeline任务,指定Jenkinsfile的位置,并配置相关参数。

  2. 新增Jenkins视图
    在Jenkins中创建一个新的Pipeline任务,指定Jenkinsfile的位置,并配置相关参数

  3. 配置Jenkins构建任务
    任务:General管理在这里插入图片描述

任务:源码管理
在这里插入图片描述
任务:构建环境
在这里插入图片描述
任务:创建完成
在Jenkins中创建一个新的Pipeline任务,指定Jenkinsfile的位置,并配置相关参数。
任务项目打包
在这里插入图片描述

配置Jenkins任务镜像包

1、新建任务视图
在这里插入图片描述
2、在视图下新增docker镜像任务
在这里插入图片描述
3、配置docker镜像任务
General
在这里插入图片描述
源码管理
在这里插入图片描述

构建操作
在这里插入图片描述

点击应用完成任务配置

六、腾讯云CODING配置

  1. 创建CODING项目
    在腾讯云CODING平台上创建一个新的项目。在这里插入图片描述2. 关联GitLab仓库 在CODING项目中关联之前创建的GitLab仓库。

  2. 配置构建计划
    创建构建计划,选择合适的构建模板,配置构建环境和参数。在这里插入图片描述

  3. 配置流水线
    根据实际需求配置流水线,包括构建、测试、部署等阶段。
    在这里插入图片描述
    在这里插入图片描述

  4. 创建流程
    在这里插入图片描述
    在这里插入图片描述

七、K8s部署配置

  1. 创建deployment配置文件
    创建一个名为deployment-config.yaml的文件:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: springboot-deployment
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: springboot-app
      template:
        metadata:
          labels:
            app: springboot-app
        spec:
          containers:
          - name: springboot-container
            image: your-image-name:latest
            ports:
            - containerPort: 8080
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: springboot-service
    spec:
      type: NodePort
      ports:
      - port: 8080
        targetPort: 8080
        nodePort: 30001
      selector:
        app: springboot-app
    
  2. 部署应用
    在Jenkinsfile的部署阶段执行以下命令:

    kubectl apply -f deployment-config.yaml
    
  3. 容器负载
    在这里插入图片描述

  4. 使用yaml文件创建工作负载

apiVersion: apps/v1
kind: Deployment
#kind: StatefulSet
metadata:
  name: go-view
  namespace: zero-code
spec:
  selector:
    matchLabels:
      app: go-view
  replicas: 2
  template:
    metadata:
      labels:
        app: go-view
    spec:
      containers:
        - name: go-view
          image: ccr.ccs.tencentyun.com/zero-code/go-view
          securityContext:
            privileged: true
          imagePullPolicy: Always
          readinessProbe:
            failureThreshold: 3
            httpGet:
              path: /actuator
              port: 3000
              scheme: HTTP
            initialDelaySeconds: 120
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 2
          env:
          - name: JAVA_OPTS
            value: -Djava.security.egd=file:/dev/./urandom
          - name: JVM_OPTS
            value: -XX:MaxRAMPercentage=70.0
          ports:
            - containerPort: 3000
          livenessProbe:
            failureThreshold: 3
            httpGet:
              path: /actuator
              port: 3000
              scheme: HTTP
            initialDelaySeconds: 120
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 2
          resources:
            limits:
              cpu: 1000m
              memory: 2048Mi
            requests:
              cpu: 1000m
              memory: 2048Mi
      imagePullSecrets:
        - name: qcloudregistrykey

八、验证部署

在浏览器中访问http://your-server-ip:30001/your-api-endpoint,如果看到预期的响应,说明部署成功。

以上就是在Jenkins+GitLab+腾讯云CODING+腾讯云Kubernetes容器服务上部署SpringBoot项目的完整实现方案和示例,你可以根据实际需求进行调整和扩展。