Hilft Dir dabei, Deine BÜNDNIS 90/DIE GRÜNEN Website zu optimieren https://green-spider.netzbegruenung.de/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

67 lines
1.9 KiB

import config
import os
from datetime import datetime
import time
import random
from pathlib import Path
import kubernetes
PENDING_LIMIT = 2
RUNNING_LIMIT = 4
INTERVAL = 10 # Seconds
def main():
# Get jobs
jobs = list(Path("./k8s-jobs").rglob("*.yaml"))
random.seed()
random.shuffle(jobs)
kubernetes.config.load_kube_config(context='giantswarm-5jka7')
v1client = kubernetes.client.CoreV1Api()
k8sclient = kubernetes.client.ApiClient()
start = datetime.utcnow()
jobs_queued = 0
while len(jobs) > 0:
# Check whether there are pods pending
pending_pods = v1client.list_pod_for_all_namespaces(
watch=False,
field_selector='status.phase=Pending',
label_selector='app=green-spider')
pending = list(pending_pods.items)
# Get running pods
running_pods = v1client.list_pod_for_all_namespaces(
watch=False,
field_selector='status.phase=Running',
label_selector='app=green-spider')
running = list(running_pods.items)
now = datetime.utcnow()
duration = now - start
# Add new job to the queue
if len(pending) < PENDING_LIMIT and len(running) < RUNNING_LIMIT:
to_be_queued = RUNNING_LIMIT - len(running)
for _ in range(to_be_queued):
job_path = jobs.pop(0)
jobs_queued += 1
duration_per_job = duration / jobs_queued
jobs_remaining = len(jobs)
print(f'{jobs_queued} jobs queued in {duration} - {jobs_remaining} jobs (estimated {duration_per_job * jobs_remaining}) remaining at {int(duration_per_job.total_seconds())} seconds per job on average')
kubernetes.utils.create_from_yaml(k8sclient, job_path)
os.remove(job_path)
time.sleep(INTERVAL)
print('No more jobs left. Done.')
if __name__ == '__main__':
main()