熟悉Spring Cloud微服務項目
- 源代碼編譯構建
-
構建項目鏡像并推送到鏡像倉庫
- 制作鏡像
- 將鏡像推送到harbor倉庫
- K8s服務編排
- 部署基礎環境
- 部署微服務程序
- 部署微服務前端
-
微服務對外發布
- NorePort方式暴露
- Ingress方式暴露
k8s容器部署流程
具體步驟:
- 第一步:熟悉Spring Cloud微服務項目
- 第二步:源代碼編譯構建
- 第三步:構建項目鏡像并推送到鏡像倉庫
- 第四步:K8s服務編排
- 第五步:部署服務所需的基礎環境
- 第六步:部署微服務程序
- 第七步:部署微服務前端
- 第八步:微服務對外發布
熟悉Spring Cloud微服務項目
微服務架構圖
基于 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
編譯代碼
mvncleanpackage-Dmaven.test.skip=true-Pdev
這兒構建時間久是因為第一次構建,需要下載maven依賴,之后構建就會很快了。
基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能
構建項目鏡像并推送到鏡像倉庫
- 基礎鏡像:centos,ubuntu
- 中間件鏡像:jdk,nginx
- 項目鏡像:基礎鏡像+中間件鏡像+項目代碼
制作鏡像
編寫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放置的文件位置
通過DockerFile構建鏡像
dockerbuild-twms-gateway:v1-fwms-gateway/Dockerfile./wms-gateway/
查看構建好的鏡像
dockerimages
將鏡像推送到harbor倉庫
之前本地部署的鏡像倉庫Harbor: http://192.168.0.127:8084/
,如果沒有可拿docker-hub注冊一個賬號。
登錄倉庫
dockerlogin192.168.0.127:8084
推送鏡像到鏡像倉庫需要滿足鏡像倉庫的鏡像名稱,因此需要給構建好的鏡像打個tag。
給構建的鏡像打tag
dockertagwms-gateway:v1192.168.0.127:8084/onlee/gateway:v1
推送鏡像倉庫
dockerpush192.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模塊
部署基礎環境
這一步暫時省略,后續補充…
部署微服務程序
準備namespace
kubectlcreatenamespacewms-dev
部署服務
kubectlapply-fgateway.yaml
其他模塊部署服務參考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和前端需要暴露服務。
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相關的知識了。接下來就會編寫這一塊的內容。
-
自動化
+關注
關注
29文章
5578瀏覽量
79280 -
容器
+關注
關注
0文章
495瀏覽量
22061 -
微服務
+關注
關注
0文章
137瀏覽量
7351
原文標題:SpringCloud 微服務遷移到 Kubernetes 容器化完整流程
文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論