Dapr學習(4)之eShopOnDapr部署(Rancher2.63&k3s)

2022-08-09 06:00:16

本篇主要講述一下github上基於Dapr實現的商城demo在(K8s or K3s)環境中的部署實踐,本文環境基於k3s&rancher2.6.3

1、eShopOnDapr原始碼及概述

  • 原始碼地址:

    https://github.com/dotnet-architecture/eShopOnDapr
  • 方案體系結構如下圖:

    說明:
      1. 前後端分離專案,前端Blazor專案,系統入口,傳送api請求到apigateway
      2. API 閘道器從前端使用者端抽象出後端核心微服務,為後端呼叫總入口。 它是使用 Envoy(一個高效能的開放原始碼服務代理)實現的。 Envoy 將傳入請求路由到後端微服務。 大多數請求都是簡單的 CRUD 操作(例如,從目錄中獲取品牌列表),通過直接呼叫後端微服務進行處理。通過轉換uri請求地址,通過Dapr的邊車就行通訊
      3. 核心後端微服務:購物車,商品管理,訂單管理,支付管理
      4. 事件匯流排包裝 Dapr 釋出/訂閱元件。 它實現了跨微服務非同步釋出/訂閱訊息傳送。
    
  • ApiGateway Envoy重寫uri截圖如下:

2、環境準備(k3s&rancher2.6.3)

關於Dapr安裝見前面文章:https://www.cnblogs.com/kunwn/p/16271944.html

3、eShopOnDapr部署

  • 下載eShopOnDapr原始碼,目錄中有deploy資料夾,參考k8s部署模板檔案

  • 拷貝資料夾到k3s任意節點上(安裝有helm)

  • 方法1:命令列,進入到eShopOnDapr資料夾裡,執行命令部署:

      部署:sudo helm install --set hostName=eshop.local.com myeshop .
      解除安裝:sudo helm uninstall myeshop
      指定路徑解除安裝:sudo helm uninstall myeshop /eShopOnDapr
    

  • 方法2:命令列,本地chart壓縮包,執行命令部署:

      壓縮包:sudo helm package eShopOnDapr
      部署:sudo helm install eshop eshopondapr-1.0.0.tgz #注意:壓縮包名稱改為小寫,否則會報錯
      解除安裝:sudo helm uninstall eshop eshopondapr-1.0.0.tgz
    

  • 部署成功如下圖:

  • 通過rancher介面檢視部署狀態,等待一段時間,看所有的pod都已建立完畢

  • 我們部署的域名為:eshop.local.com myeshop,我們通過修改hosts檔案,指定地址;指定地址:192.168.231.133 eshop.local.com myeshop

      sudo kubectl get ingress -n eshopondapr
    

  • 因為k3s預設的ingress controller使用的traefik,所以我們需要變動template模板檔案都設定為traefik;我本地部署叢集不能安裝nginx ingress controller,不知何故,應該是有衝突的;我想如果是k3s管理的k8s叢集,安裝nginx ingress controller應該是沒問題的;資源有限,只能traefik了,況且如果解除安裝了traefik,就會導致rancher ui不能使用,慎卸

  • 通過地址存取eshop:http://eshop.local.com/ ,發現報錯

  • 點選LOGIN,可以跳到登入介面,且可以登入;證明identity服務是可以存取的

  • 只有通過apigateway呼叫後端各個微服務的api是報錯的,一直沒有解決,有traefik設定經驗的大佬可以給與指點;如果通過nodeport暴露catalog api服務,是可以調通的,應該是還gateway的設定上出了問題


  • 部署檔案模板已上傳到地址:https://gitee.com/xujk-27400861/eshopondapr-k3s-template

4、traefik dashboard設定

  • port-forward 直接埠對映到本地存取,生產環境推薦

      sudo kubectl port-forward $(sudo kubectl get pods --selector "app.kubernetes.io/name=traefik" --output=name -n kube-system) 9000:9000 -n kube-system
    


    備註:存取原生的 localhost:9000/dashboard/ 即可,dashboard 後邊的 /一定要有,否則會報 404;且只能虛擬機器器內部(k3s節點)檢視,不能使用IP地址存取

5、K8s刪除無用映象

sudo crictl images | awk '{print $3}' | xargs crictl rmi #參考命令
sudo crictl images | grep 'eshopdapr' | awk '{print $3}' | xargs sudo crictl rmi # 刪除eshopdapr相關的映象