k8s部署springboot實現(xiàn)前后端分離項目
前置依賴
k8s集群,如果沒有安裝,請先安裝
kubectl ,客戶端部署需要依賴
應用鏡像構(gòu)建
應用鏡像構(gòu)建不用自己去執(zhí)行,相關鏡像已經(jīng)推送到docker hub 倉庫,如果要了解過程和細節(jié),可以看一下,否則直接跳到k8syaml文件配置章節(jié)
Java應用鏡像構(gòu)建
代碼地址:https://github.com/dongweizhao/backend
Java應用打包
調(diào)用sh package.sh會執(zhí)行mvn的package命令,進行打包
編寫Dockerfile
從target目錄復制可執(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
前端應用鏡像構(gòu)建
代碼地址:https://github.com/dongweizhao/frontend
前端項目結(jié)構(gòu)如下

采用百度低代碼平臺amis進行開發(fā)
編寫Dockerfile
拷貝前端工程dist目錄至/frontend,并進行目錄授權
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文件配置
以下是我們部署的服務在k8s 中路由示意圖

后端服務配置
backend-dp.yaml
由于我們服務是無狀態(tài)服務,使用Deployment進行部署,Deployment擁有更加靈活強大的升級、回滾功能,并且支持滾動更新
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend
spec:
selector:
matchLabels:
app: backend
replicas: 1
template:
metadata:
labels:
# service 會根據(jù)此標簽來查找此pod
app: backend
version: latest
spec:
containers:
- name: backend
image: "dweizhao/backend:latest"
imagePullPolicy: Always
backend-svc.yaml
Service相當于Spring cloud中Ribbon的作用,提供了服務發(fā)現(xiàn)和負載均衡的功能,而不用關心具體服務實例有多少個,在 k8s的服務實例就是Pod,這里我們使用ClusterIP類型,因為是通過Ingress在集群內(nèi)訪問,通過 app:backend標簽,來查找對應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ù)標簽查找 pod
app: backend
前端服務配置
frontend-dp.yaml
前端鏡像是一個 nginx
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
spec:
selector:
matchLabels:
app: frontend
replicas: 1
template:
metadata:
labels:
# service 會根據(jù)此標簽來查找此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ù)標簽查找 pod
app: frontend
Ingress配置
Ingress相當于nginx的作用,匹配url轉(zhuǎn)發(fā)請求至Service
注意:k8s不同的版本,對應的Ingress apiVerson有點細微差別,所以要找到對應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ā)到后端服務 ,否則都轉(zhuǎn)發(fā)到前端服務
- path: /backend
pathType: Prefix
backend:
service:
name: backend
port:
number: 8080
k8s部署
部署使用kubectl進行部署,如果沒有請先安裝,安裝完成以后,把以上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 # 查看服務狀態(tài) kubectl get svc -n k8sdemo # 查看Ingress狀態(tài) kubectl get ingress -n k8sdemo



host 解析
在 hosts 文件中,對k8sdemo.com域名映射,映射到k8s 的任意node節(jié)點上即可,假設IP為172.18.2.53,配置如下
172.18.2.53 k8sdemo.com
測試
在瀏覽器訪問k8sdemo.com,如果出現(xiàn)以下結(jié)果則部署成功,可以看到正確請求到數(shù)據(jù),這個數(shù)據(jù)為backend提供

總結(jié)
以上我們只是簡單演示了下,如何在 k8s 中快速部署一個前后端應用,讓你對在 k8s 操作有一個快速認識,但是此應用如果要在生產(chǎn)使用還要在做些配置,比如探針配置,因為后端服務的啟動,可能是個假啟動,必須要配置探針探活之后,才能讓 service訪問,否則導致請求異常,同時應用有些文件如果需要持久化,還需要配置存儲卷等操作
到此這篇關于速用k8s部署springboot前后端分離項目的文章就介紹到這了,更多相關k8s部署springboot內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java定時任務schedule和scheduleAtFixedRate的異同
本文主要介紹了Java定時任務schedule和scheduleAtFixedRate的異同,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-05-05
Dubbo?retries?超時重試機制的問題原因分析及解決方案
這篇文章主要介紹了Dubbo?retries?超時重試機制的問題,解決方案是通過修改dubbo服務提供方,將timeout超時設為20000ms或者設置retries=“0”,禁用超時重試機制,感興趣的朋友跟隨小編一起看看吧2022-04-04
Spring+MyBatis多數(shù)據(jù)源配置實現(xiàn)示例
本篇文章主要介紹了Spring+MyBatis多數(shù)據(jù)源配置實現(xiàn)示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01
java模擬http的Get/Post請求,并設置ip與port代理的方法
下面小編就為大家?guī)硪黄猨ava模擬http的Get/Post請求,并設置ip與port代理的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02

