百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

SpringCloud 微服务迁移到 Kubernetes 容器化完整流程

bigegpt 2025-07-02 18:26 6 浏览

k8s容器部署流程

具体步骤:

  • 第一步:熟悉Spring Cloud微服务项目
  • 第二步:源代码编译构建
  • 第三步:构建项目镜像并推送到镜像仓库
  • 第四步:K8s服务编排
  • 第五步:部署服务所需的基础环境
  • 第六步:部署微服务程序
  • 第七步:部署微服务前端
  • 第八步:微服务对外发布

熟悉Spring Cloud微服务项目

微服务架构图

源代码编译构建

拉取仓库代码

git clone http://192.168.0.126/saas-wms/linkinsense-wms-public.git

编译代码

mvn clean package -Dmaven.test.skip=true -Pdev

这儿构建时间久是因为第一次构建,需要下载maven依赖,之后构建就会很快了。

构建项目镜像并推送到镜像仓库

  • 基础镜像:centos,ubuntu
  • 中间件镜像:jdk,nginx
  • 项目镜像:基础镜像+中间件镜像+项目代码

制作镜像

https://blog.csdn.net/qq_40722827/article/details/126337904

编写gateway服务的DockerFile,制作镜像

vi Dockerfile
FROM openjdk:8-jre

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' > /etc/timezone

WORKDIR /wms-center/wms-gateway

ADD ./target/wms-gateway-1.0.0.jar ./

EXPOSE 8901

CMD java -jar wms-gateway-1.0.0.jar

编写完成的DockerFile放置的文件位置

通过DockerFile构建镜像

docker build -t wms-gateway:v1 -f wms-gateway/Dockerfile ./wms-gateway/

查看构建好的镜像

docker images

将镜像推送到harbor仓库

之前本地部署的镜像仓库Harbor: http://192.168.0.127:8084/,如果没有可拿docker-hub注册一个账号。

登录仓库

docker login 192.168.0.127:8084

推送镜像到镜像仓库需要满足镜像仓库的镜像名称,因此需要给构建好的镜像打个tag。

给构建的镜像打tag

docker tag wms-gateway:v1  192.168.0.127:8084/onlee/gateway:v1

推送镜像仓库

docker push 192.168.0.127:8084/onlee/gateway:v1

其他模块构建和推送参考gateway模块

K8s服务编排

制作gateway的k8s yaml文件(gateway.yaml)

---
apiVersion: apps/v1
kind: Deployment 
metadata:
  name: gateway
  namespace: wms-dev
spec:
  replicas: 1
  selector:
    matchLabels:
      project: wms-dev
      app: gateway
  template:
    metadata:
      labels:
        project: wms-dev
        app: gateway
    spec:
      imagePullSecrets:
      - name: registry-harbor
      containers:
      - name: gateway
        image: 192.168.0.127:8084/onlee/gateway:v1
        imagePullPolicy: Always
        ports:
          - protocol: TCP
            containerPort: 8901
        env:
          - name: JAVA_OPTS
            value: "-Xmx1g"
        resources:
          requests:
            cpu: 0.5
            memory: 256Mi
          limits:
            cpu: 1
            memory: 1Gi
        readinessProbe:
          tcpSocket:
            port: 8901
          initialDelaySeconds: 60
          periodSeconds: 10
        livenessProbe:
          tcpSocket:
            port: 8901
          initialDelaySeconds: 60
          periodSeconds: 10

其他模块编写k8s yaml文件参考gateway模块

部署基础环境

这一步暂时省略,后续补充…

  • 在K8s中部署Nacos集群(注册和配置中心)
  • 在k8s中部署Seata分布式事务
  • 在linux部署mysql,redis,rabbitmq,minio,xxl-job

部署微服务程序

准备namespace

kubectl create namespace wms-dev

部署服务

kubectl apply -f gateway.yaml

其他模块部署服务参考gateway模块

部署微服务前端

编写DockerFile文件

FROM nginx

COPY dist /usr/share/nginx/html/

EXPOSE 80

构建镜像

docker build -t wms-web:v1 -f  Dockerfile .

镜像打tag

docker tag  wms-web:v1 192.168.0.127:8084/onlee/wms-web:v1

推送到镜像仓库

docker push  192.168.0.127:8084/onlee/wms-web:v1 

服务编排(web.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: wms-web
  name: wms-web
  namespace: wms-dev
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  selector:
    matchLabels:
      app: wms-web
  strategy:
    rollingUpdate:
      maxSurge: 50%
      maxUnavailable: 50%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: wms-web
    spec:
      imagePullSecrets:
        - name: registry-harbor
      containers:
        - image: 192.168.0.127:8084/onlee/wms-web:v1
          imagePullPolicy: Always
          name: app
          ports:
            - containerPort: 80
              protocol: TCP
          resources:
            limits:
              cpu: 300m
              memory: 600Mi
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      terminationGracePeriodSeconds: 30

部署服务

kubectl apply -f web.yaml

微服务对外发布

通过整个微服务架构可知,只有gateway和前端需要暴露服务。

NorePort方式暴露

gateway对外暴露

gateway-nortport.yaml

---
apiVersion: v1
kind: Service
metadata:
  name: gateway
  namespace: wms-dev
spec:
  ports:
  - port: 8901
    name: gateway
    protocol: TCP
    targetPort: 8901
    nodePort: 32074
  selector:
    project: wms
    app: gateway
  type: NodePort

前端对外暴露

web-noreport.yaml

---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: wms-web
  name: wms-web
  namespace: wms-dev
spec:
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: 80
      nodePort: 32248
  selector:
    app: wms-web
  sessionAffinity: None
  type: NodePort

Ingress方式暴露

https://blog.csdn.net/qq_40722827/article/details/127929141

gateway对外暴露

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: gateway 
  namespace: wms-dev
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
spec:
  rules:
    - host: gateway.wms.com 
      http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service: 
              name: gateway
              port: 
                number: 8901
---
apiVersion: v1
kind: Service
metadata:
  name: gateway
  namespace: wms-dev
spec:
  ports:
  - port: 8901 
    name: gateway
  selector:
    project: wms-dev
    app: gateway

前端对外暴露

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: wms-web
  namespace: wms-dev
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
spec:
  rules:
    - host: dev.wms.com 
      http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service: 
              name: wms-web
              port: 
                number: 80
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: wms-web
  name: wms-web
  namespace: wms-dev
spec:
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 80
  type: ClusterIP
  selector:
    app: wms-web
  sessionAffinity: None

至此,所有微服务已经迁移到Kubernetes容器上了。

把我们上面手动做的这些,通过Jenkins等组件搭建成一个自动化部署的过程,就涉及到DevOps相关的知识了。接下来就会编写这一块的内容。

以上内容还有一些不够完善的地方,后续也会不断完善的。

来源:blog.csdn.net/qq_40722827/article/details/127958192

相关推荐

如何使用Java API操作HDFS系统?(hdfs java api的常见环境准备?)

1.搭建项目环境打开Eclipse选择FileàNewàMavenProject创建Maven工程,选择“Createasimpleproject”选项,点击【Next】按钮,会进入“New...

DataX写插件开发-集成阿里云RocketMQ

在上一期我们对datax进行了技术调研DataX数据异构、数据同步神器,这一次我们集成一个RocketMQ写插件,能够非常方便对将mysql数据同步到MQ中,下面来总结下具体步骤。1.下载datax源...

以SpringMVC+Shiro+Mybatis为核心开发的精简后台系统源码分享

项目说明源码获取方式:关注转发之后私信回复【源码】即可免费获取到以SpringMVC+Shiro+Mybatis为核心开发的精简后台基础系统。包含用户管理,角色管理,部门管理,权限管理,菜单管理,日志...

手把手教小伙伴们使用 Nginx 部署 TienChin 项目!

今天我就来手把手教小伙伴们部署TienChin项目,一起把这个项目跑起来,看看到底是个什么样的项目。小伙伴们知道,对于这种前后端分离的项目,我们在实际部署的时候,可以按照前后端分离的方式来部署,也...

推荐一款超棒的SpringCloud 脚手架项目

之前接个私活,在网上找了好久没有找到合适的框架,不是版本低没人维护了,在不就是组件相互依赖较高。所以我自己搭建一个全新spingCloud框架,里面所有组件可插拔的,集成多个组件供大家选择,喜欢哪个用...

SpringCloud 微服务迁移到 Kubernetes 容器化完整流程

k8s容器部署流程具体步骤:第一步:熟悉SpringCloud微服务项目第二步:源代码编译构建第三步:构建项目镜像并推送到镜像仓库第四步:K8s服务编排第五步:部署服务所需的基础环境第六步:部署微服...

SpringBoot 实现动态配置及项目打包部署上线

一、动态配置文件我们需要了解Spring动态指定配置文件的方式,来提高我们的部署效率。1.1、概述在实际企业开发中,开发环境、测试环境、生产环境通常采用不同的数据库等中间件的连接方式。如果此时我们按照...

3.5 源码安装ONOS1.3.0(源码包怎么安装)

ONOS是由ON.Lab使用Java及Apache实现发布的首款开源的SDN网络操作系统,主要面向服务提供商和企业骨干网。近日笔者在学习ONOS的过程中写下了这篇文章,希望可以对刚接触ONOS的同学们...

jenkins+gitlab 实现自动化部署(jenkins配置git自动部署)

目录1、安装jdk,要记住安装路径2、安装maven,要记住安装路径3、安装git,要记住安装路径4、安装gitlab5、安装jenkins(centos7)创建安装目录下载通用war包启动和关闭Je...

CI&CD落地实践6-Jenkins接入maven构建后端springboot项目

前言在前面一篇《CI&CD落地实践5-Jenkins分布式环境搭建及多节点运行》中,我们介绍了如何在Windows及Linux系统上部署Jenkins从节点,本章节介绍如何在Jenkins创建mave...

从0到1体验Jenkins+Docker+Git+Registry实现CI自动化发布

阅读目录:一、前言二、发布流程三、环境准备四、部署思路梳理五、三台机器上操作六、Git机器上操作七、Docker机器上操作八、Jenkins机器上操作九、上传JAVA项目代码到Git仓库十、Jenki...

微服务架构实战:使用Jenkins实现自动化构建

使用Jenkins实现自动化构建一个大型平台的微服务架构设计通常会产生很多项目工程,因此会有很多服务和应用需要部署,并且需要不断地迭代和更新,这是一个庞大的工程,所以我们需要借助自动化工具,实现各个微...

Jenkins 自动化部署实例讲解(jenkins自动化部署git 项目)

前言你平常在做自己的项目时,是否有过部署项目太麻烦的想法?如果你是单体项目,可能没什么感触,但如果你是微服务项目,相信你应该是有过这种感触的。这种情况下,我一般会劝你了解一下Jenkins这个玩意...

多模块的微服务项目容器化与Git追踪发布记录

在使用了微服务后,一个项目往往由多个模块组成,而容器化发布的建议是单个容器尽量只运行单个进程。所以我们会把每个模块单独打包成镜像运行。如果每个模块都单独配置Dockerfile会让我们维护起来很麻烦。...

手把手教你使用 Jenkins+Docker 实现持续集成

作者:乐之终曲来源:https://blog.csdn.net/qq_37143673/对于Jenkins我只能用两个字形容,难用。就不过多吐槽了,本篇是基于docker环境的使用。1.安...