在 python 客户端中关闭与 kubernetes API 服务器的客户端连接

时间:2020-12-31 06:24:27

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

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

1 个答案:

答案 0 :(得分: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 版本客户端对象创建一个新选项;这也包括一个连接池。这可能会泄漏本地内存并导致与集群的额外连接,但对于小脚本,这对您来说可能无关紧要。

相关问题