前置依賴
-
k8s集群,如果沒有安裝,請(qǐng)先安裝
-
kubectl ,客戶端部署需要依賴
應(yīng)用鏡像構(gòu)建
應(yīng)用鏡像構(gòu)建不用自己去執(zhí)行,相關(guān)鏡像已經(jīng)推送到docker hub 倉庫,如果要了解過程和細(xì)節(jié),可以看一下,否則直接跳到k8syaml文件配置章節(jié)
Java應(yīng)用鏡像構(gòu)建
代碼地址:https://github.com/dongweizhao/backend
Java應(yīng)用打包
調(diào)用sh package.sh
會(huì)執(zhí)行mvn的package命令,進(jìn)行打包
編寫Dockerfile
從target目錄復(fù)制可執(zhí)行jar
FROM?openjdk:8-jre
COPY?target/backend-0.0.1-SNAPSHOT.jar?/app.jar
ENTRYPOINT?java?-jar?${JAVA_OPTS}?/app.jar
鏡像打包推送
執(zhí)行sh push.sh
?推送至dockerhub倉庫,鏡像地址:dweizhao/backend:latest
前端應(yīng)用鏡像構(gòu)建
代碼地址:https://github.com/dongweizhao/frontend
前端項(xiàng)目結(jié)構(gòu)如下
采用百度低代碼平臺(tái)amis進(jìn)行開發(fā)
編寫Dockerfile
拷貝前端工程dist目錄至/frontend
,并進(jìn)行目錄授權(quán)
from?nginx
copy?./dist?/frontend
run?chown?nginx.nginx?/frontend?-R
copy?nginx.conf?/etc/nginx/conf.d/default.conf
編寫nginx.conf文件
server{
listen 80;
server_name localhost;
root /frontend;
index index.html index.htm;
location /login {
try_files $uri $uri/ /login.html;
}
}
推送鏡像
執(zhí)行sh push.sh
推送dockerhub倉庫,鏡像地址:dweizhao/frontend:latest
k8s yaml文件配置
以下是我們部署的服務(wù)在k8s 中路由示意圖
后端服務(wù)配置
backend-dp.yaml
由于我們服務(wù)是無狀態(tài)服務(wù),使用Deployment進(jìn)行部署,Deployment擁有更加靈活強(qiáng)大的升級(jí)、回滾功能,并且支持滾動(dòng)更新
apiVersion:?apps/v1
kind:?Deployment
metadata:
??name:??backend
spec:
??selector:
????matchLabels:
??????app:??backend
??replicas:?1
??template:
????metadata:
??????labels:
????????#?service?會(huì)根據(jù)此標(biāo)簽來查找此pod
????????app:??backend
????????version:?latest
????spec:
??????containers:
????????-?name:?backend
??????????image:?"dweizhao/backend:latest"
??????????imagePullPolicy:?Always
backend-svc.yaml
Service相當(dāng)于Spring cloud中Ribbon的作用,提供了服務(wù)發(fā)現(xiàn)和負(fù)載均衡的功能,而不用關(guān)心具體服務(wù)實(shí)例有多少個(gè),在 k8s的服務(wù)實(shí)例就是Pod,這里我們使用ClusterIP
類型,因?yàn)槭峭ㄟ^Ingress在集群內(nèi)訪問,通過?app:backend
標(biāo)簽,來查找對(duì)應(yīng)pod,所以 pod 的label必須包含app:backend
apiVersion:?v1
kind:?Service
metadata:
??name:?backend
spec:
??type:?ClusterIP
??ports:
????-?name:?backend-http
??????port:?8080
??????targetPort:?8080
??????protocol:?TCP
??selector:
????#?根據(jù)標(biāo)簽查找?pod
????app:?backend
前端服務(wù)配置
frontend-dp.yaml
前端鏡像是一個(gè) nginx
apiVersion:?apps/v1
kind:?Deployment
metadata:
??name:??frontend
spec:
??selector:
????matchLabels:
??????app:??frontend
??replicas:?1
??template:
????metadata:
??????labels:
????????#?service?會(huì)根據(jù)此標(biāo)簽來查找此pod
????????app:??frontend
????????version:?latest
????spec:
??????containers:
????????-?name:?frontend
??????????image:?"dweizhao/frontend:latest"
??????????imagePullPolicy:?Always
frontend-svc.yaml
apiVersion:?v1
kind:?Service
metadata:
??name:?frontend
spec:
??type:?ClusterIP
??ports:
????-?name:?frontend-http
??????port:?80
??????targetPort:?80
??????protocol:?TCP
??selector:
????#?根據(jù)標(biāo)簽查找?pod
????app:?frontend
Ingress配置
Ingress相當(dāng)于nginx的作用,匹配url轉(zhuǎn)發(fā)請(qǐng)求至Service
注意:k8s不同的版本,對(duì)應(yīng)的Ingress apiVerson有點(diǎn)細(xì)微差別,所以要找到對(duì)應(yīng)k8s版本的Ingress,我們的k8s版本為
v1.25.13
apiVersion:?networking.k8s.io/v1
kind:?Ingress
metadata:
??name:?test-ingress
spec:
??ingressClassName:?nginx
??rules:
????-?host:?k8sdemo.com
??????http:
????????paths:
????????-?path:?/
??????????pathType:?Prefix
??????????backend:
????????????service:
??????????????name:?frontend
??????????????port:
????????????????number:?80
????????#backend開頭的?url,轉(zhuǎn)發(fā)到后端服務(wù)?,否則都轉(zhuǎn)發(fā)到前端服務(wù)??????????????
????????-?path:?/backend
??????????pathType:?Prefix
??????????backend:
????????????service:
??????????????name:?backend
??????????????port:
????????????????number:?8080
k8s部署
部署使用kubectl進(jìn)行部署,如果沒有請(qǐng)先安裝,安裝完成以后,把以上yaml文件保存至本地
創(chuàng)建命名空間
kubectl?create?namespace?k8sdemo
部署
部署系統(tǒng)至k8sdemo
空間下
kubectl?create?namespace?k8sdemo?&&?kubectl?apply?-f?backend-dp.yaml?-f?backend-svc.yaml?-f?frontend-dp.yaml?-f?frontend-svc.yaml?-f?ingress.yaml?-n?k8sdemo
查看系統(tǒng)狀態(tài)
#查看pod?啟動(dòng)狀態(tài)
kubectl?get?pods?-n?k8sdemo
#?查看服務(wù)狀態(tài)
kubectl?get?svc?-n?k8sdemo
#?查看Ingress狀態(tài)
kubectl?get?ingress?-n?k8sdemo
host 解析
在 hosts 文件中,對(duì)k8sdemo.com
域名映射,映射到k8s 的任意node節(jié)點(diǎn)上即可,假設(shè)IP為172.18.2.53
,配置如下
172.18.2.53?k8sdemo.com
測(cè)試
在瀏覽器訪問k8sdemo.com
,如果出現(xiàn)以下結(jié)果則部署成功,可以看到正確請(qǐng)求到數(shù)據(jù),這個(gè)數(shù)據(jù)為backend
提供
文章來源:http://www.zghlxwxcb.cn/news/detail-820210.html
總結(jié)
以上我們只是簡(jiǎn)單演示了下,如何在 k8s 中快速部署一個(gè)前后端應(yīng)用,讓你對(duì)在 k8s 操作有一個(gè)快速認(rèn)識(shí),但是此應(yīng)用如果要在生產(chǎn)使用還要在做些配置,比如探針配置,因?yàn)楹蠖朔?wù)的啟動(dòng),可能是個(gè)假啟動(dòng),必須要配置探針探活之后,才能讓 service訪問,否則導(dǎo)致請(qǐng)求異常,同時(shí)應(yīng)用有些文件如果需要持久化,還需要配置存儲(chǔ)卷等操作文章來源地址http://www.zghlxwxcb.cn/news/detail-820210.html
到了這里,關(guān)于七八分鐘快速用k8s部署springboot前后端分離項(xiàng)目的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!