sigs.k8s.io/kueue@v0.6.2/site/static/examples/python/sample-job.py (about)

     1  #!/usr/bin/env python3
     2  
     3  import argparse
     4  from kubernetes import config, client
     5  
     6  # create_job.py
     7  # This example will demonstrate full steps to submit a Job.
     8  
     9  # Make sure your cluster is running!
    10  config.load_kube_config()
    11  crd_api = client.CustomObjectsApi()
    12  api_client = crd_api.api_client
    13  
    14  
    15  def get_parser():
    16      parser = argparse.ArgumentParser(
    17          description="Submit Kueue Job Example",
    18          formatter_class=argparse.RawTextHelpFormatter,
    19      )
    20      parser.add_argument(
    21          "--job-name",
    22          help="generateName field to set for job",
    23          default="sample-job-",
    24      )
    25      parser.add_argument(
    26          "--image",
    27          help="container image to use",
    28          default="gcr.io/k8s-staging-perf-tests/sleep:v0.1.0",
    29      )
    30      parser.add_argument(
    31          "--args",
    32          nargs="+",
    33          help="args for container",
    34          default=["30s"],
    35      )
    36      return parser
    37  
    38  
    39  def generate_job_crd(job_name, image, args):
    40      """
    41      Generate an equivalent job CRD to sample-job.yaml
    42      """
    43      metadata = client.V1ObjectMeta(
    44          generate_name=job_name, labels={"kueue.x-k8s.io/queue-name": "user-queue"}
    45      )
    46  
    47      # Job container
    48      container = client.V1Container(
    49          image=image,
    50          name="dummy-job",
    51          args=args,
    52          resources={
    53              "requests": {
    54                  "cpu": 1,
    55                  "memory": "200Mi",
    56              }
    57          },
    58      )
    59  
    60      # Job template
    61      template = {"spec": {"containers": [container], "restartPolicy": "Never"}}
    62      return client.V1Job(
    63          api_version="batch/v1",
    64          kind="Job",
    65          metadata=metadata,
    66          spec=client.V1JobSpec(
    67              parallelism=1, completions=3, suspend=True, template=template
    68          ),
    69      )
    70  
    71  
    72  def main():
    73      """
    74      Run a job.
    75      """
    76      parser = get_parser()
    77      args, _ = parser.parse_known_args()
    78  
    79      # Generate a CRD spec
    80      crd = generate_job_crd(args.job_name, args.image, args.args)
    81      batch_api = client.BatchV1Api()
    82      print(f"📦️ Container image selected is {args.image}...")
    83      print(f"⭐️ Creating sample job with prefix {args.job_name}...")
    84      batch_api.create_namespaced_job("default", crd)
    85      print(
    86          'Use:\n"kubectl get queue" to see queue assignment\n"kubectl get jobs" to see jobs'
    87      )
    88  
    89  
    90  if __name__ == "__main__":
    91      main()