Skip to content
Snippets Groups Projects

K8s development

Merged Vladimír Višňovský requested to merge k8s-development into master
5 files
+ 58
63
Compare changes
  • Side-by-side
  • Inline
Files
5
@@ -99,19 +99,20 @@ def parallel_wait():
@@ -99,19 +99,20 @@ def parallel_wait():
:return: Nothing
:return: Nothing
"""
"""
label = None
with open(f"{PICKLE_PATH}/lock.pkl","rb") as fp:
with open(f'{PICKLE_PATH}/lock.pkl', 'rb') as fp:
lock_object = pickle.load(fp)
lock_obj = pickle.load(fp)
label = lock_object['Parallel_label']
label = lock_obj['Parallel_label']
count = lock_object['Count']
 
if len(label) == 0 or count <= 0:
 
print(f"Nothing to wait for with label => {label}", file=sys.stderr)
 
return 1
if len(label) == 0:
# reset pickle
print("Nothing to wait for. Run gmx_run or orca_run with parallel flag first", file=sys.stderr)
with open(f"{PICKLE_PATH}/lock.pkl","wb") as fp:
else:
values = {"Parallel_label": "", "Count": 0}
print(run_wait(f"-l {label}"))
pickle.dump(values, fp)
label = {"Parallel_label": ""}
print(run_wait(f"-l {label} -c {count}"))
with open(f'{PICKLE_PATH}/lock.pkl', 'wb') as fp:
pickle.dump(label, fp)
def write_template(method, image, command, workdir, parallel, **kwargs):
def write_template(method, image, command, workdir, parallel, **kwargs):
@@ -130,7 +131,7 @@ def write_template(method, image, command, workdir, parallel, **kwargs):
@@ -130,7 +131,7 @@ def write_template(method, image, command, workdir, parallel, **kwargs):
default_image = ORCA_IMAGE
default_image = ORCA_IMAGE
default_name = "orca"
default_name = "orca"
# Always replace "_" with "-" because "_" is not kubernetes accepted char in the name
# Always replace "" with "-" because "" is not kubernetes accepted char in the name
method = method.replace("_", "-")
method = method.replace("_", "-")
# Set names
# Set names
@@ -140,17 +141,6 @@ def write_template(method, image, command, workdir, parallel, **kwargs):
@@ -140,17 +141,6 @@ def write_template(method, image, command, workdir, parallel, **kwargs):
doc['spec']['template']['spec']['containers'][0]['name'] = "{}-{}-deployment-{}".format(default_name, method, timestamp)
doc['spec']['template']['spec']['containers'][0]['name'] = "{}-{}-deployment-{}".format(default_name, method, timestamp)
doc['spec']['template']['metadata']['labels']['app'] = identificator
doc['spec']['template']['metadata']['labels']['app'] = identificator
# Set parallel label lock
if parallel:
with open(f"{PICKLE_PATH}/lock.pkl","rb") as fp:
lock_object = pickle.load(fp)
if len(lock_object['Parallel_label']) == 0:
label = {"Parallel_label": identificator}
with open(f"{PICKLE_PATH}/lock.pkl","wb") as fp:
pickle.dump(label, fp)
else:
doc['spec']['template']['metadata']['labels']['app'] = lock_object['Parallel_label']
# Set gromacs args
# Set gromacs args
doc['spec']['template']['spec']['containers'][0]['args'] = ["/bin/bash", "-c", DoubleQuotedScalarString(command)]
doc['spec']['template']['spec']['containers'][0]['args'] = ["/bin/bash", "-c", DoubleQuotedScalarString(command)]
@@ -161,6 +151,18 @@ def write_template(method, image, command, workdir, parallel, **kwargs):
@@ -161,6 +151,18 @@ def write_template(method, image, command, workdir, parallel, **kwargs):
arch_env = {'name': "GMX_ARCH", 'value': DoubleQuotedScalarString(arch)}
arch_env = {'name': "GMX_ARCH", 'value': DoubleQuotedScalarString(arch)}
doc['spec']['template']['spec']['containers'][0]['env'] = [double_env, rdtscp_env, arch_env]
doc['spec']['template']['spec']['containers'][0]['env'] = [double_env, rdtscp_env, arch_env]
 
# If parallel is enabled set label so kubectl logs can print logs according to label
 
if parallel:
 
with open(f"{PICKLE_PATH}/lock.pkl","rb") as fp:
 
lock_object = pickle.load(fp)
 
if len(lock_object['Parallel_label']) == 0:
 
label = {"Parallel_label": identificator, "Count": 0}
 
with open(f"{PICKLE_PATH}/lock.pkl","wb") as fp:
 
pickle.dump(label, fp)
 
else:
 
doc['spec']['template']['metadata']['labels']['app'] = lock_object['Parallel_label']
 
 
# Set image
# Set image
doc['spec']['template']['spec']['containers'][0]['image'] = default_image if not image else image
doc['spec']['template']['spec']['containers'][0]['image'] = default_image if not image else image
@@ -193,8 +195,14 @@ def run_job(kubernetes_config, label, parallel):
@@ -193,8 +195,14 @@ def run_job(kubernetes_config, label, parallel):
os.system(f"kubectl apply -f {kubernetes_config}")
os.system(f"kubectl apply -f {kubernetes_config}")
if not parallel:
if not parallel:
return run_wait(f"-l {label}")
return run_wait(f"-l {label} -c 1")
return ""
 
# increment pickle count
 
with open(f"{PICKLE_PATH}/lock.pkl","rb") as fp:
 
lock_object = pickle.load(fp)
 
with open(f"{PICKLE_PATH}/lock.pkl","wb") as fp:
 
lock_object['Count'] += 1
 
pickle.dump(lock_object, fp)
def get_no_of_procs(orca_method_file):
def get_no_of_procs(orca_method_file):
@@ -209,6 +217,7 @@ def run_wait(command):
@@ -209,6 +217,7 @@ def run_wait(command):
# Run the shell script to wait until kubernetes pod - container finishes
# Run the shell script to wait until kubernetes pod - container finishes
cmd = f"{KUBERNETES_WAIT_PATH}/kubernetes-wait.sh {command}"
cmd = f"{KUBERNETES_WAIT_PATH}/kubernetes-wait.sh {command}"
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
# Wait until k8s (kubernetes-wait.sh) finishes and return the output
# Wait until k8s (kubernetes-wait.sh) finishes and return the output
return process.communicate()[0].decode('utf-8', 'ignore')
return None if "-p" in command else process.communicate()[0].decode('utf-8', 'ignore')
 
Loading