diff --git a/src/jobs/cut_and_transcode.py b/src/jobs/cut_and_transcode.py index b41cca27f4a841f9230b75ee298ef3cf86b42a8b..4498337efd42661c49275217cea6b342ff9621db 100644 --- a/src/jobs/cut_and_transcode.py +++ b/src/jobs/cut_and_transcode.py @@ -43,6 +43,7 @@ class CutAndTranscode(WrappedJob): def config(self) -> ContainerConfig: cfg = ContainerConfig(image="registry.git.fsmpi.rwth-aachen.de/videoag_infra/production/dominic_render_video:latest", args=["-C", self.in_dir]) cfg.mount_video_fs("/mnt/video_data") + cfg.resources("8", "12Gi") return cfg def prepare(self, cstate: "ControllerState"): diff --git a/src/jobs/wrapped_job.py b/src/jobs/wrapped_job.py index 4d7534a71f7c2ea209f02e31db65f40735e8b4e7..8f2854148e4f014fb1e7380f600d8cd4b196f4fc 100644 --- a/src/jobs/wrapped_job.py +++ b/src/jobs/wrapped_job.py @@ -10,10 +10,19 @@ class ContainerConfig: self.command = command self.args = args self.mount_video_fs_path: str | None = None + self.resources_dict: dict | None = None def mount_video_fs(self, mount_path: str): self.mount_video_fs_path = mount_path + def resources(self, cpu: str, memory: str): + self.resources_dict = { + "limits": { + "cpu": cpu, + "memory": memory + } + } + class WrappedJob(Event): diff --git a/src/kubernetes_api.py b/src/kubernetes_api.py index 47a0f793f7fd1073b8759312c89eb2a624e04003..2b1e50c88b491ba6127186a1781c77a58c0a0ab8 100644 --- a/src/kubernetes_api.py +++ b/src/kubernetes_api.py @@ -34,15 +34,7 @@ class K8sApi(): def list_worker_jobs(self) -> V1JobList: return self.batch_v1.list_namespaced_job(NAMESPACE, label_selector=f"app={WORKER_LABEL}") - def create_job(self, job: WrappedJob, resources={}): - default_res = { - "limits": { - "cpu": "1", - "memory": "1Gi" - } - } - resources = {**default_res, **resources} - + def create_job(self, job: WrappedJob): cfg = job.config() job_manifest = { @@ -76,7 +68,12 @@ class K8sApi(): "image": cfg.image, "args": cfg.args, "command": cfg.command, - "resources": resources + "resources": { + "limits": { + "cpu": "1", + "memory": "1Gi" + } + } } ], "priorityClassName": "videoag-worker-priority", @@ -118,6 +115,8 @@ class K8sApi(): } } ] + if cfg.resources_dict is not None: + job_manifest["spec"]["template"]["spec"]["containers"][0]["resources"] = cfg.resources_dict # print(f"Creating job with manifest: {json.dumps(job_manifest)}") return self.batch_v1.create_namespaced_job(NAMESPACE, job_manifest)