在 k8s 以外的分布式环境中使用 Dapr
在Dapr 文檔和實踐案例中多是推薦采用k8s, 其實我目前也是在k8s 上操作的,有公有云TKE,AKS,還有私有云的Rancher ,它并沒有傳聞中的那么難,而且我認為它非常容易上手。不過,我還是有很多人不愿意使用k8s 。那么在虛擬機場景下如何使用Dapr呢?當然也有虛擬機部署的案例,比如2021年第一屆DaprConf 上分享的Dapr case study: Man Group:https://blog.dapr.io/posts/2021/10/05/join-us-for-daprcon-october-19th-20th-2021/?
如果我們脫離K8s 的 虛擬機環境下會碰到什么問題?
你需要安裝 Docker 來運行 Dapr
使用Invoke API進行名稱解析時無法在其他服務器上找到 Dapr 應用程序
除了這兩個問題,應該沒有什么其他問題,因為根據 Dapr 的配置文件,它使用了外部服務器或者服務。
我們先來看一下第一個問題,在沒有 Docker 的情況下使用 Dapr ,官方文檔里已經給我們了答案:入門指南: 不使用 Docker 在自托管模式下運行 Dapr。
Dapr CLI 提供了使用 slim init 初始化 Dapr 的選項,而無需默認創建依賴于 Docker 的開發環境。要使用 slim init 初始化 Dapr ,請在安裝 Dapr CLI 后使用以下命令:
dapr init –slim
在此模式下安裝了兩個不同的二進制文件 daprd 和 placement。在此模式下,不會為狀態管理或發布/訂閱安裝任何默認組件,例如Redis 和 Zipkin 不會安裝,但是如果需要的話會單獨設置,所以沒有問題。
那么第二個問題是 名稱解析 ,我們還是來看一下官方文檔里的 使用 服務調用概述-mDNS 輪詢負載均衡:https://docs.dapr.io/zh-hans/developing-applications/building-blocks/service-invocation/service-invocation-overview/,Dapr 使用 mDNS 協議提供輪詢負載均衡的服務調用請求,例如用于本地或多個聯網的物理機器。但是mDNS只能在可以使用多播的環境中使用,這在云環境下通常是不可用的,在云環境下還有一個選擇,官方文檔里有 :詳細介紹了關于 HashiCorp Consul 服務發現組件的信息,它既可以用于虛擬機也可以用于k8s 環境下,文章開頭提到的案例就是用Consul 。
說到這里,如果你是在用Azure,在Azure上有 Managed HashiCorp Cosul ServiceAzure,簡稱HCS, 客戶可以通過Azure Marketplace將 HCS直接配置到他們的 Azure 環境中,而 HashiCorp 則負責服務的維護和運營。使用 HCS 允許用戶在云、混合和本地場景中使用各種環境(包括虛擬機和 Kubernetes)。所以我嘗試了一下,但是我使用的賬號用不了,需要額外付費:
AWS 上也有,具體可以看? Consul on Amazon ECS 0.3 Adds Extended Configuration。
上面這兩個問題我們都解決了,總結一下:
Docker 對于 Dapr 來說并不是必需的。
如果你的環境支持使用多播,則可以使用 mDNS 在多臺服務器上運行 Dapr。
虛擬機環境下推薦使用Consul 作為名稱解析服務。
針對這個問題 陳一獅同學很早就寫了一篇文章, Dapr + .NET Core實戰(十四)虛擬機集群部署 mDNS + Consul 。他還特別錄制一個系列的視頻課程放在騰訊課堂里。
我們再回到開篇時提到的那個使用Consul 部署的案例 ,他們開發了一個 Dapr 的輕量級生命周期管理組件:https://github.com/man-group/dapr-sidekick-dotnet,Sample 目錄下有Consul的演示示例:https://github.com/man-group/dapr-sidekick-dotnet/tree/main/samples/AspNetCore,也可以看視頻:
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的在 k8s 以外的分布式环境中使用 Dapr的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Avalonia跨平台入门第十九篇之语音
- 下一篇: C# 中是否支持 Like 和 ln 条