我正在研究如何在RedHat OpenShift上运行Spring Batch作业作为Kubernetes计划作业。步骤已经完成,
1) 创建了一个示例 Spring Batch 应用程序,该应用程序读取一个执行简单处理的 .csv 文件并将一些数据放入内存中的 h2 数据库中。作业启动器作为 REST 终结点 (/load) 调用。源代码可以在这里找到。有关endpoint信息,请参阅自述文件。
2)创建Docker映像并推送到DockerHub
3)使用该映像作为应用程序部署到我的OpenShift在线集群
我想做的是,
从 OpenShift 运行 Kubernetes Cron 作业以调用 /load REST endpoint,该endpoint会定期启动 SpringBatch 作业
有人可以在这里指导我如何实现这一目标吗?
谢谢你
萨米
最简单的方法是卷曲/load
RESTendpoint。有一种方法可以做到这一点:
我用来替换您的应用程序的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
请求,路径为:/load
。
让我知道这是否有帮助。
我需要在linux中使用cron作业从特定的jar文件运行java类。我已经尝试了java和包含shell文件中所有jar文件的文件夹的绝对路径,它可以手动运行。 当我尝试从cron作业运行这个shell文件时,它失败了 文件夹库包含多个jar依赖项。我怀疑MyClass也应该是绝对路径。
我有一个webapp在Kubernetes集群的Docker-container中运行。该应用程序有一个endpoint,我想定期调用。应用程序在多个节点/吊舱上运行,重要的是只有一个节点执行endpoint发起的任务。我查看了Kubernetes Cron作业,但没有找到任何关于从Kubernetes Cron作业调用endpoint的文档。有人对解决这个问题有什么建议吗?在只有一个节点执行任务
问题内容: 我正在寻找一种使用PHP的方法,以检测脚本是从外壳上的手动调用运行的(我登录并运行该脚本),还是从crontab条目运行。 我有各种用php编写的维护类型脚本,这些脚本已设置为在crontab中运行。有时,我需要提前手动运行它们,或者如果发生故障/损坏,则需要运行几次。 这样做的问题是,每次手动运行脚本时,我也不想发生某些任务(发布到Twitter,发送电子邮件等)时需要设置的外部通知
问题内容: 我在Linux中安装了Jenkins,我想在用户下运行构建。 不只是一个简单的用户,而是属于访问linux计算机的用户列表的一个用户,它属于某个组,因为它具有在特定文件夹下修改/创建文件的特权。 我读过某处可以设置变量$ JENKINS_USER,但是我不知道在哪里以及如何进行设置。感谢您的时间 PS我做了一些研究,所有发布的问题都与此相似,但不相同 如果我不清楚,请阅读以下内容:通常
问题内容: 我使用指南安装了jenkins,该指南在服务器中创建了一个“ jenkins”用户,并且显然在其下运行jenkins服务器。 我在服务器上的所有设置(虚拟环境,python软件包安装)均针对其他用户(“ ci-user”)。我有什么办法可以以“ ci_user”而不是“ jenkins”的身份运行我的工作?我想避免为“詹金斯”用户再次进行所有设置。 问题答案: 文件中有变量。您可以将其
我不知道如何使用调用Spring批处理中定义的作业,文档细节对我来说是不够的。 我遵循了Spring Batch官方指南,使用Java注释(例如)在Spring Batch中编写作业,因为我希望避免使用XML配置文件来描述作业、步骤等。 到目前为止我已经: 配置类(见下文),我使用AnnotaIon将定义、、、和(带有的所有内容放入其中。 具有方法的类,该方法具有并具有注释,以导入处理作业中的数据