【问题标题】:Closing client connection to kubernetes API server in python client在 python 客户端中关闭客户端与 kubernetes API 服务器的连接
【发布时间】:2021-04-07 13:43:51
【问题描述】:

我在 python 中使用kubernetes-client 库并查看various examples,看来我们不需要显式关闭与 API 服务器的客户端连接。客户端连接是否会自动终止,或者示例是否缺少关闭连接的调用?我还找到了 API 的文档页面(例如AppsV1),其中显示的示例使用上下文管理器进行调用,因此连接会在那里自动断开,但我仍然对不使用上下文管理器的脚本有疑问接近。

【问题讨论】:

    标签: python python-3.x kubernetes kubernetes-apiserver kubernetes-python-client


    【解决方案1】:

    Kubernetes 的 API 是基于 HTTP 的,因此您通常可以在不显式关闭连接的情况下逃脱。如果您有一个简短的脚本,则应该在脚本末尾自动清理内容,并且可以不显式关闭内容。

    您链接到的特定文档页面显示了一种安全的方法:

    with kubernetes.client.ApiClient(configuration) as api_client:
        api_instance = kubernetes.client.AppsV1Api(api_client)
        api_instance.create_namespaced_controller_revision(...)
    

    如果您将 ApiClient 传递给其构造函数,则每个 API 版本的客户端对象是无状态的,因此可以安全地根据需要创建这些对象。

    ApiClientincludes 是一个显式的 close 方法,因此您也可以在没有上下文管理器语法的情况下执行此操作(不太安全):

    api_client = kubernetes.client.ApiClient(configuration)
    apps_client = kubernetes.client.AppsV1Api(api_client)
    ...
    api_client.close()
    

    库客户端首页README 建议的路径未明确创建ApiClient。查看one of the generated models' code,如果您没有明确传递ApiClient 选项,将为每个API 版本的客户端对象创建一个新选项;这也包括一个连接池。这可能会泄漏本地内存并导致与集群的额外连接,但对于小型脚本来说,这对您来说可能无关紧要。

    【讨论】:

    • > 如果您有一个简短的脚本,则应该在脚本末尾自动清理内容,并且可以不明确关闭内容。剧本是短还是长有什么关系?能详细点吗?
    • 客户端对象维护一个连接池。如果您有一个长时间运行的脚本,并且不关闭客户端,则池中的连接可能会保持打开的时间比您需要的时间长得多。在较短的脚本中,脚本完成后连接永远不会保持打开状态。
    猜你喜欢
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    相关资源
    最近更新 更多