前言
1. 关于文档
此版本的文档以HTML 格式提供。
可以在此处找到Spring Cloud Data Flow参考指南的最新副本。
本文档的副本可能供您自己使用,并用于 分发给他人,前提是您不对此类副本收取任何费用,并且 此外,前提是每个副本都包含此版权声明,无论是否在 打印或电子。
2. 获得帮助
遇到弹簧云数据流问题?我们愿意提供帮助!
- 问一个问题。我们监控stackoverflow.com的问题 标记为弹簧云数据流。
- 在github.com/spring-cloud/spring-cloud-dataflow/issues 时报告Spring Cloud Data Flow的错误。
- 在Gitter 上与社区和开发人员聊天。
所有的Spring Cloud数据流都是开源的,包括文档!如果您发现问题 使用文档,或者如果您只是想改进它们,请参与其中。 |
开始
3. 入门 - 本地
有关设置 docker 撰写和手动安装的详细信息,请参阅微型站点的“本地计算机”部分。
在本地安装数据流服务器后,你可能希望开始协调将现成的预生成应用程序部署到一致的流式处理或批处理数据管道中。我们提供指南可帮助你开始使用流和批处理。
4. 入门 - Cloud Foundry
本节介绍如何在Cloud Foundry上开始使用Spring Cloud Data Flow。请参阅微型站点的Cloud Foundry部分,了解有关在CloudFoundry上安装Spring Cloud Data Flow的更多信息。
在 Cloud Foundry 上安装数据流服务器后,您可能希望开始协调将现成的预构建应用程序部署到一致的流式处理或批处理数据管道中。我们提供指南可帮助你开始使用流和批处理。
5. 入门 - Kubernetes
Spring Cloud Data Flow是一个用于构建数据集成和实时数据处理管道的工具包。
管道由使用 Spring Cloud Stream 或 Spring Cloud Task 微服务框架构建的 Spring Boot 应用程序组成。 这使得Spring Cloud Data Flow适用于一系列数据处理用例,从导入导出到事件流和预测分析。
该项目支持使用 Spring Cloud Data Flow 和 Kubernetes 作为这些管道的运行时,并将应用程序打包为 Docker 映像。
有关在 Kubernetes 上安装 Spring Cloud Data Flow 的更多信息,请参阅微型站点的Kubernetes部分。
在 Kubernetes 上安装数据流服务器后,你可能希望开始协调将现成的预构建应用程序部署到一致的流式处理或批处理数据管道中。我们提供指南可帮助你开始使用流和批处理。
5.1. 应用程序和服务器属性
本节介绍如何自定义应用程序的部署。可以使用许多属性来影响所部署应用程序的设置。可以基于每个应用程序或在适当的服务器配置中为所有已部署的应用程序应用属性。
基于每个应用程序设置的属性始终优先于设置为服务器配置的属性。这种安排允许您基于每个应用程序覆盖全局服务器级别属性。 |
要应用于所有已部署任务的属性在文件中定义,并为流定义。替换为您正在使用的消息传递中间件 — 例如,或。src/kubernetes/server/server-config-[binder].yaml
src/kubernetes/skipper/skipper-config-[binder].yaml
[binder]
rabbit
kafka
5.1.1. 内存和 CPU 设置
应用程序使用默认内存和 CPU 设置进行部署。如果需要,可以调整这些值。以下示例演示如何设置内存和 CPU 和内存:Limits
1000m
CPU
1024Mi
Requests
800m
640Mi
deployer.<application>.kubernetes.limits.cpu=1000m
deployer.<application>.kubernetes.limits.memory=1024Mi
deployer.<application>.kubernetes.requests.cpu=800m
deployer.<application>.kubernetes.requests.memory=640Mi
这些值会导致使用以下容器设置:
Limits:
cpu: 1
memory: 1Gi
Requests:
cpu: 800m
memory: 640Mi
您还可以控制要将 and 全局设置为的默认值。cpu
memory
以下示例演示如何设置流的 CPU 和内存:
data:
application.yaml: |-
spring:
cloud:
skipper:
server:
platform:
kubernetes:
accounts:
default:
limits:
memory: 640mi
cpu: 500m
以下示例演示如何设置任务的 CPU 和内存:
data:
application.yaml: |-
spring:
cloud:
dataflow:
task:
platform:
kubernetes:
accounts:
default:
limits:
memory: 640mi
cpu: 500m
到目前为止,我们使用的设置仅影响容器的设置。它们不会影响容器中 JVM 进程的内存设置。如果要设置 JVM 内存设置,可以设置环境变量来执行此操作。有关详细信息,请参阅下一节。
5.1.2. 环境变量
若要影响给定应用程序的环境设置,可以使用部署程序属性。 例如,生产设置中的一个常见要求是影响 JVM 内存参数。 您可以使用环境变量来执行此操作,如以下示例所示:spring.cloud.deployer.kubernetes.environmentVariables
JAVA_TOOL_OPTIONS
deployer.<application>.kubernetes.environmentVariables=JAVA_TOOL_OPTIONS=-Xmx1024m
该属性接受逗号分隔的字符串。如果环境变量包含值 这也是一个逗号分隔的字符串,它必须括在单引号中 — 例如, |
这将覆盖所需 的 JVM 内存设置(替换为应用程序的名称)。<application>
<application>
5.1.3. 活动性和就绪性探测器
Theandprobes分别使用名为and的路径。他们分别使用 aoffor 和 aofand。您可以使用部署程序属性在部署流时更改这些默认值。活动性和就绪性探测仅应用于流。liveness
readiness
/health
/info
delay
10
period
60
10
以下示例通过设置部署程序属性来更改探测器(替换为应用程序的名称):liveness
<application>
deployer.<application>.kubernetes.livenessProbePath=/health
deployer.<application>.kubernetes.livenessProbeDelay=120
deployer.<application>.kubernetes.livenessProbePeriod=20
您可以声明与流的服务器全局配置的一部分相同,如以下示例所示:
data:
application.yaml: |-
spring:
cloud:
skipper:
server:
platform:
kubernetes:
accounts:
default:
livenessProbePath: /health
livenessProbeDelay: 120
livenessProbePeriod: 20
同样,您可以交换以覆盖默认设置。liveness
readiness
readiness
默认情况下,端口 8080 用作探测端口。您可以使用部署程序属性更改 andprobe 端口的默认值,如以下示例所示:liveness
readiness
deployer.<application>.kubernetes.readinessProbePort=7000
deployer.<application>.kubernetes.livenessProbePort=7000
您可以声明相同的作为流的全局配置的一部分,如以下示例所示:
data:
application.yaml: |-
spring:
cloud:
skipper:
server:
platform:
kubernetes:
accounts:
default:
readinessProbePort: 7000
livenessProbePort: 7000
默认情况下,探测器路径使用 Spring Boot 2.x+ 执行器端点。要使用 Spring Boot 1.x 执行器端点路径,您必须调整 and值,如以下示例所示(替换为应用程序的名称): deployer.<application>.kubernetes.livenessProbePath=/health 要基于每个应用程序自动将 bothand端点设置为默认的 Spring 引导 1.x 路径,您可以设置以下属性: deployer.<application>.kubernetes.bootMajorVersion=1 |
可以使用存储在Kubernetes 机密中的凭据访问受保护的探测终结点。您可以使用现有密钥,前提是凭据包含在密钥块的密钥名称下。您可以基于每个应用程序配置探测身份验证。启用后,它将使用相同的凭据和身份验证类型应用于 andprobe 端点。目前仅支持身份验证。credentials
data
liveness
readiness
Basic
要创建新密钥,请执行以下操作:
- 使用用于访问安全探测终结点的凭据生成 base64 字符串。
基本身份验证将用户名和密码编码为 base64 字符串,格式为 。username:password
以下示例(包括输出,应在其中替换为您的值)演示如何生成 base64 字符串:user
pass
$ echo -n "user:pass" | base64
dXNlcjpwYXNz
- 使用编码的凭据,创建包含以下内容的文件(例如):
myprobesecret.yml
apiVersion: v1
kind: Secret
metadata:
name: myprobesecret
type: Opaque
data:
credentials: GENERATED_BASE64_STRING
- 替换为之前生成的 base64 编码值。
GENERATED_BASE64_STRING
- 使用 创建密钥,如以下示例所示:
kubectl
$ kubectl create -f ./myprobesecret.yml
secret "myprobesecret" created
- 将以下部署程序属性设置为在访问探测端点时使用身份验证,如以下示例所示:
deployer.<application>.kubernetes.probeCredentialsSecret=myprobesecret
替换为要应用身份验证的应用程序的名称。<application>
5.1.4. 使用SPRING_APPLICATION_JSON
可以使用环境变量来设置数据流服务器属性(包括 Maven 存储库设置的配置),这些属性在所有数据流服务器实现中都是通用的。这些设置位于部署 YAML 的容器部分中的服务器级别。以下示例演示如何执行此操作:SPRING_APPLICATION_JSON
env
env:
- name: SPRING_APPLICATION_JSON
value: "{ \"maven\": { \"local-repository\": null, \"remote-repositories\": { \"repo1\": { \"url\": \"https://repo.spring.io/libs-snapshot\"} } } }"
5.1.5. 私有 Docker 注册表
可以基于每个应用程序从专用注册表中提取 Docker 映像。首先,您必须在群集中创建密钥。按照从专用注册表拉取映像指南创建机密。
创建机密后,可以使用属性设置要使用的机密,如以下示例所示:imagePullSecret
deployer.<application>.kubernetes.imagePullSecret=mysecret
替换为应用程序的名称和之前创建的密钥的名称。<application>
mysecret
您还可以在全局服务器级别配置映像拉取密钥。
以下示例演示如何对流执行此操作:
data:
application.yaml: |-
spring:
cloud:
skipper:
server:
platform:
kubernetes:
accounts:
default:
imagePullSecret: mysecret
以下示例演示如何对任务执行此操作:
data:
application.yaml: |-
spring:
cloud:
dataflow:
task:
platform:
kubernetes:
accounts:
default:
imagePullSecret: mysecret
替换为之前创建的密钥的名称。mysecret
5.1.6. 注释
您可以基于每个应用程序向 Kubernetes 对象添加注释。支持的对象类型为 pod、和。批注以 aformat 定义,允许用逗号分隔多个批注。有关注释的更多信息和用例,请参阅注释。Deployment
Service
Job
key:value
以下示例演示如何将应用程序配置为使用批注:
deployer.<application>.kubernetes.podAnnotations=annotationName:annotationValue
deployer.<application>.kubernetes.serviceAnnotations=annotationName:annotationValue,annotationName2:annotationValue2
deployer.<application>.kubernetes.jobAnnotations=annotationName:annotationValue
替换为应用程序的名称和批注的值。<application>
5.1.7. 入口点样式
入口点样式会影响将应用程序属性传递到要部署的容器的方式。目前支持三种样式:
-
exec
(默认值):将部署请求中的所有应用程序属性和命令行参数作为容器参数传递。应用程序属性将转换为 的格式。--key=value
-
shell
:将所有应用程序属性和命令行参数作为环境变量传递。每个 applicationor 命令行参数属性都转换为大写字符串,字符将替换为。.
_
-
boot
:创建一个环境变量,该变量包含所有应用程序属性的 JSON 表示形式。部署请求中的命令行参数设置为容器参数。SPRING_APPLICATION_JSON
在所有情况下,在服务器级配置和基于每个应用程序定义的环境变量将按原样发送到容器。 |
您可以按如下方式配置应用程序:
deployer.<application>.kubernetes.entryPointStyle=<Entry Point Style>
替换为应用程序的名称和所需的入口点样式。<application>
<Entry Point Style>
您还可以在全局服务器级别配置入口点样式。
以下示例演示如何对流执行此操作:
data:
application.yaml: |-
spring:
cloud:
skipper:
server:
platform:
kubernetes:
accounts:
default:
entryPointStyle: entryPointStyle
以下示例演示如何对任务执行此操作:
data:
application.yaml: |-
spring:
cloud:
dataflow:
task:
platform:
kubernetes:
accounts:
default:
entryPointStyle: entryPointStyle
替换为所需的入口点样式。entryPointStyle
您应该选择“要么”的入口点样式,以对应于在容器中定义语法的方式。有关更多信息和用例,请参阅 Docker 文档的入口点部分。exec
shell
ENTRYPOINT
Dockerfile
exec
shell
使用入口点样式对应于使用样式。部署请求中的命令行参数将传递到容器,添加的应用程序属性将映射到环境变量而不是命令行参数。boot
exec
ENTRYPOINT
SPRING_APPLICATION_JSON
使用入口点样式时,该属性不得包含。 |
5.1.8. 部署服务帐户
可以通过属性为应用程序部署配置自定义服务帐户。您可以使用现有服务帐户或创建新服务帐户。创建服务帐户的一种方法是使用,如以下示例所示:kubectl
$ kubectl create serviceaccount myserviceaccountname
serviceaccount "myserviceaccountname" created
然后,您可以按如下方式配置各个应用程序:
deployer.<application>.kubernetes.deploymentServiceAccountName=myserviceaccountname
替换为应用程序的名称和服务帐户名称。<application>
myserviceaccountname
您还可以在全局服务器级别配置服务帐户名称。
以下示例演示如何对流执行此操作:
data:
application.yaml: |-
spring:
cloud:
skipper:
server:
platform:
kubernetes:
accounts:
default:
deploymentServiceAccountName: myserviceaccountname
以下示例演示如何对任务执行此操作:
data:
application.yaml: |-
spring:
cloud:
dataflow:
task:
platform:
kubernetes:
accounts:
default:
deploymentServiceAccountName: myserviceaccountname
替换为要应用于所有部署的服务帐户名称。myserviceaccountname
5.1.9. 镜像拉取策略
映像拉取策略定义何时应将 Docker 映像拉取到本地注册表。目前支持三种策略:
-
IfNotPresent
(默认值):如果映像已存在,则不要拉取该映像。 -
Always
:始终拉取映像,无论它是否已存在。 -
Never
:切勿拉取映像。仅使用已存在的映像。
以下示例演示如何单独配置应用程序:
deployer.<application>.kubernetes.imagePullPolicy=Always
替换为应用程序的名称和所需的映像拉取策略。<application>
Always
您可以在全局服务器级别配置映像拉取策略。
以下示例演示如何对流执行此操作:
data:
application.yaml: |-
spring:
cloud:
skipper:
server:
platform:
kubernetes:
accounts:
default:
imagePullPolicy: Always
以下示例演示如何对任务执行此操作:
data:
application.yaml: |-
spring:
cloud:
dataflow:
task:
platform:
kubernetes:
accounts:
default:
imagePullPolicy: Always
替换为所需的映像拉取策略。Always
5.1.10. 部署标签
您可以在与部署相关的对象上设置自定义标签。有关标签的详细信息,请参阅标签。标签以格式指定。key:value
以下示例演示如何单独配置应用程序:
deployer.<application>.kubernetes.deploymentLabels=myLabelName:myLabelValue
替换为应用程序的名称、标签名称和标签的值。<application>
myLabelName
myLabelValue
此外,还可以应用多个标签,如以下示例所示:
deployer.<application>.kubernetes.deploymentLabels=myLabelName:myLabelValue,myLabelName2:myLabelValue2
5.1.11. 容许
容错处理与污点一起使用,以确保 Pod 不会调度到特定节点上。 容许设置在 Pod 配置中,而污点则设置到节点上。 有关更多信息,请参阅 Kubernetes 参考资料的污点和容忍部分。
以下示例演示如何单独配置应用程序:
deployer.<application>.kubernetes.tolerations=[{key: 'mykey', operator: 'Equal', value: 'myvalue', effect: 'NoSchedule'}]
根据所需的容差配置替换为应用程序名称和键值对。<application>
您也可以在全局服务器级别配置容限。
以下示例演示如何对流执行此操作:
data:
application.yaml: |-
spring:
cloud:
skipper:
server:
platform:
kubernetes:
accounts:
default:
tolerations:
- key: mykey
operator: Equal
value: myvalue
effect: NoSchedule
以下示例演示如何对任务执行此操作:
data:
application.yaml: |-
spring:
cloud:
dataflow:
task:
platform:
kubernetes:
accounts:
default:
tolerations:
- key: mykey
operator: Equal
value: myvalue
effect: NoSchedule
根据所需的容差配置替换键值对。tolerations
5.1.12. 秘密引用
可以引用机密,并且可以解码其整个数据内容并将其作为单个变量插入到 Pod 环境中。 有关更多信息,请参阅 Kubernetes 参考的将密钥中的所有键值对配置为容器环境变量部分。
以下示例演示如何单独配置应用程序:
deployer.<application>.kubernetes.secretRefs=testsecret
您还可以指定多个密钥,如下所示:
deployer.<application>.kubernetes.secretRefs=[testsecret,anothersecret]
将应用程序名称和属性替换为应用程序环境和密钥的适当值。<application>
secretRefs
您也可以在全局服务器级别配置机密引用。
以下示例演示如何对流执行此操作:
data:
application.yaml: |-
spring:
cloud:
skipper:
server:
platform:
kubernetes:
accounts:
default:
secretRefs:
- testsecret
- anothersecret
以下示例演示如何对任务执行此操作:
data:
application.yaml: |-
spring:
cloud:
dataflow:
task:
platform:
kubernetes:
accounts:
default:
secretRefs:
- testsecret
- anothersecret
将 的项目替换为一个或多个机密名称。secretRefs
5.1.13. 密钥引用
可以引用机密,并且可以将其解码值插入到 Pod 环境中。 有关更多信息,请参阅 Kubernetes 参考的使用机密作为环境变量部分。
以下示例演示如何单独配置应用程序:
deployer.<application>.kubernetes.secretKeyRefs=[{envVarName: 'MY_SECRET', secretName: 'testsecret', dataKey: 'password'}]
将应用程序的名称以及 、 和属性替换为适用于应用程序环境和密钥的值。<application>
envVarName
secretName
dataKey
您也可以在全局服务器级别配置密钥引用。
以下示例演示如何对流执行此操作:
data:
application.yaml: |-
spring:
cloud:
skipper:
server:
platform:
kubernetes:
accounts:
default:
secretKeyRefs:
- envVarName: MY_SECRET
secretName: testsecret
dataKey: password
以下示例演示如何对任务执行此操作:
data:
application.yaml: |-
spring:
cloud:
dataflow:
task:
platform:
kubernetes:
accounts:
default:
secretKeyRefs:
- envVarName: MY_SECRET
secretName: testsecret
dataKey: password
将 、 和属性替换为密钥的相应值。envVarName
secretName
dataKey
5.1.14. 配置映射引用
可以引用 ConfigMap,并且可以解码其整个数据内容并将其作为单个变量插入到 Pod 环境中。 有关更多信息,请参阅 Kubernetes 参考的 将ConfigMap 中的所有键值对配置为容器环境变量部分。
以下示例演示如何单独配置应用程序:
deployer.<application>.kubernetes.configMapRefs=testcm
您还可以指定多个配置映射实例,如下所示:
deployer.<application>.kubernetes.configMapRefs=[testcm,anothercm]
将应用程序的名称和属性替换为应用程序环境和 ConfigMap 的适当值。<application>
configMapRefs
您也可以在全局服务器级别配置 ConfigMap 引用。
以下示例演示如何对流执行此操作。编辑相应的,替换为正在使用的相应活页夹:skipper-config-(binder).yaml
(binder)
data:
application.yaml: |-
spring:
cloud:
skipper:
server:
platform:
kubernetes:
accounts:
default:
configMapRefs:
- testcm
- anothercm
以下示例演示如何通过编辑文件来为任务执行此操作:server-config.yaml
data:
application.yaml: |-
spring:
cloud:
dataflow:
task:
platform:
kubernetes:
accounts:
default:
configMapRefs:
- testcm
- anothercm
将 的项目替换为一个或多个机密名称。configMapRefs
5.1.15. 配置映射键引用
可以引用配置映射并将其关联的键值插入到 Pod 环境中。 有关更多信息,请参阅 Kubernetes 参考的使用 ConfigMap 数据定义容器环境变量部分。
以下示例演示如何单独配置应用程序:
deployer.<application>.kubernetes.configMapKeyRefs=[{envVarName: 'MY_CM', configMapName: 'testcm', dataKey: 'platform'}]
将应用程序的名称以及 、 和属性替换为应用程序环境和 ConfigMap 的适当值。<application>
envVarName
configMapName
dataKey
您也可以在全局服务器级别配置 ConfigMap 引用。
以下示例演示如何对流执行此操作。编辑相应的,替换为正在使用的相应活页夹:skipper-config-(binder).yaml
(binder)
data:
application.yaml: |-
spring:
cloud:
skipper:
server:
platform:
kubernetes:
accounts:
default:
configMapKeyRefs:
- envVarName: MY_CM
configMapName: testcm
dataKey: platform
以下示例演示如何通过编辑文件来为任务执行此操作:server-config.yaml
data:
application.yaml: |-
spring:
cloud:
dataflow:
task:
platform:
kubernetes:
accounts:
default:
configMapKeyRefs:
- envVarName: MY_CM
configMapName: testcm
dataKey: platform
将 、 和属性替换为配置映射的适当值。envVarName
configMapName
dataKey
5.1.16. Pod 安全上下文
您可以配置容器安全上下文,以便在指定的 UID(用户 ID)或 GID(组 ID)下运行进程。 当您不想在默认 UID 和 GID 下运行进程时,这很有用。 您可以定义 (UID) 或 (GID),并且可以将它们配置为协同工作。 有关更多信息,请参阅 Kubernetes 参考资料的安全上下文部分。root
runAsUser
fsGroup
以下示例演示如何单独配置应用程序 Pod:
deployer.<application>.kubernetes.podSecurityContext={runAsUser: 65534, fsGroup: 65534}
将应用程序和 the/or 属性的名称替换为适用于容器环境的值。<application>
runAsUser
fsGroup
您也可以在全局服务器级别配置 Pod 安全上下文。
以下示例演示如何对流执行此操作。编辑相应的,替换为正在使用的相应活页夹:skipper-config-(binder).yaml
(binder)
data:
application.yaml: |-
spring:
cloud:
skipper:
server:
platform:
kubernetes:
accounts:
default:
podSecurityContext:
runAsUser: 65534
fsGroup: 65534
以下示例演示如何通过编辑文件来为任务执行此操作:server-config.yaml
data:
application.yaml: |-
spring:
cloud:
dataflow:
task:
platform:
kubernetes:
accounts:
default:
podSecurityContext:
runAsUser: 65534
fsGroup: 65534
将 and/or 属性替换为适用于您的容器环境的值。runAsUser
fsGroup
5.1.17. 服务端口
部署应用程序时,将使用默认端口 of 创建 kubernetes 服务对象。如果设置了该属性,它将覆盖默认端口值。您可以基于每个应用程序向服务对象添加其他端口。您可以使用逗号分隔符添加多个端口。8080
server.port
以下示例演示如何在应用程序的服务对象上配置其他端口:
deployer.<application>.kubernetes.servicePorts=5000
deployer.<application>.kubernetes.servicePorts=5000,9000
替换为应用程序的名称和端口的值。<application>
5.1.18. 有状态集初始化容器
使用 StatefulSet 部署应用程序时,将使用 Init 容器在 Pod 中设置实例索引。 默认情况下,使用的图像是,您可以自定义。busybox
以下示例演示如何单独配置应用程序 Pod:
deployer.<application>.kubernetes.statefulSetInitContainerImageName=myimage:mylabel
将应用程序的名称和属性替换为适合您的环境的值。<application>
statefulSetInitContainerImageName
您也可以在全局服务器级别配置 StatefulSet 初始化容器。
以下示例演示如何对流执行此操作。编辑相应的,替换为正在使用的相应活页夹:skipper-config-(binder).yaml
(binder)
data:
application.yaml: |-
spring:
cloud:
skipper:
server:
platform:
kubernetes:
accounts:
default:
statefulSetInitContainerImageName: myimage:mylabel
以下示例演示如何通过编辑文件来为任务执行此操作:server-config.yaml
data:
application.yaml: |-
spring:
cloud:
dataflow:
task:
platform:
kubernetes:
accounts:
default:
statefulSetInitContainerImageName: myimage:mylabel
将该属性替换为适合您的环境的值。statefulSetInitContainerImageName
5.1.19. 初始化容器
部署应用程序时,可以基于每个应用程序设置自定义 Init 容器。 有关更多信息,请参阅 Kubernetes 参考的Init 容器部分。
以下示例演示如何为应用程序配置 Init 容器:
deployer.<application>.kubernetes.initContainer={containerName: 'test', imageName: 'busybox:latest', commands: ['sh', '-c', 'echo hello']}
替换为应用程序的名称,并设置适用于 Init 容器的属性值。<application>
initContainer
5.1.20. 生命周期支持
部署应用程序时,可以附加生命周期处理程序以执行命令。 此外,Kubernetes API 还支持其他类型的处理程序。此功能可能会扩展以支持未来版本中的其他操作。 若要配置生命周期处理程序(如上面的链接页面所示),请使用以下属性键将每个命令指定为逗号分隔的列表:postStart
preStop
exec
deployer.<application>.kubernetes.lifecycle.postStart.exec.command=/bin/sh,-c,'echo Hello from the postStart handler > /usr/share/message'
deployer.<application>.kubernetes.lifecycle.preStop.exec.command=/bin/sh,-c,'nginx -s quit; while killall -0 nginx; do sleep 1; done'
5.1.21. 其他容器
部署应用程序时,可能需要将一个或多个容器与主容器一起部署。 这将允许您在多容器 Pod 设置的情况下调整一些部署模式,例如 sidecar、适配器。
以下示例演示如何为应用程序配置其他容器:
deployer.<application>.kubernetes.additionalContainers=[{name: 'c1', image: 'busybox:latest', command: ['sh', '-c', 'echo hello1'], volumeMounts: [{name: 'test-volume', mountPath: '/tmp', readOnly: true}]},{name: 'c2', image: 'busybox:1.26.1', command: ['sh', '-c', 'echo hello2']}]
应用
一系列预构建的流和任务或批处理启动器应用程序,用于各种数据集成和处理方案,以促进学习和实验。下一节中的表一目了然地包含预构建的应用程序。有关更多详细信息,请查看如何注册受支持的应用程序。
6. 可用应用
源 | 处理器 | 沉 | 任务 |
斯福普 | TCP 客户端 | MQTT | 时间戳 |
捷运系统(JMS) | 脚本化转换 | .log | 组合任务运行程序 |
FTP | 变换 | 吞吐量 | 时间戳批处理 |
时间 | 标头扩充器 | 蒙戈德 | |
负载生成器 | python-http | FTP | |
系统日志 | 推特情绪 | 京东 | |
S3 | 分配器 | 卡珊德拉 | |
日志器 | 图像识别 | 路由器 | |
触发器任务(已弃用) | 桥 | Redis-pubsub | |
推特流 | 聚苯乙烯 | 文件 | |
蒙戈德 | Python-jython | 网络套接字 | |
宝石火-CQ | 时髦变换 | S3 | |
http | httpclient | 兔 | |
兔 | 滤波器 | 计数器 | |
啧啧�� | 姿势估计 | 页面复制 | |
触发 | GRPC | 广尖警区 | |
MQTT | 沟槽型过滤器 | 斯福普 | |
TCP 客户端 | 聚合 | 任务启动器数据流 | |
邮件 | 计数器 | HDFS | |
京东 | 张量流 | 啧啧�� | |
宝石火 | 任务启动请求转换(已弃用) | 宝石火 | |
文件 | 物体检测 | ||
SFTP-数据流 |
建筑
7. 简介
Spring Cloud Data Flow 简化了专注于数据处理用例的应用程序的开发和部署。
微型网站的体系结构部分介绍了数据流的体系结构。
配置
8. 马文
如果要覆盖特定的 Maven 配置属性(远程存储库、代理等)或在代理后面运行数据流服务器, 启动数据流服务器时,需要将这些属性指定为命令行参数,如以下示例所示:
$ java -jar spring-cloud-dataflow-server-2.9.6.jar --spring.config.additional-location=/home/joe/maven.yml
上述命令假定类似于以下内容:maven.yaml
maven:
localRepository: mylocal
remote-repositories:
repo1:
url: https://repo1
auth:
username: user1
password: pass1
snapshot-policy:
update-policy: daily
checksum-policy: warn
release-policy:
update-policy: never
checksum-policy: fail
repo2:
url: https://repo2
policy:
update-policy: always
checksum-policy: fail
proxy:
host: proxy1
port: "9010"
auth:
username: proxyuser1
password: proxypass1
默认情况下,协议设置为 。如果代理不需要用户名和密码,则可以省略身份验证属性。此外,默认情况下,马文尼斯设置为 。 如前面的示例所示,您可以指定远程存储库及其身份验证(如果需要)。如果远程存储库位于代理后面,则可以指定代理属性,如前面的示例所示。http
localRepository
${user.home}/.m2/repository/
您可以为每个远程存储库配置指定存储库策略,如前面的示例所示。 密钥适用于存储库策略和存储库策略。policy
snapshot
release
有关 支持的存储库策略。
由于这些是 Spring 引导,您需要通过将它们添加到环境变量来指定。以下示例显示了 JSON 的结构:@ConfigurationProperties
SPRING_APPLICATION_JSON
$ SPRING_APPLICATION_JSON='
{
"maven": {
"local-repository": null,
"remote-repositories": {
"repo1": {
"url": "https://repo1",
"auth": {
"username": "repo1user",
"password": "repo1pass"
}
},
"repo2": {
"url": "https://repo2"
}
},
"proxy": {
"host": "proxyhost",
"port": 9018,
"auth": {
"username": "proxyuser",
"password": "proxypass"
}
}
}
}
'
8.1. 货车
对使用 Maven 使用传输的支持有限。目前,这 存在以支持对基于存储库的抢占式身份验证 并且需要手动启用。Wagon
http
基于货车的运输是通过设置属性启用的 自。然后,您可以为每个远程启用抢占式身份验证 存储 库。配置松散地遵循HttpClient HTTP Wagon中的类似模式。 在撰写本文时,Maven自己网站上的文档略有误导性 并且缺少大多数可能的配置选项。http
maven.use-wagon
true
命名空间包含所有与Wagon相关的设置,其正下方的键映射到支持的方法 - 即,,,和,就像Maven自己的配置一样。 在这些方法配置下,您可以设置各种选项,例如。用于发送身份验证的简单抢占式配置 包含对指定远程存储库的所有请求的标头类似于以下示例:maven.remote-repositories.<repo>.wagon.http
http
http
all
put
get
head
use-preemptive
maven:
use-wagon: true
remote-repositories:
springRepo:
url: https://repo.example.org
wagon:
http:
all:
use-preemptive: true
auth:
username: user
password: password
您可以调整 forandrequest 的设置,而不是配置方法,如下所示:all
get
head
maven:
use-wagon: true
remote-repositories:
springRepo:
url: https://repo.example.org
wagon:
http:
get:
use-preemptive: true
head:
use-preemptive: true
use-default-headers: true
connection-timeout: 1000
read-timeout: 1000
headers:
sample1: sample2
params:
http.socket.timeout: 1000
http.connection.stalecheck: true
auth:
username: user
password: password
有,,,请求和 HttpClient 的设置。有关参数的更多信息, 请参阅货车配置实用程序。use-default-headers
connection-timeout
read-timeout
headers
params
9. 安全
默认情况下,数据流服务器不安全,并在未加密的 HTTP 连接上运行。 可以通过启用 HTTPS 来保护 REST 终结点以及数据流仪表板 并要求客户端使用OAuth 2.0 进行身份验证。
附录Azure包含有关如何 设置Azure Active Directory集成。 |
默认情况下,REST 终结点(管理、管理和运行状况)以及仪表板 UI 不需要经过身份验证的访问。 |
虽然理论上您可以选择任何OAuth提供商 Spring Cloud Data Flow,我们建议使用CloudFoundry用户帐户和身份验证(UAA)服务器。
UAA OpenID不仅经过认证,并且被Cloud Foundry使用,而且您可以 还可以在本地独立部署方案中使用它。此外,UAA不 仅提供自己的用户存储,但也提供全面的 LDAP 集成。
9.1. 启用 HTTPS
默认情况下,仪表板、管理和运行状况终结点使用 HTTP 作为传输。 您可以通过向配置中添加证书来切换到 HTTPS,如以下示例所示:application.yml
server:
port: 8443
ssl:
key-alias: yourKeyAlias
key-store: path/to/keystore
key-store-password: yourKeyStorePassword
key-password: yourKeyPassword
trust-store: path/to/trust-store
trust-store-password: yourTrustStorePassword
作为默认端口,您可以选择将端口更改为更常见的 HTTP 典型端口。 |
密钥库中存储密钥的别名(或名称)。 |
密钥库文件的路径。还可以通过使用类路径前缀来指定类路径资源 - 例如:。 |
密钥库的密码。 |
密钥的密码。 |
信任库文件的路径。还可以通过使用类路径前缀来指定类路径资源 - 例如: |
信任存储区的密码。 |
如果启用了HTTPS,它将完全取代HTTP作为协议 REST 终结点和数据流仪表板交互。纯 HTTP 请求 失败。因此,请确保相应地配置命令行管理程序。 |
使用自签名证书
出于测试目的或在开发过程中,创建自签名证书可能很方便。 要开始使用,请执行以下命令以创建证书:
$ keytool -genkey -alias dataflow -keyalg RSA -keystore dataflow.keystore \
-validity 3650 -storetype JKS \
-dname "CN=localhost, OU=Spring, O=Pivotal, L=Kailua-Kona, ST=HI, C=US"
-keypass dataflow -storepass dataflow
|
然后将以下行添加到您的文件中:application.yml
server:
port: 8443
ssl:
enabled: true
key-alias: dataflow
key-store: "/your/path/to/dataflow.keystore"
key-store-type: jks
key-store-password: dataflow
key-password: dataflow
这就是数据流服务器需要执行的全部操作。启动服务器后, 您应该能够在访问它。 由于这是一个自签名证书,您应该在浏览器中点击警告,这 你需要忽略。localhost:8443/
切勿在生产中使用自签名证书。 |
自签名证书和命令行管理程序
默认情况下,自签名证书是 shell 的一个问题,以及其他步骤 是使外壳程序使用自签名证书所必需的。两个选项 可用:
- 将自签名证书添加到 JVM 信任库。
- 跳过证书验证。
将自签名证书添加到 JVM 信任库
要使用 JVM 信任库选项,您需要 从密钥库中导出先前创建的证书,如下所示:
$ keytool -export -alias dataflow -keystore dataflow.keystore -file dataflow_cert -storepass dataflow
接下来,您需要创建 shell 可以使用的信任库,如下所示:
$ keytool -importcert -keystore dataflow.truststore -alias dataflow -storepass dataflow -file dataflow_cert -noprompt
现在,您可以使用以下 JVM 参数启动数据流外壳:
$ java -Djavax.net.ssl.trustStorePassword=dataflow \
-Djavax.net.ssl.trustStore=/path/to/dataflow.truststore \
-Djavax.net.ssl.trustStoreType=jks \
-jar spring-cloud-dataflow-shell-2.9.6.jar
如果在通过 SSL 建立连接时遇到问题,可以启用其他 通过使用和设置 JVM 参数进行日志记录。 |
不要忘记使用以下命令以数据流服务器为目标:
dataflow:> dataflow config server https://localhost:8443/
跳过证书验证
或者,您也可以通过提供 可选命令行参数。--dataflow.skip-ssl-validation=true
如果设置此命令行参数,shell 将接受任何(自签名)SSL 证书。
如果可能,应避免使用此选项。禁用信任管理器 违背了 SSL 的目的,使您的应用程序容易受到中间人。 |