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

文章目录

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

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

微服务架构

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

微服务架构优势

通过在腾讯云容器服务上部署服务,开发人员在 Git 或其他代码平台提交新代码后,可立即进行构建、测试、打包集成。在持续集成的基础上,将集成的代码部署到预发布环境和现网环境上。

持续集成与持续交付过程如下图所示:

一、环境准备

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

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

  1. 安装Docker

    bash 复制代码
    # 安装依赖包
    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

    由于网络原因,可选择使用国内镜像源加速下载,如阿里云镜像源:

    bash 复制代码
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  2. 配置Docker
    编辑Docker配置文件/etc/docker/daemon.json,添加以下内容:

    json 复制代码
    {
      "exec-opts": ["native.cgroupdriver=systemd"],
      "registry-mirrors": ["https://mirror.ccs.tencentyun.com"],
      "insecure-registries": ["你的访问IP:PORT"]
    }

    重载配置并启动Docker服务:

    bash 复制代码
    systemctl daemon-reload
    systemctl start docker
    systemctl enable docker
  3. 安装kubeadm、kubelet和kubectl

    bash 复制代码
    # 添加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集群

    bash 复制代码
    kubeadm init --pod-network-cidr=10.244.0.0/16

    初始化完成后,执行以下命令配置kubectl:

    bash 复制代码
    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为例:

    bash 复制代码
    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

三、SpringBoot项目准备

  1. 创建SpringBoot项目
    使用Spring Initializr创建一个简单的SpringBoot项目,添加Web依赖。

  2. 配置application.yml

    yaml 复制代码
    server:
      port: 8080
  3. 编写Dockerfile
    在项目根目录下创建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,定义构建和部署流程:

    groovy 复制代码
    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视图

  3. 配置Jenkins构建任务

    任务:General管理

任务:源码管理

任务:构建环境

任务:创建完成

任务项目打包

配置Jenkins任务镜像包

1、新建任务视图

2、在视图下新增docker镜像任务

3、配置docker镜像任务

General

源码管理

构建操作

在这里插入图片描述

点击应用完成任务配置

六、腾讯云CODING配置

  1. 创建CODING项目

    在腾讯云CODING平台上创建一个新的项目。2. 关联GitLab仓库 在CODING项目中关联之前创建的GitLab仓库。

  2. 配置构建计划

    创建构建计划,选择合适的构建模板,配置构建环境和参数。

  3. 配置流水线

    根据实际需求配置流水线,包括构建、测试、部署等阶段。

    在这里插入图片描述

  4. 创建流程

七、K8s部署配置

  1. 创建deployment配置文件

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

    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的部署阶段执行以下命令:

    bash 复制代码
    kubectl apply -f deployment-config.yaml
  3. 容器负载

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

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项目的完整实现方案和示例,你可以根据实际需求进行调整和扩展。

相关推荐
快乐的木子李9 分钟前
Java核心技术面试题
java·开发语言
chaser&upper1 小时前
Spring 服务调用接口时,提示You should be redirected automatically to target URL:
java
一切皆有迹可循3 小时前
IntelliJ IDEA中Spring Boot项目整合MyBatis:从零实现高效数据持久化
java·spring boot·intellij-idea·mybatis
雾月555 小时前
LeetCode 941 有效的山脉数组
java·开发语言·数据结构·算法·leetcode·职场和发展
獨枭6 小时前
使用 Spring Boot 快速构建企业微信 JS-SDK 权限签名后端服务
javascript·spring boot·企业微信
小诸葛的博客7 小时前
Apache BookKeeper Ledger 的底层存储机制解析
java
半旧5187 小时前
重构谷粒商城11:node快速入门
java·前端·重构
嘤国大力士7 小时前
C++11&QT复习 (十六)
java·开发语言·c++
菜鸟起航ing7 小时前
【Java面试系列】Spring Boot中自动配置原理与自定义Starter开发实践详解 - 3-5年Java开发必备知识
java·spring boot·面试·自动配置·自定义starter
李白的粉7 小时前
基于springboot+vue的课程管理系统
java·毕业设计·课程设计·源代码·课程管理系统