微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何让 kubernetes.client.api.batch_v1_api.BatchV1Api.delete_namespaced_job 等到删除完成

如何解决如何让 kubernetes.client.api.batch_v1_api.BatchV1Api.delete_namespaced_job 等到删除完成

删除并重新提交同名的作业,但经常收到 409 HTTP 错误,并显示一条消息,指出正在删除对象——我的提交在作业对象被删除之前进行。

我目前的解决方案是反复尝试,直到我能够提交作业。我不喜欢。这看起来很丑陋,我想知道是否有办法以等待对象完全删除的方式调用删除例程。根据 this 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)

我发现了一个类似的问题,还有the answer suggests to use watch,这意味着我需要在一个单独的线程中启动一个手表,发出删除命令,加入等待手表确认删除的线程——似乎像很多这样的代码

解决方法

正如您已经提到的,kubectl delete 具有 --wait 标志可以完成这项工作,并且默认为 true

我们来看看代码,看看 kubectl 是如何实现的。 Source

waitOptions := cmdwait.WaitOptions{
    ResourceFinder: genericclioptions.ResourceFinderForResult(resource.InfoListVisitor(deletedInfos)),UIDMap:         uidMap,DynamicClient:  o.DynamicClient,Timeout:        effectiveTimeout,Printer:     printers.NewDiscardingPrinter(),ConditionFn: cmdwait.IsDeleted,IOStreams:   o.IOStreams,}
err = waitOptions.RunWait()

另外还有 RunWait()IsDeleted() 函数定义。

现在回答您的问题:

[...] 这意味着我需要在一个单独的线程中启动一个手表,发出删除命令,加入等待手表确认删除的线程 - 似乎有很多代码用于这样的事情

看起来确实如此 - 代码很多,但我没有看到任何替代方案。如果您想等待删除完成,您需要手动进行。似乎没有其他办法可以解决它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?