騰訊云容器服務(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 .
過了一會兒,您應該能夠在 http://eshopondapr.weyhd.com/status 訪問eShopOnDapr健康UI。
當所有微服務都正常運行時,可以導航到 http://eshopondapr.weyhd.com/ 以查看 eShopOnDapr UI。