⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 blog.csdn.net/qq_40722827/article/details/127958192 「carroll18」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

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相关的知识了。接下来就会编写这一块的内容。

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

文章目录
  1. 1. 熟悉Spring Cloud微服务项目
  2. 2. 源代码编译构建
  3. 3. 构建项目镜像并推送到镜像仓库
    1. 3.1. 制作镜像
    2. 3.2. 将镜像推送到harbor仓库
  4. 4. K8s服务编排
  5. 5. 部署基础环境
  6. 6. 部署微服务程序
  7. 7. 部署微服务前端
  8. 8. 微服务对外发布
    1. 8.1. NorePort方式暴露
    2. 8.2. Ingress方式暴露