安裝Dapr的CLI
在安裝Dapr runtime之前需要先安裝Dapr的CLI。有兩個原因,第一,如果你以后不是用Helm來安裝Dapr的話,需要用Dapr CLI來執行dapr init。第二,即使你不用Dapr CLI,而是用Helm來安裝,以后查看Dapr系統狀態的時候還是要用到Dapr CLI,比如查看Runtime的狀態(dapr status -k),查看Components狀態(dapr components -k),查看Configurations狀態(dapr configurations -k),甚至啟動Dashboard的時候還是要執行(dapr dashboard -k)。你可以在很多OS上安裝Dapr CLI,比如Windows,Linux,Mac OS,我用的是Windows10系統,可以選擇在Windows上直接裝,也可以在WSL(Windows Subsystem for Linux)上裝,這里選擇在WSL上安裝(沒有WSL的話在windows商店里選一個免費的Linux裝上。我選的是Ubuntu)。參考官方文檔How-To: Install Dapr CLI,在Ubuntu里執行:
$ wget -q https://raw.githubusercontent.com/dapr/cli/master/install/install.sh -O - | /bin/bash
Your system is linux_amd64
Installing Dapr CLI...
Getting the latest Dapr CLI...
Installing v0.11.0 Dapr CLI...
Downloading https://github.com/dapr/cli/releases/download/v0.11.0/dapr_linux_amd64.tar.gz ...
[sudo] password for ubuntu:
dapr installed into /usr/local/bin successfully.
CLI version: 0.11.0
Runtime version: n/a
To get started with Dapr, please visit https://docs.dapr.io/getting-started/
安裝完成。看看版本號:
$ dapr --version
CLI version: 0.11.0
Runtime version: n/a
CLI是0.11.0版的,Runtime因為還沒裝,所以顯示n/a。
因為接下來要安裝1.0.0-rc.2的Runtime,1.x相對於0.x版有了重大的改進(比如多Instance模式),為了版本的統一性(低版本的CLI操作高版本的Runtime可能會出問題),把CLI升級到v1.0.0-rc.2版的吧。
curl -LO https://github.com/dapr/cli/releases/download/v1.0.0-rc.2/dapr_linux_amd64.tar.gz
tar -xzf dapr_linux_amd64.tar.gz
sudo cp dapr /usr/local/bin/dapr
再看一下版本:
$ dapr --version
CLI version: 1.0.0-rc.2
Runtime version: n/a
CLI安裝完畢。接下來安裝Runtime。
安裝Dapr的Runtime
這里有兩種選擇,一個是Standalone mode,一個是Kubernetes mode。我們兩個都試一下。
安裝Docker Engine
Dapr Runtime安裝的前提條件是要先安裝Docker。不然安裝Dapr的時候會報"could not connect to Docker. Docker may not be installed or running"的錯。這里參考Docker的官方文檔Install Docker Engine on Ubuntu來安裝Docker Engine。
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
安裝完成。把docker的service啟動:
$ sudo service docker start
看看service是否啟動:
$ service docker status
* Docker is running
OK,Docker Engine安裝完成。
安裝Standalone版的Dapr Runtime
用dapr init來安裝單機版,可以指定版本號。目前最新的是1.0.0-rc.2。
$ dapr init --runtime-version=1.0.0-rc.2
⌛ Making the jump to hyperspace...
←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑↗ Downloading binaries and setting up components...
Dapr runtime installed to /root/.dapr/bin, you may run the following to add it to your path if you want to run daprd directly:
export PATH=$PATH:/root/.dapr/bin
→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←↑→↓←✅ Downloaded binaries and completed components set up.
ℹ️ daprd binary has been installed to /root/.dapr/bin.
ℹ️ dapr_placement container is running.
ℹ️ dapr_redis container is running.
ℹ️ dapr_zipkin container is running.
ℹ️ Use `docker ps` to check running containers.
✅ Success! Dapr is up and running. To get started, go here: https://aka.ms/dapr-getting-started
export PATH=$PATH:/root/.dapr/bin
完成。看看都裝了什么東西。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
293b479ed26c openzipkin/zipkin "start-zipkin" 5 minutes ago Up 4 minutes (healthy) 9410/tcp, 0.0.0.0:9411->9411/tcp dapr_zipkin
a07696221fd2 daprio/dapr "./placement" 5 minutes ago Up 4 minutes 0.0.0.0:50005->50005/tcp dapr_placement
c475c415332b redis "docker-entrypoint.s…" 6 minutes ago Up 6 minutes 0.0.0.0:6379->6379/tcp dapr_redis
跑起來三個Container。一個dapr_zipkin,一個dapr_placement,一個dapr_redis。
看看版本號:
$ dapr --version
CLI version: 1.0.0-rc.2
Runtime version: 1.0.0-rc.2
至此單機版的Dapr Runtime安裝完成。
dapr list一下看看,什么也沒有。因為我們還沒有啟動App。
安裝Kubernetes版的Dapr Runtime
安裝之前需要先有Kubernetes環境,minikube,AWS托管的EKS,Azure托管的AKS,GCP托管的GKE等等。這里選擇在本地安裝minikube。
參考官方文檔
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
$ sudo install minikube-linux-amd64 /usr/local/bin/minikube
看看版本:
$ minikube version
minikube version: v1.16.0
commit: 9f1e482427589ff8451c4723b6ba53bb9742fbb1
先執行
$ sudo usermod -aG docker $USER && newgrp docker
不然minikube啟動的時候會報錯。然后啟動minikube環境:
$ minikube start
😄 minikube v1.16.0 on Ubuntu 20.04
✨ Automatically selected the docker driver
👍 Starting control plane node minikube in cluster minikube
🚜 Pulling base image ...
💾 Downloading Kubernetes v1.20.0 preload ...
> preloaded-images-k8s-v8-v1....: 491.00 MiB / 491.00 MiB 100.00% 2.56 MiB
🔥 Creating docker container (CPUs=2, Memory=3100MB) ...
🐳 Preparing Kubernetes v1.20.0 on Docker 20.10.0 ...
▪ Generating certificates and keys ...
▪ Booting up control plane ...
▪ Configuring RBAC rules ...
🔎 Verifying Kubernetes components...
🌟 Enabled addons: storage-provisioner, default-storageclass
💡 kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'
🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
看看docker ps的結果:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cc47e6e56d32 gcr.io/k8s-minikube/kicbase:v0.0.15-snapshot4 "/usr/local/bin/entr…" 4 minutes ago Up 4 minutes 127.0.0.1:49156->22/tcp, 127.0.0.1:49155->2376/tcp, 127.0.0.1:49154->5000/tcp, 127.0.0.1:49153->8443/tcp minikube
fedf3508c0f4 daprio/dapr:1.0.0-rc.2 "./placement" 43 minutes ago Up 43 minutes 0.0.0.0:50005->50005/tcp dapr_placement
c52f4a72abc4 redis "docker-entrypoint.s…" 44 minutes ago Up 44 minutes 0.0.0.0:6379->6379/tcp dapr_redis
af7b8dd7dcf3 openzipkin/zipkin "start-zipkin" 44 minutes ago Up 44 minutes (healthy) 9410/tcp, 0.0.0.0:9411->9411/tcp dapr_zipkin
多了個minikube的Container。
接下來安裝kubectl。參考官方文檔:
$ curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
$ chmod +x ./kubectl
$ sudo mv ./kubectl /usr/local/bin/kubectl
看看版本:
$ kubectl version --client
Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.1", GitCommit:"c4d752765b3bbac2237bf87cf0b1c2e307844666", GitTreeState:"clean", BuildDate:"2020-12-18T12:09:25Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}
安裝Dapr Runtime可以用Dapr CLI也可以用Helm。我們選擇用Helm來安裝。參考官方文檔:
$ curl https://baltocdn.com/helm/signing.asc | sudo apt-key add -
$ sudo apt-get install apt-transport-https --yes
$ echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
$ sudo apt-get update
$ sudo apt-get install helm
看一下版本:
$ helm version
version.BuildInfo{Version:"v3.4.2", GitCommit:"23dd3af5e19a02d4f4baa5b2f242645a1a3af629", GitTreeState:"clean", GoVersion:"go1.14.13"}
終於可以安裝Dapr了。這里指定目前最新的版本號1.0.0-rc.2。
$ helm repo add dapr https://dapr.github.io/helm-charts/
$ helm repo update
$ kubectl create namespace dapr-system
$ helm install dapr dapr/dapr --version 1.0.0-rc.2 --namespace dapr-system
看一下版本號:
$ dapr status -k
NAME NAMESPACE HEALTHY STATUS REPLICAS VERSION AGE CREATED
dapr-dashboard dapr-system True Running 1 0.5.0 1m 2020-12-26 02:22.08
dapr-sidecar-injector dapr-system True Running 1 1.0.0-rc.2 1m 2020-12-26 02:22.08
dapr-sentry dapr-system True Running 1 1.0.0-rc.2 1m 2020-12-26 02:22.08
dapr-operator dapr-system True Running 1 1.0.0-rc.2 1m 2020-12-26 02:22.08
dapr-placement-server dapr-system True Running 1 1.0.0-rc.2 1m 2020-12-26 02:22.08
我們看看啟動了什么Pod:
$ kubectl get pods -n dapr-system
NAME READY STATUS RESTARTS AGE
dapr-dashboard-6f749469dd-z7hzx 1/1 Running 0 3m45s
dapr-operator-699cd79686-nndhd 1/1 Running 0 3m45s
dapr-placement-server-0 1/1 Running 0 3m45s
dapr-sentry-7c4fb54fb7-xsx5q 1/1 Running 0 3m45s
dapr-sidecar-injector-6bdbc588fc-tzpm4 1/1 Running 0 3m45s
啟動了5個Pod,dapr-dashboard,dapr-operator,dapr-placement,dapr-sentry,dapr-sidecar-injector。
其中dapr-dashboard負責顯示Dapr Dashboard,dapr-operator負責管理Dapr Component的更新和Kubernetes Service Endpoint(State stores,pub/sub等),dapr-sidecar-injector負責將Dapr的sidecar注入帶Dapr注釋的Pod(如果App的Deploy里有dapr.io/app-id, dapr.io/app-port之類的annotation,就會被注入Dapr sidecar。這時你會發現Pod里有兩個Container)。dapr-placement用於Actor,創建將Actor實例映射到Pod的映射表。dapr-sentry負責管理服務之間的mTLS並充當證書頒發機構。
把Dapr Dashboard起來看看:
$ dapr dashboard -k
效果和"kubectl port-forward svc/dapr-dashboard 8080:8080 -n dapr-system"是一樣的。
在瀏覽器里輸入http://localhost:8080。
恭喜,Dapr Runtime終於安裝完成了!
本章就到這里。下一章我們來部署一個Dapr的微服務的例子。