This is the multi-page printable view of this section. Click here to print.
多应用运行
1 - Multi-App Run 概述
Note
适用于 Kubernetes 的 Multi-App Run 目前为预览功能。假设您想在本地运行多个应用程序以进行联合测试,类似于生产环境的场景。Multi-App Run 允许您同时启动和停止一组应用程序,可以选择:
- 使用进程在本地/自托管环境中运行,或
- 通过构建容器镜像并部署到 Kubernetes 集群
- 您可以使用本地 Kubernetes 集群或部署到云
Multi-App Run 模板文件描述了如何启动多个应用程序,就像您执行了多个单独的 CLI run 命令一样。默认情况下,此模板文件名为 dapr.yaml。
Multi-App Run 模板文件
当您执行 dapr run -f . 时,它会启动当前目录中存在的多应用模板文件(名为 dapr.yaml)以运行所有应用程序。
您可以使用首选名称来命名模板文件,而不是使用默认名称。例如 dapr run -f ./<your-preferred-file-name>.yaml。
以下示例包括一些您可以为应用程序自定义的模板属性。在该示例中,您可以同时启动 2 个应用程序,其应用 ID 为 processor 和 emit-metrics。
version: 1
apps:
- appID: processor
appDirPath: ../apps/processor/
appPort: 9081
daprHTTPPort: 3510
command: ["go","run", "app.go"]
- appID: emit-metrics
appDirPath: ../apps/emit-metrics/
daprHTTPPort: 3511
env:
DAPR_HOST_ADD: localhost
command: ["go","run", "app.go"]
有关更深入的示例和模板属性的解释,请参阅 多应用模板。
资源和配置文件的位置
在使用 Multi-App Run 时,您可以选择放置应用程序资源和配置文件的位置。
指向一个文件位置(使用约定)
您可以在 ~/.dapr 根目录下设置所有应用程序资源和配置。当所有应用程序共享相同的资源路径时(例如在本地机器上测试时),这很有帮助。
为每个应用程序指定单独的文件位置(使用约定)
使用 Multi-App Run 时,每个应用程序目录可以有一个 .dapr 文件夹,其中包含 config.yaml 文件和 resources 目录。否则,如果应用程序目录中不存在 .dapr 目录,则使用默认的 ~/.dapr/resources/ 和 ~/.dapr/config.yaml 位置。
如果您决定在每个应用程序目录中添加 .dapr 目录,其中包含 /resources 目录和 config.yaml 文件,则可以为每个应用程序指定不同的资源路径。此方法通过使用默认的 ~/.dapr 保持约定。
指向单独的位置(自定义)
您还可以将每个应用目录的 .dapr 目录命名为 .dapr 以外的名称,例如 webapp 或 backend。如果您想明确资源或应用程序目录路径,这很有帮助。
日志
运行模板为每个应用程序及其关联的 daprd 进程提供两个日志目标字段:
appLogDestination:此字段配置应用程序的日志目标。可能的值为console、file和fileAndConsole。默认值为fileAndConsole,其中应用程序日志默认写入控制台和文件。daprdLogDestination:此字段配置daprd进程的日志目标。可能的值为console、file和fileAndConsole。默认值为file,其中daprd日志默认写入文件。
日志文件格式
应用程序和 daprd 的日志捕获在单独的文件中。这些日志文件在应用程序目录(模板中的 appDirPath)下的 .dapr/logs 目录下自动创建。这些日志文件名遵循以下模式:
<appID>_app_<timestamp>.log(app日志的文件名格式)<appID>_daprd_<timestamp>.log(daprd日志的文件名格式)
即使您决定将资源文件夹重命名为 .dapr 以外的名称,日志文件也只会写入 .dapr/logs 文件夹(在应用程序目录中创建)。
观看演示
Multi-App Run 模板文件
当您执行 dapr run -k -f . 或 dapr run -k -f dapr.yaml 时,dapr.yaml Multi-App Run 模板文件中定义的应用程序将在 Kubernetes 默认命名空间中启动。
注意: 目前,Multi-App Run 模板只能在默认 Kubernetes 命名空间中启动应用程序。
Kubernetes 的必要默认服务和部署定义会在 .dapr/deploy 文件夹中为 dapr.yaml 模板中的每个应用程序生成。
如果在 dapr.yaml 模板中为某个应用程序将 createService 字段设置为 true,则会在该应用程序的 .dapr/deploy 文件夹中生成 service.yaml 文件。
否则,只为设置了 containerImage 字段的每个应用程序生成 deployment.yaml 文件。
service.yaml 和 deployment.yaml 文件用于在 Kubernetes 中的 default 命名空间中部署应用程序。此功能专门针对在 Kubernetes 中的开发/测试环境中运行多个应用程序。
您可以使用任何首选名称来命名模板文件,而不是使用默认名称。例如:
dapr run -k -f ./<your-preferred-file-name>.yaml
以下示例包括一些您可以为应用程序自定义的模板属性。在该示例中,您可以同时启动 2 个应用程序,其应用 ID 为 nodeapp 和 pythonapp。
version: 1
common:
apps:
- appID: nodeapp
appDirPath: ./nodeapp/
appPort: 3000
containerImage: ghcr.io/dapr/samples/hello-k8s-node:latest
containerImagePullPolicy: Always
createService: true
env:
APP_PORT: 3000
- appID: pythonapp
appDirPath: ./pythonapp/
containerImage: ghcr.io/dapr/samples/hello-k8s-python:latest
注意:
- 如果未指定
containerImage字段,dapr run -k -f会产生错误。- containerImagePullPolicy 表示始终为此应用程序下载新的容器镜像。
createService字段在 Kubernetes 中定义一个基本服务(ClusterIP 或 LoadBalancer),该服务针对模板中指定的--app-port。如果未指定createService,则应用程序无法从集群外部访问。
有关更深入的示例和模板属性的解释,请参阅 多应用模板。
日志
运行模板为每个应用程序及其关联的 daprd 进程提供两个日志目标字段:
appLogDestination:此字段配置应用程序的日志目标。可能的值为console、file和fileAndConsole。默认值为fileAndConsole,其中应用程序日志默认写入控制台和文件。daprdLogDestination:此字段配置daprd进程的日志目标。可能的值为console、file和fileAndConsole。默认值为file,其中daprd日志默认写入文件。
日志文件格式
应用程序和 daprd 的日志捕获在单独的文件中。这些日志文件在应用程序目录(模板中的 appDirPath)下的 .dapr/logs 目录下自动创建。这些日志文件名遵循以下模式:
<appID>_app_<timestamp>.log(app日志的文件名格式)<appID>_daprd_<timestamp>.log(daprd日志的文件名格式)
即使您决定将资源文件夹重命名为 .dapr 以外的名称,日志文件也只会写入 .dapr/logs 文件夹(在应用程序目录中创建)。
观看演示
后续步骤
2 - 操作指南:使用多应用运行模板文件
注意
Kubernetes 的多应用运行目前为预览功能。多应用运行模板文件是一个 YAML 文件,可用于一次运行多个应用程序。在本指南中,您将学习如何:
- 使用多应用模板
- 查看已启动的应用程序
- 停止多应用模板
- 构建多应用模板文件结构
使用多应用模板
您可以通过以下两种方式之一使用多应用模板文件:
通过提供目录路径执行
当您提供目录路径时,CLI 将尝试在目录中查找名为 dapr.yaml(默认名称)的多应用运行模板文件。如果未找到该文件,CLI 将返回错误。
执行以下 CLI 命令以读取多应用运行模板文件,默认名称为 dapr.yaml:
# 如果给定目录路径,模板文件需要默认命名为 `dapr.yaml`
dapr run -f <dir_path>
dapr run -f <dir_path> -k
通过提供文件路径执行
如果多应用运行模板文件的名称不是 dapr.yaml,那么您可以向命令提供相对或绝对文件路径:
dapr run -f ./path/to/<your-preferred-file-name>.yaml
dapr run -f ./path/to/<your-preferred-file-name>.yaml -k
查看已启动的应用程序
多应用模板运行后,您可以使用以下命令查看已启动的应用程序:
dapr list
dapr list -k
停止多应用模板
随时使用以下任一命令停止多应用运行模板:
# 如果给定目录路径,模板文件需要默认命名为 `dapr.yaml`
dapr stop -f <dir_path>
或:
dapr stop -f ./path/to/<your-preferred-file-name>.yaml
# 如果给定目录路径,模板文件需要默认命名为 `dapr.yaml`
dapr stop -f <dir_path> -k
或:
dapr stop -f ./path/to/<your-preferred-file-name>.yaml -k
模板文件结构
多应用运行模板文件可以包含以下属性。以下是一个示例模板,展示了配置了部分属性的两个应用程序。
version: 1
common: # 可选部分,用于在应用程序之间共享的变量
resourcesPath: ./app/components # 任何在应用程序之间共享的 dapr 资源
env: # 任何在应用程序之间共享的环境变量
DEBUG: true
apps:
- appID: webapp # 可选
appDirPath: .dapr/webapp/ # 必需
resourcesPath: .dapr/resources # 已弃用
resourcesPaths: .dapr/resources # 逗号分隔的资源路径。(可选)可按约定保留为默认值。
appChannelAddress: 127.0.0.1 # 应用程序监听的网络地址。(可选)可按约定保留为默认值。
configFilePath: .dapr/config.yaml # (可选)也可以按约定默认,如果未找到文件则忽略。
appProtocol: http
appPort: 8080
appHealthCheckPath: "/healthz"
command: ["python3", "app.py"]
appLogDestination: file # (可选),可以是 file、console 或 fileAndConsole。默认为 fileAndConsole。
daprdLogDestination: file # (可选),可以是 file、console 或 fileAndConsole。默认为 file。
- appID: backend # 可选
appDirPath: .dapr/backend/ # 必需
appProtocol: grpc
appPort: 3000
unixDomainSocket: "/tmp/test-socket"
env:
DEBUG: false
command: ["./backend"]
模板文件中所有路径适用以下规则:
- 如果路径是绝对路径,则按原样使用。
- common 部分下的所有相对路径应相对于模板文件路径提供。
- apps 部分下的
appDirPath应相对于模板文件路径提供。 - apps 部分下的所有其他相对路径应相对于
appDirPath提供。
version: 1
common: # 可选部分,用于在应用程序之间共享的变量
env: # 任何在应用程序之间共享的环境变量
DEBUG: true
apps:
- appID: webapp # 可选
appDirPath: .dapr/webapp/ # 必需
appChannelAddress: 127.0.0.1 # 应用程序监听的网络地址。(可选)可按约定保留为默认值。
appProtocol: http
appPort: 8080
appHealthCheckPath: "/healthz"
appLogDestination: file # (可选),可以是 file、console 或 fileAndConsole。默认为 fileAndConsole。
daprdLogDestination: file # (可选),可以是 file、console 或 fileAndConsole。默认为 file。
containerImage: ghcr.io/dapr/samples/hello-k8s-node:latest # (可选)部署到 Kubernetes 开发/测试环境时要使用的容器镜像 URI。
containerImagePullPolicy: IfNotPresent # (可选),如果本地不存在容器镜像则下载,否则使用本地镜像。
createService: true # (可选)部署到开发/测试环境时为应用程序创建 Kubernetes 服务。
- appID: backend # 可选
appDirPath: .dapr/backend/ # 必需
appProtocol: grpc
appPort: 3000
unixDomainSocket: "/tmp/test-socket"
env:
DEBUG: false
模板文件中所有路径适用以下规则:
- 如果路径是绝对路径,则按原样使用。
- apps 部分下的
appDirPath应相对于模板文件路径提供。 - app 部分下的所有相对路径应相对于
appDirPath提供。
模板属性
多应用运行模板的属性与 dapr run CLI 标志一致,在 CLI 参考文档中列出。
| 属性 | 必需 | 详情 | 示例 |
|---|---|---|---|
appDirPath | 是 | 应用程序代码的路径 | ./webapp/、./backend/ |
appID | 否 | 应用程序的 app ID。如果未提供,将从 appDirPath 派生 | webapp、backend |
resourcesPath | 否 | 已弃用。Dapr 资源的路径。可按约定使用默认值 | ./app/components、./webapp/components |
resourcesPaths | 否 | Dapr 资源的逗号分隔路径。可按约定使用默认值 | ./app/components、./webapp/components |
appChannelAddress | 否 | 应用程序监听的网络地址。可按约定保留为默认值。 | 127.0.0.1 |
configFilePath | 否 | 应用程序配置文件的路径 | ./webapp/config.yaml |
appProtocol | 否 | Dapr 用于与应用程序通信的协议。 | http、grpc |
appPort | 否 | 应用程序监听的端口 | 8080、3000 |
daprHTTPPort | 否 | Dapr HTTP 端口 | |
daprGRPCPort | 否 | Dapr GRPC 端口 | |
daprInternalGRPCPort | 否 | Dapr 内部 API 监听的 gRPC 端口;用于从本地 DNS 组件解析值时使用 | |
metricsPort | 否 | Dapr 将其指标信息发送到的端口 | |
unixDomainSocket | 否 | Unix 域套接字目录挂载的路径。如果指定,与 Dapr 边车的通信使用 Unix 域套接字,与使用 TCP 端口相比,具有更低的延迟和更高的吞吐量。在 Windows 上不可用。 | /tmp/test-socket |
profilePort | 否 | 性能分析服务器监听的端口 | |
enableProfiling | 否 | 通过 HTTP 端点启用性能分析 | |
apiListenAddresses | 否 | Dapr API 监听地址 | |
logLevel | 否 | 日志详细程度。 | |
appMaxConcurrency | 否 | 应用程序的并发级别;默认为无限制 | |
placementHostAddress | 否 | Dapr placement 服务器的逗号分隔地址列表 | 127.0.0.1:50057,127.0.0.1:50058 |
schedulerHostAddress | 否 | Dapr Scheduler Service 主机地址 | localhost:50006 |
appSSL | 否 | 当 Dapr 调用应用程序时启用 HTTPS | |
maxBodySize | 否 | 请求正文的最大大小(以 MB 为单位)。使用大小单位设置值(例如,16Mi 表示 16MB)。默认为 4Mi | |
readBufferSize | 否 | HTTP 读取缓冲区的最大大小(以 KB 为单位)。这也限制了 HTTP 标头的最大大小。使用大小单位设置值,例如 32Ki 将支持最大 32KB 的标头。默认为 4Ki(4KB) | |
enableAppHealthCheck | 否 | 在应用程序上启用应用程序运行状况检查 | true、false |
appHealthCheckPath | 否 | 运行状况检查文件的路径 | /healthz |
appHealthProbeInterval | 否 | 探测应用程序运行状况的间隔(以秒为单位) | |
appHealthProbeTimeout | 否 | 应用程序运行状况探测的超时时间(以毫秒为单位) | |
appHealthThreshold | 否 | 应用程序被视为不健康之前的连续失败次数 | |
enableApiLogging | 否 | 启用从应用程序到 Dapr 的所有 API 调用的日志记录 | |
runtimePath | 否 | Dapr 运行时安装路径 | |
env | 否 | 映射到环境变量;应用于每个应用程序的环境变量将覆盖在应用程序之间共享的环境变量 | DEBUG、DAPR_HOST_ADD |
appLogDestination | 否 | 用于输出应用程序日志的日志目标;其值可以是 file、console 或 fileAndConsole。默认为 fileAndConsole | file、console、fileAndConsole |
daprdLogDestination | 否 | 用于输出 daprd 日志的日志目标;其值可以是 file、console 或 fileAndConsole。默认为 file | file、console、fileAndConsole |
后续步骤
多应用运行模板的属性与 dapr run -k CLI 标志一致,在 CLI 参考文档中列出。
| 属性 | 必需 | 详情 | 示例 |
|---|---|---|---|
appDirPath | 是 | 应用程序代码的路径 | ./webapp/、./backend/ |
appID | 否 | 应用程序的 app ID。如果未提供,将从 appDirPath 派生 | webapp、backend |
appChannelAddress | 否 | 应用程序监听的网络地址。可按约定保留为默认值。 | 127.0.0、localhost |
appProtocol | 否 | Dapr 用于与应用程序通信的协议。 | http、grpc |
appPort | 否 | 应用程序监听的端口 | 8080、3000 |
daprHTTPPort | 否 | Dapr HTTP 端口 | |
daprGRPCPort | 否 | Dapr GRPC 端口 | |
daprInternalGRPCPort | 否 | Dapr 内部 API 监听的 gRPC 端口;用于从本地 DNS 组件解析值时使用 | |
metricsPort | 否 | Dapr 将其指标信息发送到的端口 | |
unixDomainSocket | 否 | Unix 域套接字目录挂载的路径。如果指定,与 Dapr 边车的通信使用 Unix 域套接字,与使用 TCP 端口相比,具有更低的延迟和更高的吞吐量。在 Windows 上不可用。 | /tmp/test-socket |
profilePort | 否 | 性能分析服务器监听的端口 | |
enableProfiling | 否 | 通过 HTTP 端点启用性能分析 | |
apiListenAddresses | 否 | Dapr API 监听地址 | |
logLevel | 否 | 日志详细程度。 | |
appMaxConcurrency | 否 | 应用程序的并发级别;默认为无限制 | |
placementHostAddress | 否 | Dapr placement 服务器的逗号分隔地址列表 | 127.0.0.1:50057,127.0.0.1:50058 |
schedulerHostAddress | 否 | Dapr Scheduler Service 主机地址 | 127.0.0.1:50006 |
appSSL | 否 | 当 Dapr 调用应用程序时启用 HTTPS | |
maxBodySize | 否 | 请求正文的最大大小(以 MB 为单位)。使用大小单位设置值(例如,16Mi 表示 16MB)。默认为 4Mi | 16Mi |
readBufferSize | 否 | HTTP 读取缓冲区的最大大小(以 KB 为单位)。这也限制了 HTTP 标头的最大大小。使用大小单位设置值,例如 32Ki 将支持最大 32KB 的标头。默认为 4Ki(4KB) | 32Ki |
enableAppHealthCheck | 否 | 在应用程序上启用应用程序运行状况检查 | true、false |
appHealthCheckPath | 否 | 运行状况检查文件的路径 | /healthz |
appHealthProbeInterval | 否 | 探测应用程序运行状况的间隔(以秒为单位) | |
appHealthProbeTimeout | 否 | 应用程序运行状况探测的超时时间(以毫秒为单位) | |
appHealthThreshold | 否 | 应用程序被视为不健康之前的连续失败次数 | |
enableApiLogging | 否 | 启用从应用程序到 Dapr 的所有 API 调用的日志记录 | |
env | 否 | 映射到环境变量;应用于每个应用程序的环境变量将覆盖在应用程序之间共享的环境变量 | DEBUG、DAPR_HOST_ADD |
appLogDestination | 否 | 用于输出应用程序日志的日志目标;其值可以是 file、console 或 fileAndConsole。默认为 fileAndConsole | file、console、fileAndConsole |
daprdLogDestination | 否 | 用于输出 daprd 日志的日志目标;其值可以是 file、console 或 fileAndConsole。默认为 file | file、console、fileAndConsole |
containerImage | 否 | 部署到 Kubernetes 开发/测试环境时要使用的容器镜像 URI。 | ghcr.io/dapr/samples/hello-k8s-python:latest |
containerImagePullPolicy | 否 | 容器镜像拉取策略(默认为 Always)。 | Always、IfNotPresent、Never |
createService | 否 | 部署到开发/测试环境时为应用程序创建 Kubernetes 服务。 | true、false |