跨多个平台启动应用程序

Spring Cloud Data Flow 允许您从单个实例协调在不同平台上启动应用程序。平台是可以启动应用程序的位置。对于本文档,平台可以是 Kubernetes 集群和命名空间、Cloud Foundry 组织和空间,或物理服务器。本文档的目的是展示几种利用跨多个平台部署的方法。

跨多个 Kubernetes 命名空间启动任务

下图显示了跨命名空间启动任务的常见场景

Launching Tasks Across Namespaces 在此场景中,Spring Cloud Data Flow 在默认命名空间的 Kubernetes 集群中运行,用户希望能够在默认命名空间和实践命名空间中启动任务。在本练习中,我们使用 SCDF 提供的 YAML 文件将 Spring Cloud Data Flow 部署到 Minikube 上。

配置 Spring Cloud Data Flow 和设置环境

  1. 下载 SCDF 存储库,如使用 kubectl 部署中所述。但是,在继续执行“选择消息代理”部分之前,我们需要创建命名空间并将平台配置添加到 Spring Cloud Data Flow。
  2. 运行以下命令创建practice命名空间(系统已为您创建default命名空间)
kubectl create namespace practice
  1. 配置 Spring Cloud Data Flow 使用的平台。使用文本编辑器打开<{>SCDF Dir>/src/kubernetes/server/server-deployment.yaml文件,并将SPRING_APPLICATION_JSON属性替换为以下值
- name: SPRING_APPLICATION_JSON
  value: '{ "maven": { "local-repository": null, "remote-repositories": { "repo1": { "url": "https://repo.spring.io/libs-snapshot"} } },"spring.cloud.dataflow.task":{"platform.kubernetes.accounts":{"default":{"namespace" : "default"},"practice":{"namespace" : "practice"}}} }'
  1. 继续按照说明操作,从选择消息代理步骤开始,直到完成所有步骤。
  2. 要让 Spring Cloud Data Flow 在多个命名空间中启动任务,需要更新 Spring Cloud Data Flow 服务的 RBAC 策略。为此,请运行以下命令
kubectl create clusterrolebinding scdftestrole --clusterrole cluster-admin --user=system:serviceaccount:default:scdf-sa

scdf-sa用户将集群角色设置为cluster-admin不建议在生产环境中使用,但在本例中,它仅用于演示目的。

注册预构建任务

本练习使用 Spring Cloud Data Flow 提供的预构建时间戳应用程序。如果您尚未注册预构建的任务应用程序,

  1. 请在浏览器中打开 Spring Cloud Data Flow UI。
  2. 单击页面左侧的 **应用程序** 选项卡。
  3. 单击页面顶部的 **添加应用程序** 按钮。 注册任务应用程序按钮
  4. 出现 **添加应用程序** 页面时,单击“从 dataflow.spring.io 导入应用程序启动器”选项。 批量导入应用程序
  5. 单击 **适用于 Docker 的任务应用程序启动器** 单选按钮。 选择 Docker 进行导入
  6. 点击页面底部的**导入应用程序**按钮。

创建任务定义

在本节中,我们将创建两个任务定义:timestamp-tasktimestamp-task-2。我们将在特定平台上启动每个任务定义。

创建 timestamp-task 定义

  1. 点击界面左侧的**任务**选项卡。
    Select Task Tab
  2. 点击页面上的**创建任务**按钮。
  3. 在文本框中输入 timestamp
  4. 点击**创建任务**按钮。 创建时间戳任务
  5. 当**创建任务**对话框出现时,在**名称**字段中输入 timestamp-task
  6. 点击**创建任务**按钮。 命名新任务定义

要创建 timestamp-task-2 定义,请按照前面显示的 timestamp-task 说明进行操作,不同之处在于,在出现 创建任务 对话框的步骤中,名称为 timestamp-task-2

现在,两个任务定义均可用,如下所示
Task Definition List

启动任务

在本节中,我们将先在默认平台中启动 timestamp-task,然后在练习平台中启动 timestamp-task-2。为此,请执行以下操作:

  1. 单击与 timestamp-task 任务定义关联的选项控件,然后选择“**启动**”选项。 启动 timestamp-task
  2. 现在选择要在其上启动 timestamp-task 的平台 - 在本例中为 default 命名空间。 启动 timestamp-task-platform-select
  3. 单击页面底部的“**启动任务**”按钮。

要验证 Pod 是否已执行,您可以在任务执行页面中查看结果,或运行以下 kubectl 命令以查看 default 命名空间中的 Pod:

kubectl get pods --namespace default
NAME                         READY   STATUS      RESTARTS   AGE
mariadb-b94654bd4-k8vr7        1/1     Running     1          7h38m
rabbitmq-545bb5b7cb-dn5rd    1/1     Running     39         124d
scdf-server-dff599ff-68949   1/1     Running     0          8m27s
skipper-6b4d48ddc4-9p2x7     1/1     Running     0          12m
timestamp-task-v9jrm66p55    0/1     Completed   0          87s

要在 practice 命名空间中启动任务,请执行以下操作:

  1. 单击与 timestamp-task-2 任务定义关联的选项控件,然后选择“**启动**”选项。 启动 timestamp-task
  2. 选择您希望启动 timestamp-task 的平台 - 在本例中为 practice 命名空间。 启动 timestamp-task-platform-select
  3. 单击页面底部的“**启动任务**”按钮。

要验证 Pod 是否已执行,您可以在任务执行页面中查看结果,或运行以下 kubectl 命令以查看 default 命名空间中的 Pod:

kubectl get pods --namespace practice
NAME                          READY   STATUS      RESTARTS   AGE
timestamp-task-2-nwvk4r89vy   0/1     Completed   0          59s

调度任务

在本节中,我们将在不同的平台上创建两个计划。通过使用 Spring Cloud Data Flow 的 shell,我们创建一个计划,以便在 default 平台上每分钟启动一次 timestamp-task。 为此,请执行以下操作

  1. 通过从 Spring Cloud Data Flow shell 运行以下命令来调度任务
task schedule create --name timestamp-task-sched --definitionName timestamp-task --expression "*/1 * * * *" --platform default

它看起来像这样

dataflow:>task schedule create --name timestamp-task-sched --definitionName timestamp-task --expression "*/1 * * * *" --platform default
Created schedule 'timestamp-task-sched'
  1. 通过运行 task schedule list --platform default 命令验证是否已创建计划
dataflow:>task schedule list --platform default
╔════════════════════╤════════════════════╤════════════════════════════════════════════════════╗
║   Schedule Name    │Task Definition Name│                     Properties                     ║
╠════════════════════╪════════════════════╪════════════════════════════════════════════════════╣
║timestamp-task-sched│timestamp-task      │spring.cloud.scheduler.cron.expression = */1 * * * *║
╚════════════════════╧════════════════════╧════════════════════════════════════════════════════╝
  1. 要验证计划的应用程序是否已由 CronJob 正确创建和启动,您可以通过从 SCDF shell 运行以下命令来查看结果:task execution list(或者,您可以运行以下 kubectl 命令,并查看一分钟后开始出现的 timestamp-task-sched pod。)
kubectl get pods --namespace default
NAME                                    READY   STATUS      RESTARTS   AGE
mariadb-b94654bd4-k8vr7                   1/1     Running     1          29h
rabbitmq-545bb5b7cb-dn5rd               1/1     Running     39         125d
scdf-server-845879c9b7-xs8t6            1/1     Running     3          4h45m
skipper-6b4d48ddc4-bkvph                1/1     Running     0          4h48m
timestamp-task-sched-1591904880-p48cx   0/1     Completed   0          33s
  1. 要删除计划,请运行以下命令
dataflow:>task schedule destroy --name timestamp-task-sched --platform default
Deleted task schedule 'timestamp-task-sched'

使用 Spring Cloud Data Flow 的 shell,我们创建一个计划,以便在 practice 平台上每分钟启动一次 timestamp-task-2

  1. 要调度任务,请从 Spring Cloud Data Flow shell 运行以下命令
task schedule create --name timestamp-task-2-sched --definitionName timestamp-task --expression "*/1 * * * *" --platform practice

它看起来像这样

dataflow:>task schedule create --name timestamp-task-2-sched --definitionName timestamp-task --expression "*/1 * * * *" --platform practice
Created schedule 'timestamp-task-2-sched'
  1. 通过运行 task schedule list --platform practice 命令验证是否已创建计划,如下所示。
dataflow:>task schedule list --platform practice
╔══════════════════════╤════════════════════╤════════════════════════════════════════════════════╗
║    Schedule Name     │Task Definition Name│                     Properties                     ║
╠══════════════════════╪════════════════════╪════════════════════════════════════════════════════╣
║timestamp-task-2-sched│timestamp-task-2    │spring.cloud.scheduler.cron.expression = */1 * * * *║
╚══════════════════════╧════════════════════╧════════════════════════════════════════════════════╝
  1. 您可以通过从 SCDF shell 运行以下命令来验证结果:task execution list。或者,您可以使用以下命令启动 kubectl 命令并查看结果
glennrenfro ~/scripts: kubectl get pods --namespace practice
NAME                                      READY   STATUS      RESTARTS   AGE
timestamp-task-2-sched-1591905600-rnfks   0/1     Completed   0          17s
  1. 要删除计划,请运行以下命令
dataflow:>task schedule destroy --name timestamp-task-2-sched --platform practioce
Deleted task schedule 'timestamp-task-2-sched'

从外部 Spring Cloud Data Flow 启动跨多个平台的任务

Remote DB & SCDF

在此场景中,Spring Cloud Data Flow 及其数据存储在 Kubernetes 集群外部运行,用户希望能够在默认和实践命名空间中启动任务,同时能够从 SCDF 监控任务执行。

配置 Spring Cloud Data Flow

对于本练习,您需要访问 shell。为 Spring Cloud Data Flow 设置以下环境属性并启动它

export spring_datasource_url=<your database url>
export spring_datasource_username=<your username>
export spring_datasource_password=<your password>
export spring_datasource_driverClassName=<your driverClassName>
export spring_profiles_active=cloud
export jbp_config_spring_auto_reconfiguration='{enabled: false}'
export spring_cloud_dataflow_features_schedulesEnabled=true
export spring_cloud_dataflow_features_tasks_enabled=true
export SPRING_APPLICATION_JSON="{\"spring.cloud.dataflow.task\":{\"platform.local.accounts\":{\"default\":{\"timeout\" : \"60\"}},\"platform.kubernetes.accounts\":{\"kzone\":{\"namespace\" : \"default\"},\"practice\":{\"namespace\" : \"practice\"}}}}"

java -jar spring-cloud-dataflow-server/target/spring-cloud-dataflow-server-<version>.jar

配置 Kubernetes 中的数据库服务以连接到外部数据库

在本练习中启动的任务需要访问连接到 SCDF 正在使用的外部数据库的数据库服务。为此,我们创建一个数据库服务以及一个引用外部数据库的端点。在本例中,我们连接到 MariaDB 数据库。

  1. 设置数据库服务
apiVersion: v1
kind: Service
metadata:
  name: mariadb-mac
spec:
  ports:
    - protocol: TCP
      port: 1443
      targetPort: 3306
  1. 设置指向本地 MariaDB 的端点
apiVersion: v1
kind: Endpoints
metadata:
  name: mariadb-mac
subsets:
  - addresses:
      - ip: 192.168.1.72
    ports:
      - port: 3306
  1. 现在,获取新创建的 mariadb-mac 服务的 集群 IP,以便您可以使用它来启动和调度任务。为此,请运行以下命令(在本例中,MariaDB 实例在您的本地机器上运行)
kubectl get svc mariadb-mac

此命令的结果类似于

NAME        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
mariadb-mac   ClusterIP   <ext db conn>   <none>        1443/TCP   44m

注册应用程序

要注册练习所需的应用程序,请按照此部分中的说明进行操作。

启动任务

启动任务时添加以下命令行参数(将 <ext db conn> 替换为 kubectl get svc mariadb-mac 提供的 CLUSTER-IP)

--spring.datasource.url=jdbc:mariadb://<外部数据库连接>:1443/<您的数据库>

它应该类似于下图: 时间戳任务启动

要验证任务是否已启动,请选择页面左侧的**任务执行**选项卡,以查看类似于下图的结果: 时间戳任务执行

此外,您还可以通过查看 default 命名空间的 Pod 列表来验证启动

kubectl get pods --namespace default
NAME                          READY   STATUS      RESTARTS   AGE
timestamp-task-kzkpqjp936     0/1     Completed   0          38s

启动任务时添加以下命令行参数

--spring.datasource.url=jdbc:mariadb://<外部数据库连接>:1443/<您的数据库>

它应该类似于下图: Timestamp-task 启动

要验证任务是否已启动,请选择页面左侧的**任务执行**选项卡,以查看类似于下图的结果: timestamp-task 执行

此外,您可以通过查看 practice 命名空间的 Pod 列表来验证启动,如下例所示

kubectl get pods --namespace practice
NAME                          READY   STATUS      RESTARTS   AGE
timestamp-task-2-pkwzevl0mp   0/1     Completed   0          48s

调度任务

在本节中,我们将在不同的平台上创建两个计划。通过使用 Spring Cloud Data Flow 的 shell,我们创建一个计划,该计划在 default 平台上每分钟启动一次 timestamp-task

  1. 要调度任务,请从 Spring Cloud Data Flow shell 运行以下命令
task schedule create --name timestamp-task-sched --definitionName timestamp-task --expression "*/1 * * * *" --platform default --properties "app.docker-timestamp.spring.datasource.url=jdbc:mariadb://<ext db conn>:1443/<your db>"

它看起来像这样

dataflow:>task schedule create --name timestamp-task-sched --definitionName timestamp-task --expression "*/1 * * * *" --platform default --properties "app.docker-timestamp.spring.datasource.url=jdbc:mariadb://10.100.231.80:1443/task"
Created schedule 'timestamp-task-sched'
  1. 要验证是否已创建计划,请运行 task schedule list --platform default 命令并查看结果。
dataflow:>task schedule list --platform default
╔════════════════════╤════════════════════╤════════════════════════════════════════════════════╗
║   Schedule Name    │Task Definition Name│                     Properties                     ║
╠════════════════════╪════════════════════╪════════════════════════════════════════════════════╣
║timestamp-task-sched│timestamp-task      │spring.cloud.scheduler.cron.expression = */1 * * * *║
╚════════════════════╧════════════════════╧════════════════════════════════════════════════════╝
  1. 要验证计划的应用程序是否已由 CronJob 正确创建和启动,请从 SCDF Shell 运行 task execution list 或运行以下 kubectl 命令以查看 timestamp-task-sched pod 是否在一分钟后开始出现。
kubectl get pods --namespace default
NAME                                    READY   STATUS      RESTARTS   AGE
timestamp-task-sched-1592229780-f5w6w   0/1     Completed   0          15s
  1. 要删除计划,请运行以下命令
dataflow:>task schedule destroy --name timestamp-task-sched --platform default
Deleted task schedule 'timestamp-task-sched'

通过使用 Spring Cloud Data Flow 的 shell,我们创建一个计划,该计划在 practice 平台上每分钟启动一次 timestamp-task-2

  1. 要调度任务,请从 Spring Cloud Data Flow shell 运行以下命令
task schedule create --name timestamp-task-2-sched --definitionName timestamp-task --expression "*/1 * * * *" --platform practice --properties "app.docker-timestamp.spring.datasource.url=jdbc:mariadb://<ext db conn>:1443/<your db>"

它看起来像这样

dataflow:>task schedule create --name timestamp-task-2-sched --definitionName timestamp-task --expression "*/1 * * * *" --platform practice --properties "app.docker-timestamp.spring.datasource.url=jdbc:mariadb://10.100.231.80:1443/task"
Created schedule 'timestamp-task-2-sched'
  1. 要验证是否已创建计划,请运行 task schedule list --platform practice 命令并查看结果。
dataflow:>task schedule list --platform practice
╔══════════════════════╤════════════════════╤════════════════════════════════════════════════════╗
║    Schedule Name     │Task Definition Name│                     Properties                     ║
╠══════════════════════╪════════════════════╪════════════════════════════════════════════════════╣
║timestamp-task-2-sched│timestamp-task-2    │spring.cloud.scheduler.cron.expression = */1 * * * *║
╚══════════════════════╧════════════════════╧════════════════════════════════════════════════════╝

dataflow:>task schedule destroy --name timestamp-task-2-sched --platform practice
Deleted task schedule 'timestamp-task-2-sched'
  1. 要验证计划的应用程序是否已由 CronJob 正确创建和启动,请从 SCDF Shell 运行 task execution list 或运行以下 kubectl 命令以查看 timestamp-task-sched pod 是否在一分钟后开始出现。
glennrenfro ~/scripts: kubectl get pods --namespace practice
NAME                                      READY   STATUS      RESTARTS   AGE
timestamp-task-2-sched-1592230980-bngbc   0/1     Completed   0          19s
  1. 要删除计划,请运行以下命令
dataflow:>task schedule destroy --name timestamp-task-2-sched --platform practice
Deleted task schedule 'timestamp-task-2-sched'

在不同类型的平台上启动任务

Remote DB & SCDF 在此场景中,Spring Cloud Data Flow 在 Kubernetes 和 Cloud Foundry 之外运行,并且您希望在这两个平台上启动任务。

配置 Spring Cloud Data Flow

对于本练习,您需要访问 shell。设置 Spring Cloud Data Flow 的以下环境属性并启动它。

export spring_datasource_url=<your database url>
export spring_datasource_username=<your username>
export spring_datasource_password=<your password>
export spring_datasource_driverClassName=<your database driverClassNanme>
export spring_profiles_active=cloud
export jbp_config_spring_auto_reconfiguration='{enabled: false}'
export spring_cloud_dataflow_features_schedulesEnabled=true
export spring_cloud_dataflow_features_tasks_enabled=true
export SPRING_APPLICATION_JSON="{\"spring.cloud.dataflow.task\":{\"platform.kubernetes.accounts\":{\"kzone\":{\"namespace\" : \"default\"}},\"platform.cloudfoundry.accounts\":{\"cfzone\":{\"connection\":{\"url\":\"https://myconnection\",\"domain\":\"mydomain\",\"org\":\"myorg\",\"space\":\"myspace\",\"username\":\"admin\",\"password\":\"password\",\"skipSslValidation\":true},\"deployment\":{\"deleteRoutes\":false,\"services\":\"garsql,atscheduler\",\"enableRandomAppNamePrefix\":false,\"memory\":3072,\"schedulerUrl\":\"<myschedulerurl>\"},}}}}{\"spring.cloud.dataflow.task\":{\"platform.kubernetes.accounts\":{\"kzone\":{\"namespace\" : \"default\"}}}}{\"spring.cloud.dataflow.task\":{\"platform.local.accounts\":{\"local\":{\"timeout\" : \"60\"}}}}"

java -jar spring-cloud-dataflow-server/target/spring-cloud-dataflow-server-2.6.0.BUILD-SNAPSHOT.jar

本练习假设用户拥有一个可从 Cloud Foundry 和 Kubernetes 环境访问的外部数据库。

注册应用程序

在本练习中,SCDF 将启动时间戳应用程序的 Docker 和 Maven 镜像。

注册应用程序

  1. 按照注册预构建任务中的说明,注册 SCDF 提供的示例 docker 任务应用程序。
  2. 如下所示注册时间戳的 maven 实例
  3. 点击页面顶部的**添加应用程序**按钮,如下图所示: 注册任务应用程序按钮
  4. 当出现**添加应用程序**页面时,点击**注册一个或多个应用程序**单选按钮,如下图所示: 注册新镜像
  5. 输入信息,如下图所示: 选择 Docker 进行导入
  6. 点击页面底部的**导入应用程序**按钮。

创建任务定义

在本节中,我们将创建两个任务定义:timestamp-tasktimestamp-task-2。每个任务定义都在特定的平台上启动。

要创建 k8-timestamp 定义,请执行以下操作:

  1. 单击界面左侧的**任务**选项卡,如下图所示
    Select Task Tab
  2. 单击**创建任务**按钮。
  3. 在文本框中输入 timestamp
  4. 单击**创建任务**按钮,如下图所示: 创建时间戳任务
  5. 出现**创建任务**对话框时,在**名称**字段中输入 k8-timestamp
  6. 点击 **创建任务 (CREATE THE TASK)** 按钮,如下图所示: 命名新的任务定义

创建 cf-timestamp 定义:

  1. 单击界面左侧的**任务**选项卡,如下图所示
    Select Task Tab
  2. 单击**创建任务**按钮。
  3. 在文本框中输入 maven-timestamp
  4. 点击 **创建任务 (CREATE TASK)** 按钮,如下图所示: 创建时间戳任务
  5. 当 **创建任务 (Create Task)** 对话框出现时,在 **名称 (Name)** 字段中输入 cf-timestamp
  6. 点击 **CREATE THE TASK(创建任务)** 按钮,如下图所示: 命名新的任务定义

现在,两个任务定义都可用,如下图所示
CF Task Definition List

启动任务

在本部分中,我们将分别在 cfzone(Cloud Foundry)平台上启动 cf-timestamp,在 kzone(Kubernetes)平台上启动 k8-timestamp。

  1. 点击与 cf-timestamp 任务定义关联的行左侧的选项控件,然后选择 **Launch(启动)** 选项,如下图所示: 启动 timestamp-task
  2. 现在,选择您要启动 cf-timestamp 的平台(在本例中为 cfzone 命名空间),如下图所示: 启动 cf-timestamp-task-platform-select
  3. 单击页面底部的“**启动任务**”按钮。

要验证应用程序是否已运行,您可以在任务执行页面中查看结果,或启动以下 cf apps 命令以在已配置的组织和空间中查看应用程序。

cf tasks cf-timestamp
Getting tasks for app cf-timestamp in org scheduling / space glenn as admin...
OK

id   name                                                                          state       start time                      command
7    cf-timestamp                                                                  SUCCEEDED   Mon, 15 Jun 2020 18:09:00 UTC   JAVA_OPTS="-agentpath:$PWD/.java-buildpack/open_jdk_jre/bin/jvmkill-1.16.0_RELEASE=printHeapHistogram=1 -Djava.io.tmpdir=$TMPDIR -XX:ActiveProcessorCount=$(nproc) -Djava.ext.dirs=$PWD/.java-buildpack/container_security_provider:$PWD/.java-buildpack/open_jdk_jre/lib/ext -Djava.security.properties=$PWD/.java-buildpack/java_security/java.security $JAVA_OPTS" && CALCULATED_MEMORY=$($PWD/.java-buildpack/open_jdk_jre/bin/java-buildpack-memory-calculator-3.13.0_RELEASE -totMemory=$MEMORY_LIMIT -loadedClasses=14335 -poolType=metaspace -stackThreads=250 -vmOptions="$JAVA_OPTS") && echo JVM Memory Configuration: $CALCULATED_MEMORY && JAVA_OPTS="$JAVA_OPTS $CALCULATED_MEMORY" && MALLOC_ARENA_MAX=2 SERVER_PORT=$PORT eval exec $PWD/.java-buildpack/open_jdk_jre/bin/java $JAVA_OPTS -cp $PWD/. org.springframework.boot.loader.JarLauncher

现在,要在 kzone (kubernetes) 平台上的默认命名空间中启动任务。

  1. 单击与 k8-timestamp 任务定义关联的行上的选项控件,然后选择“**启动**”选项,如下图所示: 启动 k8-timestamp-task
  2. 现在选择您希望启动 k8-timestamp 的平台 - 在本例中为 kzone 命名空间,如下图所示: 启动 k8- timestamp-task-platform-select
  3. 单击页面底部的“**启动任务**”按钮。

要验证 Pod 是否已运行,您可以在任务执行页面中查看结果,或通过启动以下 kubectl 命令来查看 default 命名空间中的 Pod

kubectl get pods
NAME                        READY   STATUS      RESTARTS   AGE
k8-timestamp-rpqw00d175     0/1     Completed   0          39s

调度任务

在本节中,我们将创建两个计划,每个计划都在不同的平台上。通过使用 Spring Cloud Data Flow 的 shell,我们创建一个计划,该计划每分钟在 cfzone Cloud Foundry 平台上启动一次 cf-timestamp 任务定义,并在 minikube 的 default 命名空间上启动 k8-timestamp 任务定义。

  1. 为 Cloud Foundry 平台创建计划
task schedule create --name timestamp-task-cf-sched --definitionName cf-timestamp --expression "*/1 * ? * *"  --platform cfzone --properties "app.maven-timestamp.spring.datasource.url=<your database url>"
  1. 要验证计划是否已创建,请运行 task schedule list --platform cfzone 命令并查看结果
task schedule list --platform cfzone
╔═══════════════════════╤════════════════════╤════════════════════════════════════════════════════╗
║     Schedule Name     │Task Definition Name│                     Properties                     ║
╠═══════════════════════╪════════════════════╪════════════════════════════════════════════════════╣
║timestamp-task-cf-sched│cf-timestamp        │spring.cloud.scheduler.cron.expression = */1 * ? * *║
╚═══════════════════════╧════════════════════╧════════════════════════════════════════════════════╝
  1. 通过对您配置的组织和空间运行 cf apps 命令,验证任务定义定义的应用程序是否已部署到 Cloud Foundry
cf apps
Getting apps in org scheduling / space glenn as admin...
name                    requested state   instances   memory   disk   urls
cf-timestamp            stopped           0/1         3G       1G
  1. 通过对您配置的组织和空间运行 cf job-history timestamp-task-cf-sched 命令,验证计划的 timestamp-task-cf-sched 是否实际启动
cf job-history timestamp-task-cf-sched
Getting scheduled job history for timestamp-task-cf-sched in org scheduling / space glenn as admin
1 - 6 of 6 Total Results
Execution GUID                         Execution State   Scheduled Time                  Execution Start Time            Execution End Time              Exit Message
4c588ee2-833d-47a6-84cb-ebfcc90857e9   SUCCEEDED         Mon, 15 Jun 2020 18:07:00 UTC   Mon, 15 Jun 2020 18:07:00 UTC   Mon, 15 Jun 2020 18:07:00 UTC   202 - Cloud Controller Accepted Task
  1. 通过运行 SCDF shell task schedule destroy 命令删除计划
```shell script
task schedule destroy --name timestamp-task-k8-sched --platform kzone
Deleted task schedule 'timestamp-task-k8-sched'
  1. 为 Kubernetes 平台创建计划
task schedule create --name timestamp-task-k8-sched --definitionName k8-timestamp --expression "*/1 * * * *" --platform kzone --properties "app.timestamp.spring.datasource.url=<your database url>"
  1. 通过运行 task schedule list --platform kzone 命令验证计划是否已创建,并查看结果
task schedule list --platform kzone
╔═══════════════════════╤════════════════════╤════════════════════════════════════════════════════╗
║     Schedule Name     │Task Definition Name│                     Properties                     ║
╠═══════════════════════╪════════════════════╪════════════════════════════════════════════════════╣
║timestamp-task-k8-sched│k8-timestamp        │spring.cloud.scheduler.cron.expression = */1 * * * *║
╚═══════════════════════╧════════════════════╧════════════════════════════════════════════════════╝
  1. 现在,通过在默认命名空间上运行 kubectl get pods 命令,验证由任务定义定义的应用程序是否已部署到 Kubernetes。
glennrenfro ~/scripts: kubectl get pods
NAME                                       READY   STATUS      RESTARTS   AGE
timestamp-task-k8-sched-1592246880-4fx2p   0/1     Completed   0          14s
  1. 现在,通过运行 SCDF shell task schedule destroy 命令删除计划。
task schedule destroy --name timestamp-task-k8-sched --platform kzone
Deleted task schedule 'timestamp-task-k8-sched'