操作指南:将 Pod 卷挂载到 Dapr sidecar
Dapr sidecar 可以配置为挂载应用程序 Pod 上的任何 Kubernetes 卷。这些卷可以通过 daprd
(sidecar) 容器以只读或读写模式访问。如果配置了一个卷进行挂载但在 Pod 中不存在,Dapr 会记录一个警告并忽略该卷。
有关不同类型卷的更多信息,请查看 Kubernetes 文档。
配置
您可以在部署的 YAML 文件中设置以下注解:
注解 | 描述 |
---|---|
dapr.io/volume-mounts |
用于只读卷挂载 |
dapr.io/volume-mounts-rw |
用于读写卷挂载 |
这些注解是以逗号分隔的 volume-name:path/in/container
对。请确保相应的卷在 Pod 规范中已定义。
在官方容器镜像中,Dapr 以用户 ID (UID) 65532
运行。请确保挂载卷内的文件夹和文件对用户 65532
可读写。
虽然您可以在 Dapr sidecar 容器内的任何文件夹中挂载卷,但为了避免冲突并确保未来的兼容性,建议将所有挂载点放置在以下位置之一或其子文件夹中:
位置 | 描述 |
---|---|
/mnt |
推荐用于存储 Dapr sidecar 进程可读写的持久数据的卷。 |
/tmp |
推荐用于存储临时数据的卷,例如临时磁盘。 |
示例
基本部署资源示例
在下面的 Deployment 资源示例中:
my-volume1
在 sidecar 容器内以只读模式挂载到/mnt/sample1
my-volume2
在 sidecar 容器内以只读模式挂载到/mnt/sample2
my-volume3
在 sidecar 容器内以读写模式挂载到/tmp/sample3
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
namespace: default
labels:
app: myapp
spec:
replicas: 1
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
annotations:
dapr.io/enabled: "true"
dapr.io/app-id: "myapp"
dapr.io/app-port: "8000"
dapr.io/volume-mounts: "my-volume1:/mnt/sample1,my-volume2:/mnt/sample2"
dapr.io/volume-mounts-rw: "my-volume3:/tmp/sample3"
spec:
volumes:
- name: my-volume1
hostPath:
path: /sample
- name: my-volume2
persistentVolumeClaim:
claimName: pv-sample
- name: my-volume3
emptyDir: {}
...
使用本地文件 secret 存储自定义 secret 存储
由于任何类型的 Kubernetes 卷都可以附加到 sidecar,您可以使用本地文件 secret 存储从各种地方读取 secret。例如,如果您有一个运行在 10.201.202.203
的网络文件共享 (NFS) 服务器,secret 存储在 /secrets/stage/secrets.json
,您可以将其用作 secret 存储。
-
配置应用程序 pod 以挂载 NFS 并将其附加到 Dapr sidecar。
apiVersion: apps/v1 kind: Deployment metadata: name: myapp ... spec: ... template: ... annotations: dapr.io/enabled: "true" dapr.io/app-id: "myapp" dapr.io/app-port: "8000" dapr.io/volume-mounts: "nfs-secrets-vol:/mnt/secrets" spec: volumes: - name: nfs-secrets-vol nfs: server: 10.201.202.203 path: /secrets/stage ...
-
将本地文件 secret 存储组件指向附加的文件。
apiVersion: dapr.io/v1alpha1 kind: Component metadata: name: local-secret-store spec: type: secretstores.local.file version: v1 metadata: - name: secretsFile value: /mnt/secrets/secrets.json
-
使用 secret。
GET http://localhost:<daprPort>/v1.0/secrets/local-secret-store/my-secret
相关链接
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.