This is the multi-page printable view of this section. Click here to print.
多应用同时运行
- 1: 多应用运行概述
- 2: 如何使用多应用运行模板文件
1 - 多应用运行概述
注意
Kubernetes 的多应用运行目前是一个预览功能。如果您想在本地运行多个应用程序进行联合测试,类似于生产环境,多应用运行功能可以帮助您同时启动和停止一组应用程序。这些应用程序可以是:
- 本地/自托管的进程,或
- 通过构建容器镜像并部署到Kubernetes集群
- 您可以使用本地Kubernetes集群(如KiND)或将其部署到云(如AKS、EKS和GKE)。
多应用运行模板文件描述了如何启动多个应用程序,类似于您运行多个单独的CLI run
命令。默认情况下,此模板文件名为dapr.yaml
。
多应用运行模板文件
执行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"]
有关模板属性的更深入示例和解释,请参见多应用模板。
资源和配置文件的位置
使用多应用运行时,您可以选择将应用程序的资源和配置文件放置在哪里。
单一文件位置(遵循约定)
您可以将所有应用程序的资源和配置放在~/.dapr
根目录下。当所有应用程序共享相同的资源路径时,这种方式很有帮助,比如在本地机器上测试时。
独立文件位置(遵循约定)
使用多应用运行时,每个应用程序目录可以有一个.dapr
文件夹,其中包含一个config.yaml
文件和一个resources
目录。如果应用程序目录中不存在.dapr
目录,则使用默认的~/.dapr/resources/
和~/.dapr/config.yaml
位置。
如果您决定在每个应用程序目录中添加一个.dapr
目录,其中包含一个/resources
目录和config.yaml
文件,您可以为每个应用程序指定不同的资源路径。这种方法仍然遵循默认的~/.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/logs
文件夹。
观看演示
多应用运行模板文件
执行dapr run -k -f .
或dapr run -k -f dapr.yaml
时,dapr.yaml
多应用运行模板文件中定义的应用程序将在Kubernetes默认命名空间中启动。
注意: 目前,多应用运行模板只能在默认的Kubernetes命名空间中启动应用程序。
Kubernetes所需的默认服务和部署定义会在dapr.yaml
模板中为每个应用程序生成在.dapr/deploy
文件夹中。
如果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
createService: true
env:
APP_PORT: 3000
- appID: pythonapp
appDirPath: ./pythonapp/
containerImage: ghcr.io/dapr/samples/hello-k8s-python:latest
注意:
- 如果未指定
containerImage
字段,dapr run -k -f
会产生错误。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/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。
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 | Y | 应用代码的路径 | ./webapp/ , ./backend/ |
appID | N | 应用的 app ID。如果未提供,将从 appDirPath 派生 | webapp , backend |
resourcesPath | N | 已弃用。Dapr 资源的路径。可以按约定为默认值 | ./app/components , ./webapp/components |
resourcesPaths | N | 逗号分隔的 Dapr 资源路径。可以按约定为默认值 | ./app/components , ./webapp/components |
appChannelAddress | N | 应用监听的网络地址。可以按约定保留为默认值。 | 127.0.0.1 |
configFilePath | N | 应用配置文件的路径 | ./webapp/config.yaml |
appProtocol | N | Dapr 用于与应用通信的协议。 | http , grpc |
appPort | N | 应用监听的端口 | 8080 , 3000 |
daprHTTPPort | N | Dapr HTTP 端口 | |
daprGRPCPort | N | Dapr GRPC 端口 | |
daprInternalGRPCPort | N | Dapr 内部 API 监听的 gRPC 端口;用于从本地 DNS 组件解析值时 | |
metricsPort | N | Dapr 发送其指标信息的端口 | |
unixDomainSocket | N | Unix 域套接字目录挂载的路径。如果指定,与 Dapr 边车的通信使用 Unix 域套接字,与使用 TCP 端口相比,具有更低的延迟和更高的吞吐量。在 Windows 上不可用。 | /tmp/test-socket |
profilePort | N | 配置文件服务器监听的端口 | |
enableProfiling | N | 通过 HTTP 端点启用分析 | |
apiListenAddresses | N | Dapr API 监听地址 | |
logLevel | N | 日志详细程度。 | |
appMaxConcurrency | N | 应用的并发级别;默认是无限制 | |
placementHostAddress | N | ||
appSSL | N | 启用 https,当 Dapr 调用应用时 | |
daprHTTPMaxRequestSize | N | 请求体的最大大小(MB)。 | |
daprHTTPReadBufferSize | N | HTTP 读取缓冲区的最大大小(KB)。这也限制了 HTTP 头的最大大小。默认是 4 KB | |
enableAppHealthCheck | N | 启用应用的健康检查 | true , false |
appHealthCheckPath | N | 健康检查文件的路径 | /healthz |
appHealthProbeInterval | N | 应用健康探测的间隔(秒) | |
appHealthProbeTimeout | N | 应用健康探测的超时时间(毫秒) | |
appHealthThreshold | N | 应用被认为不健康的连续失败次数 | |
enableApiLogging | N | 启用从应用到 Dapr 的所有 API 调用的日志记录 | |
runtimePath | N | Dapr 运行时安装路径 | |
env | N | 环境变量的映射;每个应用应用的环境变量将覆盖跨应用共享的环境变量 | DEBUG , DAPR_HOST_ADD |
appLogDestination | N | 输出应用日志的日志目标;其值可以是 file, console 或 fileAndConsole。默认是 fileAndConsole | file , console , fileAndConsole |
daprdLogDestination | N | 输出 daprd 日志的日志目标;其值可以是 file, console 或 fileAndConsole。默认是 file | file , console , fileAndConsole |
下一步
多应用运行模板的属性与 dapr run -k
CLI 标志对齐,在 CLI 参考文档中列出。
属性 | 必需 | 详情 | 示例 |
---|---|---|---|
appDirPath | Y | 应用代码的路径 | ./webapp/ , ./backend/ |
appID | N | 应用的 app ID。如果未提供,将从 appDirPath 派生 | webapp , backend |
appChannelAddress | N | 应用监听的网络地址。可以按约定保留为默认值。 | 127.0.0.1 |
appProtocol | N | Dapr 用于与应用通信的协议。 | http , grpc |
appPort | N | 应用监听的端口 | 8080 , 3000 |
daprHTTPPort | N | Dapr HTTP 端口 | |
daprGRPCPort | N | Dapr GRPC 端口 | |
daprInternalGRPCPort | N | Dapr 内部 API 监听的 gRPC 端口;用于从本地 DNS 组件解析值时 | |
metricsPort | N | Dapr 发送其指标信息的端口 | |
unixDomainSocket | N | Unix 域套接字目录挂载的路径。如果指定,与 Dapr 边车的通信使用 Unix 域套接字,与使用 TCP 端口相比,具有更低的延迟和更高的吞吐量。在 Windows 上不可用。 | /tmp/test-socket |
profilePort | N | 配置文件服务器监听的端口 | |
enableProfiling | N | 通过 HTTP 端点启用分析 | |
apiListenAddresses | N | Dapr API 监听地址 | |
logLevel | N | 日志详细程度。 | |
appMaxConcurrency | N | 应用的并发级别;默认是无限制 | |
placementHostAddress | N | ||
appSSL | N | 启用 https,当 Dapr 调用应用时 | |
daprHTTPMaxRequestSize | N | 请求体的最大大小(MB)。 | |
daprHTTPReadBufferSize | N | HTTP 读取缓冲区的最大大小(KB)。这也限制了 HTTP 头的最大大小。默认是 4 KB | |
enableAppHealthCheck | N | 启用应用的健康检查 | true , false |
appHealthCheckPath | N | 健康检查文件的路径 | /healthz |
appHealthProbeInterval | N | 应用健康探测的间隔(秒) | |
appHealthProbeTimeout | N | 应用健康探测的超时时间(毫秒) | |
appHealthThreshold | N | 应用被认为不健康的连续失败次数 | |
enableApiLogging | N | 启用从应用到 Dapr 的所有 API 调用的日志记录 | |
env | N | 环境变量的映射;每个应用应用的环境变量将覆盖跨应用共享的环境变量 | DEBUG , DAPR_HOST_ADD |
appLogDestination | N | 输出应用日志的日志目标;其值可以是 file, console 或 fileAndConsole。默认是 fileAndConsole | file , console , fileAndConsole |
daprdLogDestination | N | 输出 daprd 日志的日志目标;其值可以是 file, console 或 fileAndConsole。默认是 file | file , console , fileAndConsole |
containerImage | N | 在 Kubernetes 开发/测试环境中部署时使用的容器镜像 URI。 | ghcr.io/dapr/samples/hello-k8s-python:latest |
createService | N | 在开发/测试环境中部署应用时创建 Kubernetes 服务。 | true , false |