当前位置: 首页 > news >正文

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

文章目录

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

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

相关文章:

  • CTFShow re2 (RC4
  • HTML5期末考核大作业,网站——旅游景点。 学生旅行 游玩 主题住宿网页
  • 线程的基本操作
  • BlockingQueue二
  • CMake中add_library的使用
  • Linux-新建用户/群组以及修改文件权限
  • 【sciter】安全应用列表控件总结
  • MyBatisPlus的使用入门
  • 什么是产品主导的增长以及为什么它对 API 优先的公司至关重要
  • idea导入eclipse项目的时候,Java图标变成黄色小J了,怎么解决?
  • WebRTC + Tensorflow.js 在运动健康类项目中的前端应用
  • 防火墙ssh详解讲解
  • [附源码]JAVA毕业设计酒店订房系统(系统+LW)
  • RIoTBoard开发板系列笔记(十三)—— yocto SDK安装与使用
  • 基于FPGA开发板使用Verilog设计PWM呼吸灯实验
  • Tableau:详细表达式(LOD表达式)的计算过程
  • 【人民币识别】人民币序列号识别【含GUI Matlab源码 908期】
  • 这么简单,还不会使用java8 stream流的map()方法吗?
  • MFC绘制二维图形【1】—— 使用映射模式函数自定义坐标系
  • GO高级特性 之 并发模型
  • u盘怎么数据恢复?靠这四种解决方法
  • 遥感影像目标检测:从CNN(Faster-RCNN)到Transformer(DETR)实践技术应用
  • Eureka
  • 【C++】list的模拟实现+迭代器的设计思维
  • AI 也会写代码了,但我并不担心
  • Java8 遍历List 使用stream().parallel()并发安全
  • 计算机毕业设计Java企业固定资产管理系统的设计实现(源代码+数据库+系统+lw文档)
  • 实验十一 级数与方程符号求解(MATLAB)
  • [附源码]Python计算机毕业设计Django疫情防控平台
  • Java - 通过反射进行赋值以及函数调用
  • 湖南2021本科批(普通类历史类)第一次征集志愿投档分数线
  • 2022年甘肃高考482分能报什么大学 482分能上哪些院校
  • 2022年全国各大高校在山东招生计划及分数
  • 浙江有哪些师范大学,年浙江师范类大学分数线排名一览表
  • 武汉设计工程学院是几本
  • 2022感恩节放假吗 中国有哪些节日会放假
  • 12种新高考3+1+2选科组合分析 怎么选科好
  • 0基础艺考最容易过的专业有哪些 通过率最高的专业是什么
  • 体育高水平怎么报名
  • 浙江2022普通类第二段平行投档分数线是多少