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

相关推荐
没有感情的一匹码30 分钟前
MongoDB 整合SpringBoot
数据库·spring boot·mongodb
yuanManGan1 小时前
C++入门小馆:继承
java·开发语言·c++
杨不易呀1 小时前
Java求职面试:Spring Boot与微服务的幽默探讨
java·spring boot·微服务·面试·求职
佩奇的技术笔记2 小时前
Java学习手册:SQL 优化技巧
java·sql
建筑转Java-张无忌2 小时前
在Java中,什么是checked exception(即compile-time exception、编译时异常)?
java·开发语言
liang89992 小时前
Docker(三):DockerFile
spring cloud·docker·容器
xcLeigh2 小时前
HTML5好看的水果蔬菜在线商城网站源码系列模板9
java·前端·html5·网页源码
描绘一抹色2 小时前
力扣hot100 (除自身以外数组的乘积)
java·算法·leetcode
今天也是元气满满的一天呢3 小时前
java学习之数据结构:四、树(代码补充)
java·数据结构·学习
Absinthe_苦艾酒4 小时前
Spring 容器相关的核心注解
java·后端·spring