in eksupdate/src/k8s_client.py [0:0]
def drain_nodes(cluster_name, Nodename,forced,regionName):
''' pod eviction using eviction api '''
loading_config(cluster_name,regionName)
v1 = client.CoreV1Api()
api_response = v1.list_pod_for_all_namespaces(watch=False, field_selector='spec.nodeName=' + Nodename)
retry = 0
# print(api_response.items)
if len(api_response.items) == 0:
return "Empty Nothing to Drain"+Nodename
for i in api_response.items:
if i.spec.node_name == Nodename:
try:
if forced:
v1.delete_namespaced_pod(i.metadata.name,i.metadata.namespace,grace_period_seconds=0,body=client.V1DeleteOptions())
else:
eviction_body = kubernetes.client.models.v1beta1_eviction.V1beta1Eviction(
metadata=kubernetes.client.V1ObjectMeta(name=i.metadata.name, namespace=i.metadata.namespace))
v1.create_namespaced_pod_eviction(name=i.metadata.name,
namespace=i.metadata.namespace, body=eviction_body)
'''retry to if pod is not deleted with eviction api'''
if watcher(cluster_name, i.metadata.name) == False and retry < 2:
drain_nodes(cluster_name, i.metadata.name)
retry += 1
if retry == 2:
raise Exception(
"Error Not able to delete the Node"+i.metadata.name)
return
except Exception as e:
print(e)
# logs_pusher(e, "error")
raise Exception("Unable to Delete the Node")