Kubernetes - 作业调度 API

Posted

技术标签:

【中文标题】Kubernetes - 作业调度 API【英文标题】:Kubernetes - Job scheduling API 【发布时间】:2018-07-09 19:20:27 【问题描述】:

我正在尝试在 Kubernetes 中安排作业。

https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/

可以使用以下命令创建作业。

$ kubectl create -f ./cronjob.yaml
cronjob "hello" created

是否有任何 REST API 可用于从 Java 客户端创建作业?

谢谢

【问题讨论】:

kubectl 实际上只是 REST API 的包装。 所以,我们可以直接打剩余的端点。是否有关于作业调度的 REST 端点的任何文档? 【参考方案1】:

the official API reference 中描述了相应的 REST 端点。您将在batch/v1beta1 API 组中找到CronJob 资源。要创建新的 CronJob 资源,您需要对 /apis/batch/v1beta1/namespaces/namespace/cronjobs URL 进行 POST 调用。

相应的 HTTP 请求可能如下所示:

POST /apis/batch/v1beta1/namespaces/default/cronjobs HTTP/1.1
Content-Type: application/json
Content-Length: ...
Authorization: ...
[other headers]


  "metadata": 
    "name": "some-cron"
  ,
  "spec": 
    ...
  

还有相同资源的旧版本,例如batch/v2alpha1 API group。根据经验,我建议您使用可用的最新 API 版本。特别是,不要在生产中依赖 alpha API;它们往往会在版本之间很快弃用。

要使用 Java 客户端创建 batch/v1beta1 CronJob,请查看 io.kubernetes.client.openapi.apis.BatchV1beta1Api 类的 createNamespacedCronJob method。

【讨论】:

API 参考的 URL 已过时并指向 404。这是指向 API v1.17 reference 的链接 @suda 感谢您的提示!我已经更新了 anwser 中的链接,并在其他一些方面也更新了它。【参考方案2】:

HTTP 请求

POST /apis/batch/v1beta1/namespaces/namespace/cronjobs

您可以在此处查看 API 概述:cronjob-v1beta1-batch

在请求正文中添加 CronJob 对象。


  "apiVersion": "batch/v1beta1",
  "kind": "CronJob",
  "metadata": 
    "name": "hello"
  ,
  "spec": 
    "schedule": "*/1 * * * *",
    "jobTemplate": 

    
  

在此处查看其规格:writing-a-cron-job-spec

swagger.json的一部分

"post": 
 "description": "create a CronJob",
 "consumes": [
  "*/*"
 ],
 "produces": [
  "application/json",
  "application/yaml",
  "application/vnd.kubernetes.protobuf"
 ],
 "schemes": [
  "https"
 ],
 "tags": [
  "batch_v1beta1"
 ],
 "operationId": "createBatchV1beta1NamespacedCronJob",
 "parameters": [
  
   "name": "body",
   "in": "body",
   "required": true,
   "schema": 
    "$ref": "#/definitions/io.k8s.api.batch.v1beta1.CronJob"
   
  
 ],
 "responses": 
  "200": 
   "description": "OK",
   "schema": 
    "$ref": "#/definitions/io.k8s.api.batch.v1beta1.CronJob"
   
  ,
  "201": 
   "description": "Created",
   "schema": 
    "$ref": "#/definitions/io.k8s.api.batch.v1beta1.CronJob"
   
  ,
  "202": 
   "description": "Accepted",
   "schema": 
    "$ref": "#/definitions/io.k8s.api.batch.v1beta1.CronJob"
   
  ,
  "401": 
   "description": "Unauthorized"
  
 ,
 "x-kubernetes-action": "post",
 "x-kubernetes-group-version-kind": 
  "group": "batch",
  "kind": "CronJob",
  "version": "v1beta1"
 

查看全文swagger.json

【讨论】:

以上是关于Kubernetes - 作业调度 API的主要内容,如果未能解决你的问题,请参考以下文章

作业帮 Kubernetes 原生调度器优化实践

无法两次跟踪流明作业调度

如何使用 Google Cloud 调度程序 Python api 创建作业

如何检查是不是在 Firebase 作业调度程序中安排了作业?

智能作业调度

quartz开源作业调度框架的使用