騰訊雲EKS 上部署 eshopondapr
- 2022 年 7 月 12 日
- 筆記
- Dapr, Kubernetes
騰訊雲容器服務(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 側重於 Dapr,但體系結構也進行了簡化。
-
Blazor WebAssembly 上運行的單頁應用程式將用戶請求發送到 API 網關。
-
API 網關從前端客戶端抽象出後端核心微服務。 它是使用 Envoy(一個高性能的開放源程式碼服務代理)實現的。 Envoy 將傳入請求路由到後端微服務。 大多數請求都是簡單的 CRUD 操作(例如,從目錄中獲取品牌列表),通過直接調用後端微服務進行處理。
-
其他請求在邏輯上更加複雜,需要多個微服務調用協同工作。 對於這些情況,eShopOnDapr 實現了聚合器微服務,用於在完成操作所需的那些微服務之間編排工作流。
-
核心後端微服務實現了電子商務商店所需的功能。 每個微服務都是獨立存在的。 按照廣泛接受的域分解模式,每個微服務都隔離一個特定的業務功能:
- 購物籃服務管理客戶的購物籃體驗。
- 目錄服務管理可供銷售的產品項。
- 標識服務管理身份驗證和標識。
- 訂單處理服務處理下達訂單和管理訂單的所有方面。
- 付款服務處理客戶的付款。
-
每個微服務都遵循最佳做法,維護其自己的持久性存儲。 應用程式不共享單個數據存儲。
-
最後,事件匯流排包裝 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 的特性聲明:
保存後,到該文件夾deploy\k8s\helm下 運行以下命令:
helm install --set hostName=eshopondapr.weyhd.com myeshop .
過了一會兒,您應該能夠在 //eshopondapr.weyhd.com/status 訪問eShopOnDapr健康UI。
當所有微服務都正常運行時,可以導航到 //eshopondapr.weyhd.com/ 以查看 eShopOnDapr UI。