騰訊雲EKS 上部署 eshopondapr

2022-07-12 12:00:59

騰訊雲容器服務(Tencent Kubernetes Engine,TKE)基於原生 kubernetes 提供以容器為核心的、高度可延伸的高效能容器管理服務。騰訊雲容器服務完全相容原生 kubernetes API ,擴充套件了騰訊雲的雲硬碟、負載均衡等 kubernetes 外掛,為容器化的應用提供高效部署、資源排程、服務發現和動態伸縮等一系列完整功能,解決使用者開發、測試及運維過程的環境一致性問題,提高了大規模容器叢集管理的便捷性,幫助使用者降低成本,提高效率。容器服務提供免費使用,涉及的其他雲產品另外單獨計費。

對於中小規模的應用來說採用TKE的 彈性叢集是比較經濟的一個方案,彈性容器服務(Elastic Kubernetes Service,EKS)是騰訊雲容器服務推出的無須使用者購買節點即可部署工作負載的服務模式。彈性容器服務 EKS 完全相容原生 Kubernetes,支援使用原生方式購買及管理資源,按照容器真實使用的資源量計費。彈性容器服務 EKS 還擴充套件支援騰訊雲的儲存及網路等產品,同時確保使用者容器的安全隔離,開箱即用。

這篇文章主要向你介紹如何在EKS上面部署基於Dapr的應用程式,我們選擇了Dapr 參考應用程式eshopondapr 作為範例。

幾年前,Microsoft 與技術領先的社群專家合作釋出了一本受歡迎的指導書,標題為適用於容器化 .NET 應用程式的 .NET 微服務。這本書深入探討了構建分散式應用程式的原則、模式和最佳做法。 其中包括一個功能齊全的微服務參考應用程式,展示了體系結構概念。 名為 eShopOnContainers 的應用程式託管了一個電子商務店面,該店面銷售各種商品,包括服裝和咖啡杯。 該應用程式在 .NET 中構建,是跨平臺的,可以在 Linux 或 Windows 容器中執行。隨著Dapr的釋出,eShop 的一個更新版本。 它就是 eShopOnDapr, 同時還配套了一本電子書:面向 .NET 開發人員的 Dapr。 此更新通過整合 Dapr 構建基塊來改進早期 eShopOnContainers 應用程式。 下圖 顯示了新的解決方案體系結構:

eShopOnDapr reference application architecture.



雖然 eShopOnDapr 側重於 Dapr,但體系結構也進行了簡化。

  1. Blazor WebAssembly 上執行的單頁應用程式將使用者請求傳送到 API 閘道器。

  2. API 閘道器從前端使用者端抽象出後端核心微服務。 它是使用 Envoy(一個高效能的開放原始碼服務代理)實現的。 Envoy 將傳入請求路由到後端微服務。 大多數請求都是簡單的 CRUD 操作(例如,從目錄中獲取品牌列表),通過直接呼叫後端微服務進行處理。

  3. 其他請求在邏輯上更加複雜,需要多個微服務呼叫協同工作。 對於這些情況,eShopOnDapr 實現了聚合器微服務,用於在完成操作所需的那些微服務之間編排工作流。

  4. 核心後端微服務實現了電子商務商店所需的功能。 每個微服務都是獨立存在的。 按照廣泛接受的域分解模式,每個微服務都隔離一個特定的業務功能:

    • 購物籃服務管理客戶的購物籃體驗。
    • 目錄服務管理可供銷售的產品項。
    • 標識服務管理身份驗證和標識。
    • 訂單處理服務處理下達訂單和管理訂單的所有方面。
    • 付款服務處理客戶的付款。
  5. 每個微服務都遵循最佳做法,維護其自己的永續性儲存。 應用程式不共用單個資料儲存。

  6. 最後,事件匯流排包裝 Dapr 釋出/訂閱元件。 它實現了跨微服務非同步釋出/訂閱訊息傳送。 開發人員可以插入任何 Dapr 支援的訊息代理元件。

接下來我們參照  Run eShopOnDapr on an external Kubernetes cluster 在EKS 上部署eshopondapr 。當然您可以在任何外部 Kubernetes 叢集上執行 eShopOnDapr,例如 Azure Kubernetes Service 或 騰訊雲 EKS。以下步驟介紹如何將 eShopOnDapr 部署到 騰訊雲EKS 叢集:

1、建立一個EKS 叢集,這部分可以參考騰訊雲的檔案 建立EKS 叢集

2、設定以連線到新叢集,這部分可以參考騰訊雲的檔案 連線EKS 叢集

3、安裝NGINX入口控制器,這部分可以參考騰訊雲的檔案 Nginx 型別 Ingress。 這裡要注意的一點是 tke官方檔案,使用annotation的方式,在metadata.annotation中宣告kubernetes.io/ingress.class: "nginx",來指定您所使用的nginx ingress範例。ehsopondapr的 helm 包裡面宣告ingress範例,是使用的spec.ingressClassName這個欄位進行的,這裡後面要進行調整。

4、開通EKS 叢集存取外網。預設的彈性容器服務(Elastic Kubernetes Service,EKS)存取不了外網,支援通過設定 NAT 閘道器路由表 來實現叢集內服務存取外網,具體檔案參見 通過 NAT 閘道器存取外網。如果沒有開通存取外網,在EKS 中拉取不了mcr.microsoft.com/azure-sql-edge:latest。 這個repo 不是 docker hub,騰訊雲的TKE 預設對docker hub做了內部加速。

5、將 Dapr 部署到叢集(有關詳細資訊,請參閱將 Dapr 安裝到 Kubernetes 叢集中操作方法):

6、獲取叢集負載均衡器的公共終端節點的 IP 地址

kubectl get services nginx-ingress-nginx-controller -n kube-system -o=jsonpath='{.status.loadBalancer.ingress[0].ip}'

7、設定 DNS  :eshopondapr.weyhd.com ,使用該別名來存取 Kubernetes 叢集, 這一步可以設定你自己的域名 。

8、eShopOnDapr 包括一個 Helm 圖表,以便輕鬆部署到 Kubernetes 叢集。這裡我們要修改一下 Ingress 的特性宣告:

image

儲存後,到該資料夾deploy\k8s\helm下 執行以下命令:

helm install --set hostName=eshopondapr.weyhd.com myeshop .

過了一會兒,您應該能夠在 http://eshopondapr.weyhd.com/status 存取eShopOnDapr健康UI。

當所有微服務都正常執行時,可以導航到 http://eshopondapr.weyhd.com/ 以檢視 eShopOnDapr UI。

image