要使用状态和发布/订阅功能,您需要配置两个组件:
您可以在以下链接找到支持的组件列表:
本教程将介绍如何使用 Redis 进行配置。
Dapr 可以使用任何 Redis 实例,无论是:
如果您已经有一个 Redis 实例,请直接跳到配置部分。
在自托管环境中,Dapr CLI 会在初始化过程中自动安装 Redis。您可以直接进行下一步。
您可以使用 Helm 在 Kubernetes 集群中创建 Redis 实例。在开始之前,请确保已安装 Helm v3。
在集群中安装 Redis:
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm install redis bitnami/redis --set image.tag=6.2
Dapr 的发布/订阅功能至少需要 Redis 版本 5。对于状态存储,您可以使用更低版本。
如果您在本地环境中工作,可以在 install
命令中添加 --set architecture=standalone
,以创建单副本 Redis 设置,从而节省内存和资源。
运行 kubectl get pods
查看集群中运行的 Redis 容器:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
redis-master-0 1/1 Running 0 69s
redis-replicas-0 1/1 Running 0 69s
redis-replicas-1 1/1 Running 0 22s
在 Kubernetes 中:
redis-master.default.svc.cluster.local:6379
redis
会自动创建。确保您拥有 Azure 订阅。
xxxxxx.redis.cache.windows.net:6380
。导航到 设置 下的 访问密钥。
创建一个 Kubernetes secret 来存储您的 Redis 密码:
kubectl create secret generic redis --from-literal=redis-password=*********
从 AWS Redis 部署一个 Redis 实例。
记下 AWS 门户中的 Redis 主机名以备后用。
创建一个 Kubernetes secret 来存储您的 Redis 密码:
kubectl create secret generic redis --from-literal=redis-password=*********
从 GCP Cloud MemoryStore 部署一个 MemoryStore 实例。
记下 GCP 门户中的 Redis 主机名以备后用。
创建一个 Kubernetes secret 来存储您的 Redis 密码:
kubectl create secret generic redis --from-literal=redis-password=*********
Dapr 使用组件定义来管理构建块功能。以下步骤将指导您如何将上面创建的资源连接到 Dapr,以用于状态和发布/订阅。
在自托管模式下,组件文件会自动创建在:
%USERPROFILE%\.dapr\components\
$HOME/.dapr/components
由于 Kubernetes 文件是通过 kubectl
应用的,因此可以在任何目录中创建。
创建一个名为 redis-state.yaml
的文件,并粘贴以下内容:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: statestore
namespace: default
spec:
type: state.redis
version: v1
metadata:
- name: redisHost
value: localhost:6379
- name: redisPassword
secretKeyRef:
name: redis
key: redis-password
# 取消注释以下内容以通过 TLS 连接到 redis 缓存实例(例如 - Azure Redis 缓存)
# - name: enableTLS
# value: true
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: statestore
namespace: default
spec:
type: state.redis
version: v1
metadata:
- name: redisHost
value: <REPLACE WITH HOSTNAME FROM ABOVE - for Redis on Kubernetes it is redis-master.default.svc.cluster.local:6379>
- name: redisPassword
secretKeyRef:
name: redis
key: redis-password
# 取消注释以下内容以通过 TLS 连接到 redis 缓存实例(例如 - Azure Redis 缓存)
# - name: enableTLS
# value: true
请注意,上述代码示例使用了您在设置集群时创建的 Kubernetes secret。
创建一个名为 redis-pubsub.yaml
的文件,并粘贴以下内容:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: pubsub
namespace: default
spec:
type: pubsub.redis
version: v1
metadata:
- name: redisHost
value: localhost:6379
- name: redisPassword
secretKeyRef:
name: redis
key: redis-password
# 取消注释以下内容以通过 TLS 连接到 redis 缓存实例(例如 - Azure Redis 缓存)
# - name: enableTLS
# value: true
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: pubsub
namespace: default
spec:
type: pubsub.redis
version: v1
metadata:
- name: redisHost
value: <REPLACE WITH HOSTNAME FROM ABOVE - for Redis on Kubernetes it is redis-master.default.svc.cluster.local:6379>
- name: redisPassword
secretKeyRef:
name: redis
key: redis-password
# 取消注释以下内容以通过 TLS 连接到 redis 缓存实例(例如 - Azure Redis 缓存)
# - name: enableTLS
# value: true
请注意,上述代码示例使用了您在设置集群时创建的 Kubernetes secret。
仅用于开发目的,您可以跳过创建 Kubernetes secret 并将密码直接放入 Dapr 组件文件中:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: statestore
namespace: default
spec:
type: state.redis
version: v1
metadata:
- name: redisHost
value: <HOST>
- name: redisPassword
value: <PASSWORD>
# 取消注释以下内容以通过 TLS 连接到 redis 缓存实例(例如 - Azure Redis 缓存)
# - name: enableTLS
# value: true
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: pubsub
namespace: default
spec:
type: pubsub.redis
version: v1
metadata:
- name: redisHost
value: <HOST>
- name: redisPassword
value: <PASSWORD>
# 取消注释以下内容以通过 TLS 连接到 redis 缓存实例(例如 - Azure Redis 缓存)
# - name: enableTLS
# value: true
当您运行 dapr init
时,Dapr 会在您的本地机器上创建一个默认的 redis pubsub.yaml
。通过打开您的组件目录进行验证:
%UserProfile%\.dapr\components\pubsub.yaml
~/.dapr/components/pubsub.yaml
对于新的组件文件:
components
目录。--resources-path
标志为 dapr run
命令提供路径如果您在精简模式(无 Docker)下初始化了 Dapr,您需要手动创建默认目录,或者始终使用 --resources-path
指定组件目录。
运行 kubectl apply -f <FILENAME>
以应用状态和发布/订阅文件:
kubectl apply -f redis-state.yaml
kubectl apply -f redis-pubsub.yaml