让我们来检查一下Dapr和Kubernetes的集群配置

首先

Dapr有两种模式,一种是在本地环境中运行的自托管模式,另一种是与Kubernetes集群一起运行的Kubernetes模式。要确认这个Kubernetes模式的运行情况,可以使用Dapr官方的Hello Kubernetes快速入门示例。
https://github.com/dapr/quickstarts/tree/master/tutorials/hello-kubernetes

在这篇文章中,我们打算通过运行这个快速入门的环境并确认部署的Pod和Service,来探究在Kubernetes集群中引入Dapr时的配置。

可以学习的事物 de

    • Minikubeを使ったHello Kubernetesクイックスタートの動かし方

 

    • KubernetesクラスタにDaprを導入するための設定方法の概要

 

    Daprを導入したときのKubernetesクラスタの構成

※之前发布过的有关Dapr的文章

    • マイクロサービスを簡単に連携させるランタイム「Dapr」について

 

    Daprのクイックスタートでサービス呼出しのイメージを掴む

环境构建

本文使用 Dapr 的 Hello Kubernetes 快速入门,来了解 Dapr 在 Kubernetes 集群中的部署方式。本次将使用 minikube 作为 Kubernetes 环境。要在 minikube 上运行快速入门,需要按照以下步骤进行操作。

Step1
下の公式サイトに書かれている方法で、minikubeをインストールします。
https://minikube.sigs.k8s.io/docs/start/
私の環境(Linux X86-64)では、下のコマンドでインストールできました。

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

并且,一并安装kubectl。

https://kubernetes.io/ja/docs/tasks/tools/install-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

第二步
在步骤2.1中,我们将进行Redis存储的设置,但我们将设置适用于Kubernetes的Redis。根据下方红框中的Kubernetes标签中的说明,按照其内容搭建环境。

需要安装Helm才能执行设置。我从Helm项目(https://helm.sh/ja/docs/intro/install/)安装了二进制发布版本。
实际上,我使用以下命令安装了Helm(当前最新的v3.8.2)。

curl -LO https://get.helm.sh/helm-v3.8.2-linux-amd64.tar.gz
tar -xvf helm-v3.8.2-linux-amd64.tar.gz
sudo mv linux-amd64/helm /usr/local/bin/helm

Step7
minikubeを使用している場合、typeをloadbalancerに設定しても、EXTERNAL-IPがpendingと表示され、IPが割り当てられません。minikube tunnelを利用すると、IPが割り当てられるようになります。

minikube tunnel

在Kubernetes集群中配置Dapr的设置

KubernetesクラスタにDaprを導入するには、マニフェストにDaprのアノテーションを追加します。Hello Kubernetesでは、次のようにデプロイメントにアノテーションが追加されています。

      annotations:
        dapr.io/enabled: "true"
        dapr.io/app-id: "nodeapp"
        dapr.io/app-port: "3000"
      annotations:
        dapr.io/enabled: "true"
        dapr.io/app-id: "pythonapp"

これを見ると、Daprを組み込むためにenabledとapp-idのアノテーションを記述する必要があることが分かります。逆に言えば、これらを最低限記述すればKubernetesクラスタでDaprを動かすことができるので、ハードルとしては低いと感じます。
アノテーションは他にも種類があり、Daprが使用する通信プロトコルなどを指定できます。設定できる項目は、下のDaprのドキュメントを参照してください。
https://docs.dapr.io/reference/arguments-annotations-overview/

全体成员构成

你好,Kubernetes集群由下面这张图所示的结构构建而成。接下来,我想通过使用命令来逐步确认图中的构成要素。

image.png

应用程序的容器

個々のアプリケーションに対応して生成されるポッドを確認します。大きく分けて、nodeappポッドとpythonappポッドとredisポッド群の3種類が動作していることが分かります。

$ kubectl get pods
NAME                         READY   STATUS    RESTARTS       AGE
nodeapp-59d545f986-8tvbd     2/2     Running   14 (89m ago)   5d
pythonapp-79b69b7494-cvsgw   2/2     Running   13 (89m ago)   5d
redis-master-0               1/1     Running   5 (92m ago)    5d4h
redis-replicas-0             1/1     Running   7 (92m ago)    5d4h
redis-replicas-1             1/1     Running   7 (92m ago)    5d4h
redis-replicas-2             1/1     Running   7 (92m ago)    5d4h

当在Kubernetes的清单中添加Dapr的注释时,将添加一个名为daprd的容器到Pod中。这个daprd容器作为应用程序的sidecar工作,并提供Dapr的功能。
实际上,在nodeapp Pod中可以看到包含与应用程序相对应的node容器和daprd容器。

$ kubectl get pod nodeapp-59d545f986-8tvbd -o jsonpath="{.spec.containers[*].name}"
node daprd

Daprサイドカーに対応するサービスはClusterIP=Noneとなっており、ヘッドレスサービスとして実行されています。

$ kubectl get svc
NAME             TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                               AGE
kubernetes       ClusterIP      10.96.0.1       <none>        443/TCP                               9d
nodeapp          LoadBalancer   10.111.176.78   <pending>     80:30684/TCP                          9d
nodeapp-dapr     ClusterIP      None            <none>        80/TCP,50001/TCP,50002/TCP,9090/TCP   9d
pythonapp-dapr   ClusterIP      None            <none>        80/TCP,50001/TCP,50002/TCP,9090/TCP   9d
redis-headless   ClusterIP      None            <none>        6379/TCP                              9d
redis-master     ClusterIP      10.98.43.62     <none>        6379/TCP                              9d
redis-replicas   ClusterIP      10.97.209.171   <none>        6379/TCP

daprdコンテナに対しては、下のようにIPが割り当てられています。

$ kubectl run -it busybox --restart=Never --rm --image=busybox sh
/ # nslookup nodeapp-dapr
Server:		10.96.0.10
Address:	10.96.0.10:53

Name:	nodeapp-dapr.default.svc.cluster.local
Address: 172.17.0.2

Dapr的服务

在将Dapr配置到Kubernetes中时,以下服务将被添加到Kubernetes集群中。

Dapr Operator:Daprコンポーネントの更新を管理

Dapr Sidecar Injector:ポッドにDaprサイドカーを導入するサービス

Dapr Placement Server:DaprのActor機能を利用する時のマップを作成するサービス

Dapr Sentry:サービス間のmTLS通信を管理するサービス

Dapr Dashboard:Dapr Dashboardを提供するサービス

Hello Kubernetesの環境がデプロイされているとき、上記のサービスが動作(HEALTHY=True)していることが分かります。

$ dapr status -k
  NAME                   NAMESPACE    HEALTHY  STATUS   REPLICAS  VERSION  AGE  CREATED              
  dapr-sentry            dapr-system  True     Running  1         1.6.0    6d   2022-03-26 11:42.45  
  dapr-dashboard         dapr-system  True     Running  1         0.9.0    6d   2022-03-26 11:42.45  
  dapr-sidecar-injector  dapr-system  True     Running  1         1.6.0    6d   2022-03-26 11:42.45  
  dapr-placement-server  dapr-system  True     Running  1         1.6.0    6d   2022-03-26 11:42.47  
  dapr-operator          dapr-system  True     Running  1         1.6.0    6d   2022-03-26 11:42.45

これらのサービスは、Kubernetesクラスタのdapr-system名前空間においてデプロイメントまたはステートフルセットとして動作しています(Dapr Placement Serverのみステートフルセット)。

$ kubectl get deploy --namespace dapr-system
NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
dapr-dashboard          1/1     1            1           8d
dapr-operator           1/1     1            1           8d
dapr-sentry             1/1     1            1           8d
dapr-sidecar-injector   1/1     1            1           8d
$ kubectl get sts --namespace dapr-system
NAME                    READY   AGE
dapr-placement-server   1/1     8d

可以看到与每个服务相对应的Pod也同时运行着。

$ kubectl get pods --namespace dapr-system
NAME                                     READY   STATUS    RESTARTS       AGE
dapr-dashboard-5b7dd7b657-w2stl          1/1     Running   7 (72m ago)    6d10h
dapr-operator-d78cf9fc7-7z44z            1/1     Running   13 (68m ago)   6d10h
dapr-placement-server-0                  1/1     Running   7 (72m ago)    6d10h
dapr-sentry-5874cb7d67-mhvcw             1/1     Running   11 (72m ago)   6d10h
dapr-sidecar-injector-6fb45cc48c-kxp8g   1/1     Running   11 (72m ago)   6d10h

最后

KubernetesクラスタにDaprを導入するときの設定と動作を、Hello Kubernetesのクイックスタートを題材に確認してきました。Kubernetesのマニフェストにアノテーションを追加すれば、Daprの機能が利用できるようになるので、導入のハードルとしては低いかなと思います。
Daprに関しては継続的に記事を書いていきたいと思っています。これまでに書いた記事を下に載せていますので、参考になれば嬉しいです。

    • マイクロサービスを簡単に連携させるランタイム「Dapr」について

 

    Daprのクイックスタートでサービス呼出しのイメージを掴む

请参考以下链接。

    • GitHub – Dapr quickstarts Hello Kubernetes

 

    • https://github.com/dapr/quickstarts/tree/master/tutorials/hello-kubernetes

Dapr Docs – Overview of Dapr on Kubernetes
https://docs.dapr.io/operations/hosting/kubernetes/kubernetes-overview/

Dapr Docs – Deploy Dapr on a Kubernetes cluster
https://docs.dapr.io/operations/hosting/kubernetes/kubernetes-deploy/

Dapr Docs – Dapr sidecar (daprd) overview
https://docs.dapr.io/concepts/dapr-services/sidecar/

Dapr Docs – Dapr arguments and annotations for daprd, CLI, and Kubernetes
https://docs.dapr.io/reference/arguments-annotations-overview/

minikube start
https://minikube.sigs.k8s.io/docs/start/

广告
将在 10 秒后关闭
bannerAds