Mercurial > code > home > repos > victoriametrics
diff k8s_ops.py @ 22:cd115f1ca2a8
use configmaps and a special pod refresh trick
author | drewp@bigasterisk.com |
---|---|
date | Sat, 24 Jun 2023 23:02:04 -0700 |
parents | f5777b65f035 |
children | 80e275ab2f88 |
line wrap: on
line diff
--- a/k8s_ops.py Sat Jun 24 23:00:40 2023 -0700 +++ b/k8s_ops.py Sat Jun 24 23:02:04 2023 -0700 @@ -4,7 +4,7 @@ from kubernetes import client -def refreshPodCmaps(pod_name, namespace='default'): +def refreshPodCmaps(pod_name, namespace="default"): """ Per https://ahmet.im/blog/kubernetes-secret-volumes-delay/ there could be a while until k8s updates the CM volume that a pod sees. Workaround is to edit the pod annotations. @@ -14,33 +14,32 @@ pod = api_instance.read_namespaced_pod(name=pod_name, namespace=namespace) if pod.metadata.annotations is None: pod.metadata.annotations = {} - pod.metadata.annotations['force-configmap-update'] = str(time.time()) + pod.metadata.annotations["force-configmap-update"] = str(time.time()) api_instance.replace_namespaced_pod(name=pod_name, namespace=namespace, body=pod) def firstPodName(selector): api_instance = client.CoreV1Api() - pod_list = api_instance.list_namespaced_pod(namespace='default', label_selector=selector) + pod_list = api_instance.list_namespaced_pod( + namespace="default", label_selector=selector + ) return pod_list.items[0].metadata.name def hup(ctx, deployment, process_name): - ctx.run(f'kubectl exec {deployment} -- pkill -HUP {process_name}') + ctx.run(f"kubectl exec {deployment} -- pkill -HUP {process_name}") -def replaceCmap(name, configObj): +def replaceCmap(name, dataObj): api_instance = client.CoreV1Api() api_response = api_instance.replace_namespaced_config_map( # name=name, - namespace='default', + namespace="default", body={ - 'apiVersion': 'v1', - 'kind': 'ConfigMap', - 'metadata': { - 'name': name - }, - 'data': { - 'scrape_main': json.dumps(configObj) - }, - }) + "apiVersion": "v1", + "kind": "ConfigMap", + "metadata": {"name": name}, + "data": dict((fn, json.dumps(obj)) for fn, obj in dataObj.items()), + }, + ) print(f"{name} resource_version is now {api_response.metadata.resource_version}")