【问题标题】:Run a Kubernetes Cron Job from OpenShift to call a REST endpoint Periodically从 OpenShift 运行 Kubernetes Cron 作业以定期调用 REST 端点
【发布时间】:2020-05-24 20:48:21
【问题描述】:

我正在研究如何在 RedHat OpenShift 上将 Spring Batch 作业作为 Kubernetes 计划作业运行。 步骤已完成,

1) 创建了一个示例 Spring Batch 应用程序,该应用程序读取一个 .csv 文件,该文件进行简单处理并将一些数据放入内存中的 h2 DB。作业启动器作为 REST 端点 (/load) 调用。源代码可以在here找到。有关端点信息,请参阅 README 文件。

2) 创建 Docker 镜像并推送到DockerHub

3) 使用该映像作为 app 部署到我的 OpenShift Online 集群中

我想做的是,

从 OpenShift 运行 Kubernetes Cron 作业以调用 /load REST 端点,该端点会定期启动 SpringBatch 作业

有人可以在这里指导我如何实现这一目标吗?

谢谢

萨姆

【问题讨论】:

标签: docker kubernetes openshift spring-batch kubernetes-cronjob


【解决方案1】:

最简单的方法是卷曲您的/load REST 端点。 这是一种方法:

我用来替代您的应用程序的 Pod 定义(用于测试目的):

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: mendhak/http-https-echo

我使用此图像是因为它会将各种 HTTP 请求属性发送回客户端。

为 pod 创建服务:

apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  selector:
    app: myapp the selector
  ports:
    - protocol: TCP
      port: 80 #Port that service is available on
      targetPort: 80 #Port that app listens on

创建一个 CronJob:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: curljob
spec:
  jobTemplate:
    metadata:
      name: curljob
    spec:
      template:
        metadata:
        spec:
          containers:
          - command:
            - curl
            - http://myapp-service:80/load
            image: curlimages/curl
            imagePullPolicy: Always
            name: curljobt
          restartPolicy: OnFailure
  schedule: '*/1 * * * *'

您也可以使用命令来启动它:

kubectl create cronjob --image curlimages/curl curljob -oyaml --schedule "*/1 * * * *" -- curl  http://myapp-service:80/load 

当"*/1 * * * *" 将指定此CronJob 运行的频率。我已经将它设置为每分钟运行一次。 您可以查看有关如何设置 cron 作业 here 和 here 的更多信息

这是来自作业 pod 之一的 kubectl 日志的结果:

{
  "path": "/load",
  "headers": {
    "host": "myapp-service",
    "user-agent": "curl/7.68.0-DEV",
    "accept": "*/*"
  },
  "method": "GET",
  "body": "",
  "fresh": false,
  "hostname": "myapp-service",
  "ip": "::ffff:192.168.197.19",
  "ips": [],
  "protocol": "http",
  "query": {},
  "subdomains": [],
  "xhr": false,
  "os": {
    "hostname": "myapp-pod"

如您所见,应用程序收到GET 请求,路径为:/load。

如果有帮助,请告诉我。

【讨论】:

    猜你喜欢
    • 2019-11-21
    • 2018-03-22
    • 2019-08-25
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多