1. 程式人生 > 實用技巧 >Dapr微服務應用開發系列1:環境配置

Dapr微服務應用開發系列1:環境配置

題記:上篇Dapr系列文章簡要介紹了Dapr,這篇來談一下開發和執行環境配置


本機開發環境配置

安裝Docker

為了方便進行Dapr開發,最好(其實不一定必須)首先在本機(開發機器)上安裝Docker。安裝方式可以參考Docker的官方文件:https://docs.docker.com/install/。

如果你是Windows平臺,那麼需要選擇Linux容器模式。對於我這樣的Windows 10使用者而言,個人建議最好的方式就是把Windows 10升級到2004,並啟用WSL2,然後啟用Docker Desktop WSL 2 backend[1]。這種方式可以獲得很好的使用者體驗和效能。

安裝CLI

通過如下指令碼在不同平臺安裝最新的CLI(Dapr命令列工具):

  • Windows:

powershell -Command "iwr -useb https://raw.githubusercontent.com/dapr/cli/master/install/install.ps1 | iex"

預設會安裝到 c:\dapr 目錄

  • Linux:

wget -q https://raw.githubusercontent.com/dapr/cli/master/install/install.sh -O - | /bin/bash

預設會安裝到 /usr/local/bin 目錄

  • MacOS

curl -fsSL https://raw.githubusercontent.com/dapr/cli/master/install/install.sh | /bin/bash

預設會安裝到 /usr/local/bin 目錄

或者通過Homebrew來安裝:brew install dapr/tap/dapr-cli

如果你想手動安裝CLI,比如希望安裝不同版本或者安裝到不同目錄。那麼可以從這裡(https://github.com/dapr/cli/releases)直接下載平臺對應的二進位制檔案並解壓到適合的地方,並在PATH中註冊這個目錄。

安裝Runtime

在本機安裝Dapr執行時分為兩種模式,一種是完整模式,一種是簡易模式:

  • 完整模式:需要Docker環境,執行 dapr init ,會自動下載Dapr的執行時 daprd ,並在Docker中啟動3個容器:
    • dapr_placement:Image為“daprio/dapr”,用於Dapr的Actor應用的註冊
    • dapr_zipkin:Image為“openzipkin/zipkin”,用於分散式跟蹤的處理
    • dapr_redis:Image為“redis”,用於狀態儲存和釋出訂閱處理
  • 簡易模式:不需要Docker環境,執行 dapr init --slim,同樣會自動下載Dapr的執行時,並下載placement服務的二進位制檔案。

兩種模式下,有些配置也有所不同:

  • 完整模式:會在Linux/MacOS的 $HOME/.dapr/components 目錄或Windows的 %USERPROFILE%\.dapr\components 目錄下面建立3個預設元件配置檔案:pubsub.yaml使用redis容器作為釋出訂閱元件、statestore.yaml使用redis容器作為狀態儲存元件和zipkin.yaml把分散式跟蹤的資訊匯出到zipkin容器;並新增Linux/MacOS的 $HOME/.dapr/config.yaml 或Windows的 %USERPROFILE%\.dapr\config.yaml 的預設配置檔案,重點配置了分散式跟蹤的取樣率為1。
  • 簡易模式:雖然會建立預設 components 目錄,但是不會建立預設元件配置檔案。後續執行的時候,你需要自行建立預設元件配置檔案或者指定服務的自定義元件配置檔案。

容器開發環境配置

如果不想在本機安裝Dapr的CLI和Runtime,還可以利用Visual Studio Code Remote - Containers[2]的強大功能來實現開發環境的容器化。

Dapr為各種支援的開發語言預設提供了開發容器,方便你把任何專案轉換為Dapr應用。

大致步驟如下:

  1. 建立專案,(可選)引用對應語言的Dapr SDK
  2. 在VS Code中開啟專案的工作區(Workspace)
  3. 在命令面板中輸入“Remote-Containers: Add Development Container Configuration Files...”
  4. 在選擇開發容器的時候,輸入“dapr”來進行查詢,選擇對應的語言版本,比如“Dapr with C#”
  5. VS Code會自動給你的專案新增相關的Dockerfile和其他配置檔案(比如“.devcontainer”資料夾)
  6. VS Code檢測到.devcontainer資料夾後,會提示你是否要使用容器模式開啟
  7. 通過容器模式開啟後,會自動構建專案工作區的容器映象,同時還會額外啟動用於容器開發的placement和zipkin容器例項(名稱為:dapr_placement_dapr-dev-container和dapr_zipkin_dapr-dev-container)

開發容器如下圖所示:

使用這種開發容器帶來的好處就是:整個Dapr開發的依賴環境可以通過Dockerfile來自動配置完成。

測試與生產環境配置

雖然Dapr可以執行到任意託管環境,不過目前最自然的選擇還是釋出到 Kubernetes 叢集當中。

首先,你需要配置好一個Kubernetes叢集,建議使用Azure Kubernetes Service(AKS),基本可以一鍵建立好叢集[3]

在做好kubectl和Kubernetes叢集的連線之後,就可以開始安裝Dapr了。

如果是配置測試環境,那麼只需要執行如下命令就可以完成:

dapr init -k

如果要配置生產環境,那麼建議使用helm3來進行安裝:

helm repo add dapr https://daprio.azurecr.io/helm/v1/repo
helm repo update
kubectl create namespace dapr-system
helm install dapr dapr/dapr --namespace dapr-system

Dapr安裝到Kubernetes叢集之後,會啟動如下Pod:

  • dapr-operator: 用來管理Dapr元件的更新和Dapr的kubernetes服務端點(比如狀態儲存、釋出訂閱等)
  • dapr-sidecar-injector: 用來把Dapr執行時注入到被標記了的應用Pod裡面(即把Dapr執行時作為sidecar容器注入到Pod當中)
  • dapr-placement: 管理Dapr的Actor應用註冊
  • dapr-sentry: 管理服務之間的mTLS,並作為一個證書CA

總結

至此,Dapr的開發、測試和生產環境就配置完成了,接下來就是進入到開發階段了。

當然,如果你需要解除安裝Dapr環境的話,只需要執行如下命令:

dapr uninstall //解除安裝本機開發環境
dapr uninstall --all //解除安裝本機開發環境包括Redis和Zipkin容器例項
dapr uninstall --kubernetes //解除安裝Kubernetes中的測試環境
helm uninstall dapr -n dapr-system //解除安裝Kubernetes中的生產環境


參考資料

[1] Docker Desktop WSL 2 backend: https://docs.docker.com/docker-for-windows/wsl/

[2] Visual Studio Code Remote - Containers: https://code.visualstudio.com/docs/remote/containers

[3] Quickstart: Deploy an Azure Kubernetes Service cluster using the Azure CLI: https://docs.microsoft.com/en-us/azure/aks/kubernetes-walkthrough