Skip to content

Submitting Workloads via HTTP/REST

You can submit Workloads via HTTP calls, using the Kubernetes REST API.

Submit Workload Example

To submit a workload via HTTP, run the following:

curl -X POST \ #  
'https://<IP>:6443/apis/run.ai/v2alpha1/namespaces/<PROJECT>/trainingworkloads' \ 
    --header 'Content-Type: application/yaml' \
    --header 'Authorization: Bearer <BEARER>' \  #  
    --data-raw 'apiVersion: run.ai/v2alpha1
kind: TrainingWorkload  # 
metadata:
  name: job-1    
spec:
  gpu:
    value: "1"
  image:
    value: gcr.io/run-ai-demo/quickstart
  name:
    value: job-1  

Run: runai list jobs to see the new Workload.

Delete Workload Example

To delete a workload run:

curl -X DELETE \ #  
'https://<IP>:6443/apis/run.ai/v2alpha1/namespaces/<PROJECT>/trainingworkloads/<JOB-NAME>' \ 
    --header 'Content-Type: application/yaml' \
    --header 'Authorization: Bearer <BEARER>'   # 

Suspend/Stop workload example

To suspend or stop a workload run:

curl -X PATCH \ #  
'https://<IP>:6443/apis/run.ai/v2alpha1/namespaces/<PROJECT>/interactiveworkload/<JOB-NAME>' \
    --header 'Content-Type: application/merge-patch+json' \
    --header 'Authorization: Bearer <TOKEN>' \ #  
    --data '{"spec":{"active": {"value": false}}}'

Using other Programming Languages

You can use any Kubernetes client library together with the YAML documentation above to submit workloads via other programming languages. For more information see Kubernetes client libraries.

Python example

Create the following file and run it via python:

create-train.py
import json
import requests

# 
url = "https://<IP>:6443/apis/run.ai/v2alpha1/namespaces/<PROJECT>/trainingworkloads"

payload = json.dumps({
  "apiVersion": "run.ai/v2alpha1",
  "kind": "TrainingWorkload",
  "metadata": {
    "name": "train1",
    "namespace": "runai-team-a"
  },
  "spec": {
    "image": {
      "value": "gcr.io/run-ai-demo/quickstart"
    },
    "name": {
      "value": "train1"
    },
    "gpu": {
      "value": "1"
    }
  }
})

headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer <TOKEN>' #
}

response = requests.request("POST", url, headers=headers, data=payload) # 

print(json.dumps(json.loads(response.text), indent=4))