k8s部署springboot實(shí)現(xiàn)前后端分離項(xiàng)目
前置依賴
k8s集群,如果沒有安裝,請先安裝
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
會執(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)如下
采用百度低代碼平臺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)大的升級、回滾功能,并且支持滾動更新
apiVersion: apps/v1 kind: Deployment metadata: name: backend spec: selector: matchLabels: app: backend replicas: 1 template: metadata: labels: # service 會根據(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í)例有多少個,在 k8s的服務(wù)實(shí)例就是Pod,這里我們使用ClusterIP
類型,因?yàn)槭峭ㄟ^Ingress在集群內(nèi)訪問,通過 app:backend
標(biāo)簽,來查找對應(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
前端鏡像是一個 nginx
apiVersion: apps/v1 kind: Deployment metadata: name: frontend spec: selector: matchLabels: app: frontend replicas: 1 template: metadata: labels: # service 會根據(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ā)請求至Service
注意:k8s不同的版本,對應(yīng)的Ingress apiVerson有點(diǎn)細(xì)微差別,所以要找到對應(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)行部署,如果沒有請先安裝,安裝完成以后,把以上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 啟動狀態(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 文件中,對k8sdemo.com
域名映射,映射到k8s 的任意node節(jié)點(diǎn)上即可,假設(shè)IP為172.18.2.53
,配置如下
172.18.2.53 k8sdemo.com
測試
在瀏覽器訪問k8sdemo.com
,如果出現(xiàn)以下結(jié)果則部署成功,可以看到正確請求到數(shù)據(jù),這個數(shù)據(jù)為backend
提供
總結(jié)
以上我們只是簡單演示了下,如何在 k8s 中快速部署一個前后端應(yīng)用,讓你對在 k8s 操作有一個快速認(rèn)識,但是此應(yīng)用如果要在生產(chǎn)使用還要在做些配置,比如探針配置,因?yàn)楹蠖朔?wù)的啟動,可能是個假啟動,必須要配置探針探活之后,才能讓 service訪問,否則導(dǎo)致請求異常,同時應(yīng)用有些文件如果需要持久化,還需要配置存儲卷等操作
到此這篇關(guān)于速用k8s部署springboot前后端分離項(xiàng)目的文章就介紹到這了,更多相關(guān)k8s部署springboot內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot啟動之SpringApplication初始化詳解
這篇文章主要介紹了SpringBoot啟動之SpringApplication初始化詳解,首先初始化資源加載器,默認(rèn)為null;斷言判斷主要資源類不能為null,否則報(bào)錯,需要的朋友可以參考下2024-01-01解決elastic-job-ui在使用druid作為數(shù)據(jù)庫連接池時作業(yè)維度報(bào)錯問題
這篇文章主要介紹了解決elastic-job-ui在使用druid作為數(shù)據(jù)庫連接池時作業(yè)維度報(bào)錯問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04如何使用Spring Cloud Feign日志查看請求響應(yīng)
這篇文章主要介紹了如何使用Spring Cloud Feign日志查看請求響應(yīng),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02SpringBoot整合Mybatis與thymleft實(shí)現(xiàn)增刪改查功能詳解
MybatisPlus是國產(chǎn)的第三方插件,?它封裝了許多常用的CURDapi,免去了我們寫mapper.xml的重復(fù)勞動。本文將整合MybatisPlus實(shí)現(xiàn)增刪改查功能,感興趣的可以了解一下2022-12-12JAVA中數(shù)組從小到大排序的2種方法實(shí)例
JAVA中在運(yùn)用數(shù)組進(jìn)行排序功能時一般有多種解決方案,下面這篇文章主要給大家介紹了關(guān)于JAVA中數(shù)組從小到大排序的2種方法,文中都給出了詳細(xì)的實(shí)例代碼,需要的朋友可以參考下2023-03-03java String、Json對象與byte數(shù)組轉(zhuǎn)換方式
這篇文章主要介紹了java String、Json對象與byte數(shù)組轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07Druid連接池未關(guān)閉導(dǎo)致內(nèi)存泄漏問題
這篇文章主要介紹了Druid連接池未關(guān)閉導(dǎo)致內(nèi)存泄漏問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12MyBatis連接數(shù)據(jù)庫配置的基本步驟和機(jī)制
MyBatis 是一個流行的持久層框架,它通過使用XML或注解的方式將SQL語句、存儲過程和Java方法進(jìn)行綁定,從而避免了手寫大量的JDBC代碼和手動設(shè)置參數(shù)與結(jié)果集,本文給大家介紹了MyBatis連接數(shù)據(jù)庫配置的基本步驟和機(jī)制,需要的朋友可以參考下2024-05-05深入淺析drools中Fact的equality?modes
這篇文章主要介紹了drools中Fact的equality?modes的相關(guān)知識,本文通過圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05