From cfe3c5dee430c724e66ecca60d9e6ee2dd096e48 Mon Sep 17 00:00:00 2001 From: mandarbhosle <69084088+mandarbhosle@users.noreply.github.com> Date: Thu, 23 May 2024 08:04:28 +0100 Subject: [PATCH 1/6] Update to includes resource limits and request --- operator/netchecks_operator/main.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/operator/netchecks_operator/main.py b/operator/netchecks_operator/main.py index 311c322..dc974e2 100644 --- a/operator/netchecks_operator/main.py +++ b/operator/netchecks_operator/main.py @@ -17,6 +17,7 @@ V1Volume, V1VolumeMount, V1SecretVolumeSource, + V1ResourceRequirements, ) from structlog import get_logger from rich import print @@ -693,6 +694,7 @@ def create_job_spec( image_pull_policy=settings.probe.image.pullPolicy, command=command, volume_mounts=volume_mounts, + resources=client.V1ResourceRequirements(limits=settings.probe.resources["limits"],requests=settings.probe.resources["requests"]), env=[ # V1EnvVar(name="NETCHECK_CONFIG", value="/netcheck/") ], From c3167ae6a848e235059aff58b2cb1f662ed008e9 Mon Sep 17 00:00:00 2001 From: mandarbhosle <69084088+mandarbhosle@users.noreply.github.com> Date: Thu, 23 May 2024 08:13:37 +0100 Subject: [PATCH 2/6] Configmap changes to include resources limits and requests --- operator/charts/netchecks/templates/configmap.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/operator/charts/netchecks/templates/configmap.yaml b/operator/charts/netchecks/templates/configmap.yaml index 5b61738..90baa74 100644 --- a/operator/charts/netchecks/templates/configmap.yaml +++ b/operator/charts/netchecks/templates/configmap.yaml @@ -12,6 +12,16 @@ data: "repository":{{ .Values.probeConfig.image.repository | quote }}, "tag":{{ .Values.probeConfig.image.tag | default .Chart.AppVersion | quote }} }, + "resources": { + "limits": { + "cpu":{{ .Values.probeConfig.resources.limits.cpu | quote }}, + "memory":{{ .Values.probeConfig.resources.limits.memory | quote }} + }, + "requests": { + "cpu":{{ .Values.probeConfig.resources.requests.cpu | quote }}, + "memory":{{ .Values.probeConfig.resources.requests.memory | quote }} + } + }, "imagePullSecrets": {{ .Values.probeConfig.imagePullSecrets | toJson }}, "podAnnotations": {{ .Values.probeConfig.podAnnotations | toJson }} } From 3fcf1f827df90619b5477ed6abca51ae8bf61d36 Mon Sep 17 00:00:00 2001 From: mandarbhosle <69084088+mandarbhosle@users.noreply.github.com> Date: Sun, 23 Jun 2024 23:54:11 +0100 Subject: [PATCH 3/6] Update configmap.yaml --- .../charts/netchecks/templates/configmap.yaml | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/operator/charts/netchecks/templates/configmap.yaml b/operator/charts/netchecks/templates/configmap.yaml index 90baa74..80884f4 100644 --- a/operator/charts/netchecks/templates/configmap.yaml +++ b/operator/charts/netchecks/templates/configmap.yaml @@ -12,16 +12,15 @@ data: "repository":{{ .Values.probeConfig.image.repository | quote }}, "tag":{{ .Values.probeConfig.image.tag | default .Chart.AppVersion | quote }} }, - "resources": { - "limits": { - "cpu":{{ .Values.probeConfig.resources.limits.cpu | quote }}, - "memory":{{ .Values.probeConfig.resources.limits.memory | quote }} - }, - "requests": { - "cpu":{{ .Values.probeConfig.resources.requests.cpu | quote }}, - "memory":{{ .Values.probeConfig.resources.requests.memory | quote }} - } - }, + {{- if .Values.probeConfig.resources }} + "resources": {{ .Values.probeConfig.resources | toJson }}, + {{- end }} + {{- if .Values.probeConfig.tolerations }} + "tolerations": {{ .Values.probeConfig.tolerations| toJson }}, + {{- end }} + {{- if .Values.probeConfig.affinity }} + "affinity": {{ .Values.probeConfig.affinity | toJson }}, + {{- end }} "imagePullSecrets": {{ .Values.probeConfig.imagePullSecrets | toJson }}, "podAnnotations": {{ .Values.probeConfig.podAnnotations | toJson }} } From 0344ec609e814ecbc537c5cdaaba6395264fe600 Mon Sep 17 00:00:00 2001 From: mandarbhosle <69084088+mandarbhosle@users.noreply.github.com> Date: Sun, 23 Jun 2024 23:55:43 +0100 Subject: [PATCH 4/6] Update config.py --- operator/netchecks_operator/config.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/operator/netchecks_operator/config.py b/operator/netchecks_operator/config.py index 9ce1660..4063f48 100644 --- a/operator/netchecks_operator/config.py +++ b/operator/netchecks_operator/config.py @@ -44,6 +44,8 @@ class ProbeConfig(BaseModel): image: ImageConfig = ImageConfig() resources: dict[str, dict] = {} verbose: bool = False # Don't enable until the operator has been modified to split stdout and stderr + tolerations: list[dict] = [] + affinity: dict[str, dict] = {} class Config(BaseSettings): From 4b52b1cd2babf6b880e5e52c3950f25870cb890a Mon Sep 17 00:00:00 2001 From: mandarbhosle <69084088+mandarbhosle@users.noreply.github.com> Date: Sun, 23 Jun 2024 23:58:43 +0100 Subject: [PATCH 5/6] Update main.py --- operator/netchecks_operator/main.py | 74 ++++++++++++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/operator/netchecks_operator/main.py b/operator/netchecks_operator/main.py index dc974e2..0f4dc4f 100644 --- a/operator/netchecks_operator/main.py +++ b/operator/netchecks_operator/main.py @@ -685,7 +685,29 @@ def create_job_spec( if disable_redaction: command.append("--disable-redaction") + + resources1 = {} + try: + str1={} + resource=settings.probe.resources + + if "limits" in resource: + str1["limits"]=resource["limits"] + else: + str1["limits"]=None + + if "requests" in resource: + str1["requests"]=resource["requests"] + else: + str1["requests"]=None + + print(str1) + resources1=client.V1ResourceRequirements(requests=str1["requests"],limits=str1["limits"]) + + except: + pass + logger.info("Probe command", command=command) container = client.V1Container( name="netcheck", @@ -694,11 +716,61 @@ def create_job_spec( image_pull_policy=settings.probe.image.pullPolicy, command=command, volume_mounts=volume_mounts, - resources=client.V1ResourceRequirements(limits=settings.probe.resources["limits"],requests=settings.probe.resources["requests"]), + resources=resources1, env=[ # V1EnvVar(name="NETCHECK_CONFIG", value="/netcheck/") ], ) + + # Tolerations + tolerations = [] + try: + for i in settings.probe.tolerations: + if "key" in i: + key = i["key"] + else: + key = None + if "operator" in i: + operator=i["operator"] + else: + operator = None + if "effect" in i: + effect=i["effect"] + else: + effect = None + if "value" in i: + value=i["value"] + else: + value = None + if "toleration_seconds" in i: + toleration_seconds=i["tolerationSeconds"] + else: + toleration_seconds = None + tolerations.append(client.V1Toleration(effect,key,operator,toleration_seconds,value)) + except: + pass + + # NodeAffinity + print(settings.probe.affinity) + node_selector_terms=[] + match_expressions=[] + affinity={} + + try: + for i in settings.probe.affinity["nodeAffinity"]["requiredDuringSchedulingIgnoredDuringExecution"]["nodeSelectorTerms"]: + for x in i["matchExpressions"]: + match_expressions.append(client.V1NodeSelectorRequirement(key=x["key"],operator=x["operator"],values=x["values"])) + node_selector_terms.append(client.V1NodeSelectorTerm(match_expressions=match_expressions)) + match_expressions=[] + + required_during = client.V1NodeSelector(node_selector_terms=node_selector_terms) + node_affinity = client.V1NodeAffinity(required_during_scheduling_ignored_during_execution=required_during) + affinity = client.V1Affinity(node_affinity=node_affinity) + print(affinity) + except: + pass + + # Create and configure a pod spec section labels = get_common_labels(name) labels["app.kubernetes.io/component"] = "probe" From 03c90f091b1819c71d173e1312774c23cceacbfd Mon Sep 17 00:00:00 2001 From: mandarbhosle <69084088+mandarbhosle@users.noreply.github.com> Date: Mon, 24 Jun 2024 00:04:17 +0100 Subject: [PATCH 6/6] Update main.py --- operator/netchecks_operator/main.py | 1 + 1 file changed, 1 insertion(+) diff --git a/operator/netchecks_operator/main.py b/operator/netchecks_operator/main.py index 0f4dc4f..a632af0 100644 --- a/operator/netchecks_operator/main.py +++ b/operator/netchecks_operator/main.py @@ -18,6 +18,7 @@ V1VolumeMount, V1SecretVolumeSource, V1ResourceRequirements, + V1Toleration ) from structlog import get_logger from rich import print