0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

jf_ro2CN3Fa 来源:CSDN 2023-10-29 16:32 次阅读

熟悉Spring Cloud微服务项目

  • 源代码编译构建
  • 构建项目镜像并推送到镜像仓库
    • 制作镜像
    • 将镜像推送到harbor仓库
  • K8s服务编排
  • 部署基础环境
  • 部署微服务程序
  • 部署微服务前端
  • 微服务对外发布
    • NorePort方式暴露
    • Ingress方式暴露

k8s容器部署流程

b79ec68a-7633-11ee-939d-92fbcf53809c.png

具体步骤:

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

熟悉Spring Cloud微服务项目

微服务架构图

b7b275fe-7633-11ee-939d-92fbcf53809c.png

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

源代码编译构建

拉取仓库代码

gitclonehttp://192.168.0.126/saas-wms/linkinsense-wms-public.git
b7c581a8-7633-11ee-939d-92fbcf53809c.png

编译代码

mvncleanpackage-Dmaven.test.skip=true-Pdev
b7c97fa6-7633-11ee-939d-92fbcf53809c.png

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

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud
  • 视频教程:https://doc.iocoder.cn/video/

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

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

制作镜像

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

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

viDockerfile
FROMopenjdk:8-jre

RUNln-sf/usr/share/zoneinfo/Asia/Shanghai/etc/localtime
RUNecho'Asia/Shanghai'>/etc/timezone

WORKDIR/wms-center/wms-gateway

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

EXPOSE8901

CMDjava-jarwms-gateway-1.0.0.jar

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

b7da2b58-7633-11ee-939d-92fbcf53809c.png

通过DockerFile构建镜像

dockerbuild-twms-gateway:v1-fwms-gateway/Dockerfile./wms-gateway/
b7ea94a2-7633-11ee-939d-92fbcf53809c.png

查看构建好的镜像

dockerimages
b8023cf6-7633-11ee-939d-92fbcf53809c.png

将镜像推送到harbor仓库

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

登录仓库

dockerlogin192.168.0.127:8084
b81c565e-7633-11ee-939d-92fbcf53809c.png

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

给构建的镜像打tag

dockertagwms-gateway:v1192.168.0.127:8084/onlee/gateway:v1
b8326656-7633-11ee-939d-92fbcf53809c.png

推送镜像仓库

dockerpush192.168.0.127:8084/onlee/gateway:v1
b84695b8-7633-11ee-939d-92fbcf53809c.pngb85fe0ae-7633-11ee-939d-92fbcf53809c.png

其他模块构建和推送参考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

kubectlcreatenamespacewms-dev
b873035a-7633-11ee-939d-92fbcf53809c.png

部署服务

kubectlapply-fgateway.yaml
b88437f6-7633-11ee-939d-92fbcf53809c.png

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

部署微服务前端

编写DockerFile文件

FROMnginx

COPYdist/usr/share/nginx/html/

EXPOSE80

构建镜像

dockerbuild-twms-web:v1-fDockerfile.

镜像打tag

dockertagwms-web:v1192.168.0.127:8084/onlee/wms-web:v1

推送到镜像仓库

dockerpush192.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

部署服务

kubectlapply-fweb.yaml

微服务对外发布

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

b8a5f4a4-7633-11ee-939d-92fbcf53809c.png

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

b8bee36a-7633-11ee-939d-92fbcf53809c.png

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容器上了。

b8ce2df2-7633-11ee-939d-92fbcf53809c.png

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


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 自动化
    +关注

    关注

    29

    文章

    5585

    浏览量

    79301
  • 容器
    +关注

    关注

    0

    文章

    495

    浏览量

    22062
  • 微服务
    +关注

    关注

    0

    文章

    137

    浏览量

    7353

原文标题:SpringCloud 微服务迁移到 Kubernetes 容器化完整流程

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    使用Helm 在容器服务k8s集群一键部署wordpress

    摘要: Helm 是啥? 微服务容器给复杂应用部署与管理带来了极大的挑战。Helm是目前Kubernetes服务编排领域的唯一开源子项目
    发表于 03-29 13:38

    容器开启数据服务之旅系列(一):Kubernetes如何解自建PostgreSQL运维之痛

    摘要: 通过阿里云Kubernetes容器服务,开启你的数据服务之旅 (一)云上运维自建数据库之痛,使用容器
    发表于 04-17 13:31

    容器开启数据服务之旅系列(二):Kubernetes如何助力Spark大数据分析

    摘要: 容器开启数据服务之旅系列(二):Kubernetes如何助力Spark大数据分析 (二):Kubernetes如何助力Spark大数据分析 概述 本文为大家介绍一种
    发表于 04-17 15:10

    如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes

    ,支持企业级 Kubernetes 容器应用的全生命周期管理。容器服务 Kubernetes
    发表于 12-28 16:06 433次阅读
    如何在 Intellij IDEA 更高效地将应用部署到<b class='flag-5'>容器</b><b class='flag-5'>服务</b> <b class='flag-5'>Kubernetes</b>

    什么是微服务容器?微服务容器的作用是什么

    微服务是将应用程序拆分为多个服务的一种架构类型,这些服务具备构成整个应用程序的细粒度功能。每个微服务将具备针对您的应用程序的不同逻辑功能。与应用程序的所有组件和功能都在单个实例中的单体
    的头像 发表于 01-13 10:54 3.2w次阅读
    什么是<b class='flag-5'>微服务</b>和<b class='flag-5'>容器</b>?<b class='flag-5'>微服务</b>和<b class='flag-5'>容器</b>的作用是什么

    微服务容器之间的有何关系?

    现在一提到微服务,有很多人会想到容器技术(这里说到的容器技术是指docker)。那么微服务容器之间到底有什么关系呢,我来简要和大家探讨下。
    的头像 发表于 02-01 01:58 6152次阅读

    通过微服务原理、领域驱动设计概念等来成功实现微服务

    组织通过微服务基本准则、领域驱动的设计概念和编码优秀实践成功地使用微服务,可以充分利用Kubernetes/容器原生的优势。
    的头像 发表于 08-14 10:02 1907次阅读

    分析探讨微服务迁移如何影响数据库管理和分解数据库的步骤

    在从单体式架构迁移到微服务架构时,数据库通常是事后想法。有些人认为迁移仅涉及应用逻辑的重组,而底层数据保持不变。但是,这种做法可能会导致单体式服务
    的头像 发表于 10-12 14:43 2140次阅读

    KUBERNETES的工作原理是什么

    Kubernetes 提供了一个框架,用于部署、管理、扩展和切换分布式容器,这些容器是随依赖项和配置打包的微服务
    的头像 发表于 06-10 13:19 1720次阅读

    Kubernetes集群内服务通信机制介绍

    现在在 Kubernetes 集群中,我们拥有构成集群管理组件和一组工作机器(称为节点)的控制平面。这些节点托管 Pod,这些 Pod 将后端微服务作为容器
    发表于 10-04 10:13 552次阅读

    springcloud微服务架构

    Spring Cloud是一个开源的微服务架构框架,它提供了一系列工具和组件,用于构建和管理分布式系统中的微服务。它基于Spring框架,旨在通过简化开发过程和降低系统复杂性来帮助开发人员构建弹性
    的头像 发表于 11-23 09:24 1351次阅读

    docker微服务架构实战

    随着云计算和容器技术的快速发展,微服务架构在软件开发领域中变得越来越流行。微服务架构将一个大型的软件应用拆分成多个小型的、独立部署的服务
    的头像 发表于 11-23 09:26 654次阅读

    入门级攻略:如何容器部署微服务

    第一步理解容器基础,第二步创建Dockerfile,第三步构建推送镜像,第四步部署微服务,第五步管理微服务、第六步优化更新。容器
    的头像 发表于 10-09 10:08 157次阅读

    微服务架构与容器云的关系与区别

    微服务架构与容器云密切相关又有所区别。微服务将大型应用拆分为小型、独立的服务,而容器云基于容器
    的头像 发表于 10-21 17:28 231次阅读

    宝藏级微服务架构工具合集

    构建,Eclipse Vert.X提供多语言支持且资源高效;Kubernetes是强大的容器编排工具,Tyk是开源API管理平台;RabbitMQ帮助微服务间通信,Apache Kafka则适用于处理
    的头像 发表于 12-21 16:33 151次阅读