我删除并重新提交了同名的作业,我经常收到 409 HTTP 错误消息,指出正在删除对象——我的提交是在作业对象被删除之前提交的。
我目前的解决方案是旋转尝试,直到我能够提交工作。我不喜欢它。这看起来很丑陋,我想知道是否有办法以等待对象被完全删除的方式调用删除例程。根据这个 kubectl 等到对象被实际删除后再从删除命令返回。我想知道是否有 Python 客户端的选项。
这是我的自旋提交代码(不可运行,抱歉):
# Set up client
config.load_kube_config(context=context)
configuration = client.Configuration()
api_client = client.ApiClient(configuration)
batch_api = client.BatchV1Api(api_client)
job = create_job_definition(...)
batch_api.delete_namespaced_job(job.metadata.name, "my-namespace")
for _ in range(50):
try:
return batch_api.create_namespaced_job(self.namespace, job)
except kubernetes.client.rest.ApiException as e:
body = json.loads(e.body)
job_is_being_deleted = body["message"].startswith("object is being deleted")
if not job_is_being_deleted:
raise
time.sleep(0.05)
我希望是
batch_api.delete_namespaced_job(job.metadata.name, "my-namespace", wait=True)
batch_api.create_namespaced_job(self.namespace, job)
我发现了一个类似的问题,答案建议使用 watch,这意味着我需要在单独的线程中启动手表,发出删除命令,加入等待直到手表确认删除的线程 - 看起来像这样的事情有很多代码。