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

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

1、eShopOnDapr源程式碼及概述

  • 源程式碼地址:

    //github.com/dotnet-architecture/eShopOnDapr

  • 方案體系結構如下圖:

    image

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

    image

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

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

3、eShopOnDapr部署

  • 下載eShopOnDapr源程式碼,目錄中有deploy文件夾,參考k8s部署模板文件

    image

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

    image

  • 方法1:命令行,進入到eShopOnDapr文件夾里,執行命令部署:

      部署:sudo helm install --set hostName=eshop.local.com myeshop .
      卸載:sudo helm uninstall myeshop
      指定路徑卸載:sudo helm uninstall myeshop /eShopOnDapr
    

    image

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

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

    image

  • 部署成功如下圖:

    image

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

    image

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

      sudo kubectl get ingress -n eshopondapr
    

    image

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

  • 通過地址訪問eshop://eshop.local.com/ ,發現報錯

    image

  • 點擊LOGIN,可以跳到登錄介面,且可以登錄;證明identity服務是可以訪問的

    image

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

    image
    image

  • 部署文件模板已上傳到地址://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
    

    image
    image

    備註:訪問本地的 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相關的鏡像