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

news2024/9/20 7:50:37

文章目录

  • 相关文章
  • k8s容器部署流程
    • 熟悉Spring Cloud微服务项目
    • 源代码编译构建
    • 构建项目镜像并推送到镜像仓库
      • 制作镜像
      • 将镜像推送到harbor仓库
    • K8s服务编排
    • 部署基础环境
      • 在K8s中部署Nacos集群(注册和配置中心)
      • 在k8s中部署Seata分布式事务
      • 在linux部署mysql,redis,rabbitmq,minio,xxl-job
    • 部署微服务程序
    • 部署微服务前端
    • 微服务对外发布
      • NorePort方式暴露
      • Ingress方式暴露

相关文章

  • kubernetes集群基于kubeadm部署以及常见问题解决
  • kubernetes集群配置默认存储类(nfs)
  • Docker工作中常用知识总结
  • Ubuntu本地安装MySQL8.0以及常见问题设置方法
  • kubernetes集群安装Ingress-nginx
  • 持续补充中…

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依赖,之后构建就会很快了。

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

  1. 基础镜像:centos,ubuntu
  2. 中间件镜像:jdk,nginx
  3. 项目镜像:基础镜像+中间件镜像+项目代码

制作镜像

  • Docker工作中常用知识总结

编写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

  • Ubuntu本地安装MySQL8.0以及常见问题设置方法

部署微服务程序

  • 准备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方式暴露

  • kubernetes集群安装Ingress-nginx

在这里插入图片描述

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相关的知识了。接下来就会编写这一块的内容。
  • 以上内容还有一些不够完善的地方,后续也会不断完善的。

你知道的越多,你不知道的越多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/58533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

李炎恢ECMAScript6 / ES6+(二)

16.Set 数据集合 学习要点: 1.Set 数据集合 本节课我们来开始学习 ES6 新增的 Set 数据集合的用法; 一.Set 数据集合 1.ES6 之前只有数组一种数据结构,而现在提供了 Set 和 Map 两种集合; 严格来说,对象…

PC辉光效果一切正常,安卓辉光却没效果、显示异常(爆闪、黑屏等)

一:安卓端辉光不显示问题 问题描述:项目中使用unity的PostProcessing package实现辉光的功能,在pc上辉光效果一切正常,但是打出apk在真机测试时,辉光基本没效果。 解决思路:PostProcessing Bloom效果需要有…

【ArcGIS微课1000例】0056:将单波段栅格背景设置为无数据NoData的方法

本文讲解将单波段栅格背景设置为空值的方法,以DEM数据为例。 文章目录 一、DEM设置无数据二、注意事项单波段数据,一般只有DEM,遥感单波段影像,二值化图像等。 使用珊格计算器通过SetNull 函数(设定空值函数)可以将特定值计算为空值(NoData),SetNull的语法格式为: Se…

[附源码]Python计算机毕业设计Django教育企业网站

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

4-5:关注,取消关注

需求 开发关注、取消关注功能。 统计用户的关注数、粉丝数。 关键 若A关注了B,则A是B的Follower (粉丝),B是A的Followee (目标)。关注的目标可以是用户、帖子、题目等,在实现时将这些目标抽象为实体。 也是将数据存储到redis中,…

LeetCode刷题复盘笔记—一文搞懂0 - 1背包之494. 目标和问题(动态规划系列第九篇)

今日主要总结一下动态规划0-1背包的一道题目,494. 目标和问题 题目:494. 目标和 Leetcode题目地址 题目描述: 给你一个整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 ‘’ 或 ‘-’ ,然后串联起所有整数&#…

国外网友分享如何从零开始打造一辆真正的自动驾驶汽车

在 2021 年夏天大学二年级结束后,我决定从事当时最先进的项目之一——从头开发自动驾驶软件并在真车上实现。在公开我的代码的一些主要部分并发布演示视频后,我收到了很多关于该项目的问题。因此,我决定分享开发过程背后的故事。 我一直对与人工智能和机器学习相关的任何事…

Java代码审计——ClassLoader 类加载机制

目录 前言: (一)类加载机制 0x01 ClassLoader 类 0x02 loadClass()方法的流程 0x03 自定义的类加载器 0x04 loadClass()方法与 Class.forName 的区别 0x05 URLClassLoader (二)Java 动态代理 0x01 静态代理 0x02 动态代理…

2022最新 MySQL 内部技术架构面试题

更多面试题:https://javaxiaobear.gitee.io/ 47、MySQL内部支持缓存查询吗? 当MySQL接收到客户端的查询SQL之后,仅仅只需要对其进行相应的权限验证之后,就会通过Query Cache来查找结果,甚至都不需要经过Optimizer模…

dot product【点积】

(1)概念 点积在数学中,又称数量积(dot product; scalar product),是指接受在实数R上的两个向量并返回一个实数值标量的二元运算。 两个向量a [a1, a2,…, an]和b [b1, b2,…, bn]的点积定义为&#xff…

点云数据集ShapeNet

目录 1. 数据采集的作者 2. 下载shapenet数据集的代码 3. 数据特点 3.1 每个数字文件夹代表一个类别 3.2 synsetoffset2category.txt 3.3 train_test_split文件夹 3.4 pts点云文件 3.6 seg分割类别文件 1. 数据采集的作者 article{yi2016scalable,title{A scalable ac…

idea导入eclipse项目的时候,Java图标变成黄色小J了,怎么解决?

凯哥今天导入一个15年时候写的小项目,当时使用的是eclipse写的。最近好几年都在使用idea,习惯了idea的,在用eclipse,不习惯,不顺手,就导入到idea中。发现,Java文件的图标变成了黄色的J。如下图&…

【Linux】详解套接字编程

文章目录网络套接字1.端口号1.1认识端口号1.2端口号VS PID2.TCP与UDP协议3.网络字节序4.socket编程4.1常用接口4.2sockaddr结构4.3.socket接口的底层工作4.4字符串IP VS 整形IP4.5 bind与INADDR_ANY5.UDP聊天服务器5.1va_start和va_end5.2vsnprintf函数5.3自定义日志类5.4UDP服…

【RTS】杜金房大神FreeSwitch分享笔记

技术万变不离其宗不管如何实现原理都是一样的。杜金房大神 RTS 高可用 一台机器上俩fs,公用同一个ip用户连接的是一个ip,不知道切了fs。两台主备数据同步

ARM 汇编编写 LED 灯

一、一步步点亮LED 1. 硬件工作原理及原理图查阅 LED 本身有 2 个接线点,一个是 LED 的正极,一个是 LED 的负极。LED 这个硬件的功能就是点亮或者不亮,物理上想要点亮一颗 LED 只需要给他的正负极上加正电压即可,要熄灭一颗 LED…

Linpack安装测试流程记录

软件背景 虽然很早就接触了HPC,也参与过一些项目,诸如电影动画渲染集群以及某博导老师的基因分析计算集群,但是对于跑超算的linpack,一直没时间上手玩。 Linpack是超算必测项目,也是考验优化能力的套件,很有意思,记录…

软件测试工程师到底要不要转行开发? 2022测试生涯该如何转型升级?

测试工程师到底是干啥的? 测试工程师转开发有多大希望? 为了能够解除大家心中的疑惑,我决定从以下几个方面来补充回答: 测试工程师到底是干什么的? 测试工程师转开发有多大希望? 测试工程师一定要转开发吗…

2023秋招,Java岗最全面试攻略,吃透25个技术栈Offer拿到手软!

我分享的这份春招 Java 后端开发面试总结包含了 JavaOOP、Java 集合容器、Java 异常、并发编程、Java 反射、Java 序列化、JVM、Redis、Spring MVC、MyBatis、MySQL 数据库、消息中间件 MQ、Dubbo、Linux、ZooKeeper、 分布式 &数据结构与算法等 25 个专题技术点&#xff0…

腾讯云服务器2核4G、4核8G、8核16G、16核32G配置报价表出炉

现在腾讯云服务器2核2G、2核4G、4核8G、8核16G、16核32G配置价格表已经出来了,大家可以参考一下。腾讯云轻量应用服务器为轻量级的云服务器,使用门槛低,按套餐形式购买,轻量应用服务器套餐自带的公网带宽较大,4M、6M、…

rocketmq安装、启动

1、下载 >wget http://mirror.bit.edu.cn/apache/rocketmq/4.4.0/rocketmq-all-4.4.0-source-release.zip >unzip rocketmq-all-4.4.0-source-release.zip > cd rocketmq-all-4.4.0/ > mvn -Prelease-all -DskipTests clean install -U > cd distribution/targ…