docker - 从 OpenShift 运行 Kubernetes Cron 作业以定期调用 REST 端点
问题描述
我正在研究如何在 RedHat OpenShift 上将 Spring Batch 作业作为 Kubernetes 计划作业运行。步骤已经完成,
1) 创建了一个示例 Spring Batch 应用程序,该应用程序读取一个 .csv 文件,该文件进行简单处理并将一些数据放入内存中的 h2 DB。作业启动器作为 REST 端点 ( /load ) 调用。源代码可以在这里找到。请参阅 README 文件以获取端点信息。
2) 创建 Docker Image 并推送到DockerHub
3) 使用该映像作为应用程序部署到我的 OpenShift Online 集群
我想做的是,
从 OpenShift 运行 Kubernetes Cron 作业以调用/load REST 端点,该端点定期启动 SpringBatch 作业
有人可以在这里指导我如何实现这一目标吗?
谢谢
萨姆
解决方案
最简单的方法是卷曲您的/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 作业的更多信息
这是来自作业 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
到带有 path: 的请求 /load
。
让我知道这是否有帮助。
推荐阅读
- java - 在 Azure 中使用 Selenium 和 Cucumber 的 ERR_CONNECTION_TIMED_OUT
- authentication - 我希望在 Prestashop 1.6 中插入“登录”按钮而不是联系表格
- yui - 如何在 SuiteCRM 中使用 Yahoo YUI
- netcdf - 我可以同时重新映射和压缩 NETCDF 吗?
- javascript - 使用交互式 OpenStreetMap 以 HTML 形式输入经纬度
- python - 按优先级排序列表
- angular - 使用角度从arraylist更新firebase
- apache-nifi - Apache Nifi - 拆分数组并格式化为 JSON?
- python - Python Selenium 从父级拉取子级属性?
- docker - 结合 VOLUME + docker run -v