文章目录
腾讯云Kubernetes容器服务部署SpringBoot项目实现方案
Jenkins+GitLab+腾讯云CODING+腾讯云Kubernetes容器服务部署SpringBoot项目的实现方案和演示
微服务架构
微服务架构适用于构建复杂的应用,将单体式应用从不同维度拆分成多个微服务,每个微服务的内容使用一个 docker 镜像管理。微服务架构如下图所示:
微服务架构优势
通过在腾讯云容器服务上部署服务,开发人员在 Git 或其他代码平台提交新代码后,可立即进行构建、测试、打包集成。在持续集成的基础上,将集成的代码部署到预发布环境和现网环境上。
持续集成与持续交付过程如下图所示:
一、环境准备
- 腾讯云账号:拥有足够权限的账号。
- 服务器:至少一台安装了CentOS 7或更高版本的服务器。
- 网络环境:确保服务器能够访问外网,以便下载相关软件和镜像。
- GitLab仓库:用于存放SpringBoot项目代码。
- Jenkins服务器:用于自动化构建和部署。
- 腾讯云CODING账号:用于CI/CD流程。
- 腾讯云Kubernetes容器服务集群:用于部署SpringBoot应用。
二、腾讯云K8s容器服务环境搭建
- 安装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
- 配置Docker
编辑Docker配置文件/etc/docker/daemon.json
,添加以下内容:
重载配置并启动Docker服务:{ "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": ["https://mirror.ccs.tencentyun.com"], "insecure-registries": ["你的访问IP:PORT"] }
systemctl daemon-reload systemctl start docker systemctl enable docker
- 安装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
- 初始化k8s集群
初始化完成后,执行以下命令配置kubectl:kubeadm init --pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 安装网络插件
这里以flannel为例:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
三、SpringBoot项目准备
- 创建SpringBoot项目
使用Spring Initializr创建一个简单的SpringBoot项目,添加Web依赖。 - 配置application.yml
server: port: 8080
- 编写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仓库配置
- 创建GitLab仓库
在GitLab上创建一个新的仓库,将SpringBoot项目的代码推送至该仓库。 - 配置Webhook
在GitLab仓库的设置中配置Webhook,指向Jenkins服务器的地址,以便在代码推送时触发Jenkins构建。
五、Jenkins配置
安装Jenkins
- 安装Jenkins
在服务器上安装Jenkins,并进行初始设置。 - 安装插件
安装Git、Docker、Kubernetes等相关插件。 - 创建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任务
配置Jenkins任务
在Jenkins中创建一个新的Pipeline任务,指定Jenkinsfile的位置,并配置相关参数。新增Jenkins视图
配置Jenkins构建任务
任务:General管理
任务:源码管理
任务:构建环境
任务:创建完成
任务项目打包
配置Jenkins任务镜像包
1、新建任务视图
2、在视图下新增docker镜像任务
3、配置docker镜像任务
General
源码管理
构建操作
在这里插入图片描述
点击应用完成任务配置
六、腾讯云CODING配置
创建CODING项目
在腾讯云CODING平台上创建一个新的项目。2. 关联GitLab仓库 在CODING项目中关联之前创建的GitLab仓库。
配置构建计划
创建构建计划,选择合适的构建模板,配置构建环境和参数。配置流水线
根据实际需求配置流水线,包括构建、测试、部署等阶段。
在这里插入图片描述
创建流程
七、K8s部署配置
创建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
部署应用
在Jenkinsfile的部署阶段执行以下命令:kubectl apply -f deployment-config.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项目的完整实现方案和示例,你可以根据实际需求进行调整和扩展。