k8s部署微服務項目實戰--react前端+springboot/python后端-第三節 前端react項目部署到k8s環境中


本節我們將上一節創建的簡單的react項目demo_fe進行部署,部署的步驟如下:

1. 將demo_fe項目進行編譯,在node.js中進入demo_fe項目路徑下,使用npm run build命令打包,最后會在demo_fe路徑下生成build文件夾(注意可以自行修改編譯后生成的文件夾)。

2. 將build文件夾上傳至任意一台安裝了docker的linux機器上,筆者直接上傳到了k8s的master節點上(方便后續生成image后打包傳輸)。

3. 最重要的這一步就是創建一個Dockerfile, 筆者的Dockerfile內容如下:

 

   概括來說,這個Dockerfile主要做的就是首先下載nginx包,然后配置代理(您可以視情況是否需要自己配置yum源代理,筆者因為使用的是公司機器,需要配置代理)下載nginx需要的包,安裝nginx並且進行配置,主要就是上傳本地的nginx.conf配置文件到nginx中,其中指明了訪問路徑,如下配置:

  

  最后將上傳上來的build文件夾拷貝到/usr/local/nginx/html/webgui/smartocr路徑下並指明暴露的端口,最后定義container啟動時候的命令即將nginx運行起來。

  注意:當前的路徑下至少需要有build文件夾、conf文件夾(里面存放nginx.conf)以及Dockerfile.

4. 運行"docker build -t basemanage_fe ."即可產生basemanage_fe這個image。

5. 這一步是體力活兒,需要將basemanage_fe這個image傳到k8s的所有node節點上:

  首先使用docker save -o basemanage_fe.tar basemanage_fe這個命令將image以tar包的形式保存到本地路徑中

  然后scp傳輸到其他node上,在其他node上運行docker load -i basemanage_fe.tar這個命令將image加載到該node中。

  這樣就保證了image在所有node節點上都有

  注意:這是當前的做法,更專業的方式是將image上傳到本地倉庫或者遠程倉庫中,然后在部署文件中指明從倉庫中來獲取,就不需要每次都要把image同步到所有node節點了。

6. 准備自己的部署文件即yaml文件,筆者列舉自己的deployment_fe.yaml和service_fe.yaml如下:

  deployment_fe.yaml

  

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ocr-basemanage
spec:
  replicas: 2
  selector:
    matchLabels:
      app: basemanage
  template:
    metadata:
      labels:
        app: basemanage
    spec:
      containers:
      - name: basemanage-fe
        image: basemanage_fe
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 7070
      dnsPolicy: ClusterFirst

 

service_fe.yaml

apiVersion: v1
kind: Service
metadata:
  name: service-basemanage
spec:
  type: NodePort
  ports:
  - port: 7070
    protocol: TCP
    targetPort: 7070
    nodePort: 31002
  selector:
    app: basemanage

7. 至此,就可以使用kubectl apply -f xxx.yaml將你的微服務啟動起來,通過k8s的dashboard能看到兩個副本都運行起來了。

 

 8. 現在就能通過http://nodeIP:31002/webgui/smartocr/index.html來訪問到GUI界面了,前端部署完成。

 

But, 這里要延伸出兩個問題來:

第一:大部分的前端訪問應該是通過域名的形式訪問,即http://domainName/webgui/smartocr/index.html來訪問。

第二:前端微服務需要訪問后端微服務,如果是通過nodeIP+nodePort的方式訪問也沒有問題,但是,如果是按照serviceName:servicePort的方式訪問(而此種方式正是微服務部署所提倡的),當前的解決方案一定是訪問不通的。

上面兩個問題我會在下一節中詳細說明,並給出我認為比較合理的解決方案----使用ingress。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM