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

springboot+k8s+抛弃springcloud.eureka springboot开发微服务框架一般使用springcloud全家桶,而整个项目都是容器化的,通过k8s进行编排,而k8s自己也有服务发现机制,所以我们也可以抛弃springcloud里的eureka,而直接使用k8s自己的服务。 添加组件 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-rib 阅读详情

👉 这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 

74d99f20082497b5825d5687a48eab7d.gif

👉这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号等等功能:

  • Boot 地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro

  • Cloud 地址:https://gitee.com/zhijiantianya/yudao-cloud

  • 视频教程:https://doc.iocoder.cn

来源:blog.youkuaiyun.com/qq_40722827
/article/details/127958192


k8s容器部署流程

02c77c0fedb97d88c374e4ad24105de2.png

具体步骤:

  • 第一步:熟悉Spring Cloud微服务项目

  • 第二步:源代码编译构建

  • 第三步:构建项目镜像并推送到镜像仓库

  • 第四步:K8s服务编排

  • 第五步:部署服务所需的基础环境

  • 第六步:部署微服务程序

  • 第七步:部署微服务前端

  • 第八步:微服务对外发布

熟悉Spring Cloud微服务项目

微服务架构图

f87775bddc79d958caef2ab437dba23a.png

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

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

源代码编译构建

拉取仓库代码

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

编译代码

mvn clean package -Dmaven.test.skip=true -Pdev
6d7a79ec228140db8afe488ccad4a481.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.youkuaiyun.com/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放置的文件位置

637c1ebc4e68703481039f1f6f7f502d.png

通过DockerFile构建镜像

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

查看构建好的镜像

docker images
fa57651a31b954106c3c63d8e928e216.png

将镜像推送到harbor仓库

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

登录仓库

docker login 192.168.0.127:8084
7534a84bbde7376cbdef8ce8d331ab34.png

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

给构建的镜像打tag

docker tag wms-gateway:v1  192.168.0.127:8084/onlee/gateway:v1
0a370446c3b6489c4e3c0d67b636869e.png

推送镜像仓库

docker push 192.168.0.127:8084/onlee/gateway:v1
4f8e72cd209ec5dd6a8dc76cbea80461.png cef44c581d9a6546df1251bc9803bfc6.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

kubectl create namespace wms-dev
23081e4bccdf4f2bb7e0425a91e0ee94.png

部署服务

kubectl apply -f gateway.yaml
3dbac344e6c3e4755be742170909e203.png

其他模块部署服务参考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和前端需要暴露服务。

43cb3f1c31be8f11b309faa157050585.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.youkuaiyun.com/qq_40722827/article/details/127929141

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

f72e0f48833dc80c082cf7f5639c662a.png

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

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


欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,“长按”或“扫描”下方二维码噢:

463b92c55f68f5495e934b54c7194b9d.png

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

4ee41011acd698c23995a59b79d1b3d9.png

4b5aa650fdcf9cab7a0c60f69d2ec231.pngb38c5d11e31b761ff7310ab45946a291.pngcbb6b9631e346cad2c39ba82dc783185.png8a4ff841f51661e40d946a1ef19655f6.png

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
迁移到云原生:如何使用微服务迁移应用程序 这简化了与维护服务之间的远程过程调用所需的访问权限相关的复杂性,即使它们在不同的主机上运行。Node.js 的主要优势包括跨平台兼容性、使用单一编码语言 (JavaScript) 的便利性、JavaScript V8 引擎的强大功能、对快速部署和微服务开发的支持、高可扩展性、令人印象深刻的数据处理能力、活跃的开源社区、通过节点包管理器 (NPM) 提供的附加功能、高级托管功能和快速数据流。事实证明,在过渡期间解耦紧密互连的元素具有挑战性,虽然代码库的年龄和大小是耦合问题的潜在指标,但它们并不是确定的。 阅读详情

相关推荐

Kubernetes实战指南:零宕机无缝迁移Spring Cloud至k8s

1. 项目迁移背景 1.1 为什么要在“太岁”上动土? 目前公司的测试环境、UAT环境、生产环境均已经使用k8s进行维护管理,大部分项目均已完成容器化,并且已经在线上平稳运行许久。在我们将大大小小的项目完成容器化以后,测试、UAT、生产环境的发版工具以及CICD流程慢慢的实现统一化管理,并且基于k8s开发了内部的发版审核平台,同时接入了Jira等项目管理工具。 在自研平台进行发版时,能够自动关联项目的开发进度以及Release版本,最重要的是其可以控制发版权限、统一发版工具及发版模式,并且支持一键式发

SharingOfficer的博客 2142

spring-cloud-kubernetes入门课程

课程简介页面地址:https://blog.youkuaiyun.com/liurui50/article/details/120252515将会从0开始入门云原生,完整学习完本视频后,你将能够迅速适应当下K8s在企业中的开发与架构设计。视频配套代码、资料非常完整,适合踏实跟进。遇到问题可以随时和老师一起探讨,下面是主要课程内容:1.从0开始搭建一个Kubernetes集群;2.在Kubernetes集群上搭建一个CICD环境,方便自动化部署项目,此次选用kubesphere;3.会讲一个Spring-cloud服务之间调用示例,方便由cloud迁移到云原生架构中来;4.搭建一个Spring-cloud-kubernetes+spring-cloud-gateway项目,从容面对中小厂云原生架构设计与开发;5.将上面的项目自动化部署到Kubernetes集群上,并提供外网访问;

基于Docker+Kubernetes,微服务容器化开发实战

1.2.1 单体架构的特点1.2.2 单体架构的优点1.2.3 单体架构的缺点。

m0_71777195的博客 647

springboot 部署k8s(一)

本系列教程将分2篇文章讲解,怎么部署springboot 到k8s 上。第一篇:springboot 准备,这里包括打包镜像。第二篇:springboot 镜像部署到k8s, 我们将使用deployment ,service 用最简单的方式deploy k8s.这里面springboot 已经可以打包镜像了,下一篇将部署到k8s.

yaobo2816的专栏 4167

SpringCloud与Kubernetes融合实战项目spring-cloud-k8s-demo

动态伸缩虽好,但也带来新问题:新启动的 Pod 还没预热完成就被打死了怎么办?解决方案三连击:当我们把 Spring Cloud 微服务从“依赖中间件”转向“平台自治”,你会发现:架构更轻了(少了 Eureka、Config Server)响应更快了(秒级发现、毫秒级故障转移)运维更简单了(一切通过 YAML 声明)弹性更强了(自动伸缩、自动恢复)这不仅仅是技术替换,而是一种思维方式的转变:从“我在 K8s 上运行应用”变成“我的应用天生属于 K8s”

weixin_42126677的博客 1071

告别命令行恐惧!用TBtools的MCScanX插件,5分钟搞定拟南芥和水稻的基因组共线性分析

本文介绍如何利用TBtools的MCScanX插件快速完成拟南芥和水稻的基因组共线性分析,无需命令行操作,5分钟即可生成专业可视化结果。通过图形化界面简化传统MCScanX的复杂流程,特别适合非生物信息背景的研究者,显著提升基因组数据分析效率。

dianzhuique8587的博客 377

从零开始把 SpringBoot 搬到 K8s 上运行,我用了这几步!

大家好,我是网管。咱们的K8s入门和实践,在经历了三篇理论知识的后,相信各位都已经期待许久(可能的吧),就差私信我,你整着理论整半天有啥用,本大人写的程序怎么能放到K8s上运行。别急,今天这篇文章就带你从写第一行代码开始,一步步教你把程序放到K8s跑起来。这次咱们先用SpringBoot开发的程序做个例子,后面再写一篇怎么把SpringBoot应用放到K8s上运行。讲完这篇SpringBoot应用上K8s的过程,咱们快速入门和实践这个短系列就算完结了。https。...

m0_67698950的博客 3358

Agv、Rgv 车辆控制调度系统开发第一篇

Agv、Rgv 车辆控制调度系统第一篇为什么要做这个系统先看作品从头讲起算法讲解编程语言从哪里开始继续深入预告 为什么要做这个系统 说白了是为了赚钱,在一个项目中发现公司买别人家的调度系统要几十万,还只是一个项目的实施,从那天起我就决定自己写一套,用了一年的时间写出来后,才发现根本卖不掉,卖不掉就卖不掉吧,反正我现在已经吧写这套系统当成了一种乐趣,如果不让我写了我反而不适应,但是没有人欣赏我的成果我反而很难受,所以决定吧这个系统的创作过程,写下来,给后面的人一些建议,少走点弯路。 先看作品 从头讲起 在

持续分享调度系统开发过程 2万+

Spring Cloud微服务迁移到Kubernetes容器化

具体步骤:微服务架构图拉取仓库代码 编译代码 编写gateway服务的DockerFile,制作镜像 编写完成的DockerFile放置的文件位置 之前本地部署的镜像仓库Harbor: ,如果没有可拿docker-hub注册一个账号。登录仓库 其他模块编写k8s yaml文件参考gateway模块 部署基础环境 这一步暂时省略,后续补充… 在K8s中部署Nacos集群(注册和配置中心) 在k8s中部署Seata分布式事务 在linux部署mysql,redis,rabbitmq,

Carroll的博客 2127

ks-快手滑块验证码-Js逆向

本文分析了快手滑块验证码的破解过程。首先通过抓包找到验证码背景图接口,发现需要动态获取captchaSession参数。然后深入分析验证流程,发现verifyParam参数被加密处理,需要追踪其生成逻辑。文章详细解析了加密参数c的构成,包括captchaSn、滑动距离、轨迹信息等,并指出轨迹验证较为严格。最后通过对比浏览器和本地生成的加密值,确认加密逻辑正确,但指出轨迹生成仍需优化。作者建议参考相关文章深入分析轨迹逻辑,并提供了验证成功的截图作为参考。

2302_76420666的博客 1878

嵌入式Linux开发必备:设备树插件动态加载实战指南(RK356x平台为例)

本文以RK356x平台为例,详细介绍了嵌入式Linux开发中设备树插件的动态加载实战。通过configfs接口,开发者可以在系统运行时动态修改硬件配置,实现外设的即插即用与调试,无需重启设备,极大提升了开发与调试效率。

w7x8y9z的博客 443

技术实践|SpringCloud在k8s下的应用分享

在k8s中,可直接使用云原生的k8s注册中心完成服务的注册及发现,网关可使用ingress完成类似的工作,然后类似于非k8s的以服务名称调用模式完成微服务的调用。在命名空间中运行的最小单元,可将之视作一个个的虚拟机,我们的应用程序都是运行于POD中。通过不同的形态可发现,在k8s中已提供了完整的运行SpringCloud的原生生态,并且通过SpringCloudKubernetes的顶层实现,完全屏蔽了底层,我们可以在微服务的层面完全无感的切换至k8s平台,甚至在应用程序层完全无侵入。...

zhongdianjinxin的博客 4038

Python:同花顺全数据接口

# -*- coding: utf-8 -*- from iFinDPy import * from datetime import datetime import pandas as pd import time as _time import json from threading import Thread,Lock,Semaphore import requests sem = Semaphore(5) # 此变量用于控制最大并发数 dllock = Lock() #此变量用来控制实时行情推

代码过客 4万+

从单体到微服务:SpringCloud+K8s改造实录,成本直降60%的架构演进

本文详细记录了一个企业级应用从传统单体架构向SpringCloud微服务架构转型,并最终通过Kubernetes(K8s)实现容器化部署的全过程。通过这一架构演进,系统不仅获得了更高的可用性和扩展性,还实现了惊人的60%成本降低。文章将深入剖析技术选型、实施步骤、关键挑战及解决方案,为面临类似架构转型的企业提供可复用的实践经验。

小筱在线博客 1599

单片机:实现简单的时间片轮询调度(附完整源码)

单片机:实现简单的时间片轮询调度(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 384

从零开始:手把手教你设计人形机器人锂电池供电系统

人形机器人要像人类一样“活起来”,必须有稳定的“能量血液”——供电系统。本文聚焦锂电池供电系统如何根据机器人功耗选择合适的锂电池参数(容量、电压、放电倍率);如何设计电池管理系统(BMS)保护电池安全;如何解决机器人运动时的“瞬时大电流”供电难题;如何通过硬件电路和代码实现供电系统的监测与控制。用“机器人小助手的能量危机”故事引入锂电池供电系统;拆解锂电池核心参数(容量、电压、放电倍率)和供电系统三大组件(电池组、BMS、电源转换模块);

AI天才研究院 1759

Kubernetes (K8s) 和 Spring Cloud 的区别

Kubernetes 是由 Google 开发并捐赠给 Cloud Native Computing Foundation (CNCF) 的开源容器编排平台。Kubernetes 的主要目的是自动化应用程序的部署、扩展和管理。它允许开发者和运维人员高效地管理成千上万的容器化应用,并确保这些应用能够高可用、可扩展和易于维护。Kubernetes是一个容器编排平台,属于基础设施层,主要关注容器的部署、管理和扩展。它有一个丰富的生态系统,包括 Helm、Istio、Prometheus 等工具。

nbsaas-boot基于Request-Response的企业级快速开发框架 1813

20、超声多普勒成像技术全解析

本文全面解析了超声多普勒成像技术,涵盖彩色血流成像(CFI)、能量多普勒成像、超快多普勒成像和矢量多普勒成像的原理、流程、优势及临床应用场景。详细探讨了各成像模式的特点,如CFI的血流方向与速度可视化、能量多普勒对小血管的高灵敏度、超快多普勒的高帧率分析能力,以及矢量多普勒消除角度依赖性的创新方法。同时分析了技术面临的挑战及未来发展趋势,包括更高分辨率、人工智能辅助诊断和便携式设备的发展,为医学影像研究和临床诊断提供重要参考。

z2a3b4c5d的博客 279

分布式系统选型之Kubernetes (K8s) vs Spring Cloud

Kubernetes 是由 Google 开发并捐赠给 Cloud Native Computing Foundation (CNCF) 的开源容器编排平台。Kubernetes 的主要目的是自动化应用程序的部署、扩展和管理。它允许开发者和运维人员高效地管理成千上万的容器化应用,并确保这些应用能够高可用、可扩展和易于维护。Kubernetes是一个容器编排平台,属于基础设施层,主要关注容器的部署、管理和扩展。它有一个丰富的生态系统,包括 Helm、Istio、Prometheus 等工具。

qq_36176028的博客 3540

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

上一篇: 求求你们了,MyBatis 批量插入别再乱用 foreach 了,5000 条数据花了 14 分钟。。...
下一篇: 图解 Spring Bean 生成流程,非常详尽
公众号-芋道源码
博客等级 码龄10年 1631粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值