我在 python 中使用kubernetes-client库并查看各种示例,看来我们不需要显式关闭与 API 服务器的客户端连接。客户端连接是否会自动终止,或者示例是否缺少关闭连接的调用?我还找到了 API 的文档页面(例如AppsV1),其中显示的示例使用上下文管理器进行调用,因此连接会在那里自动断开,但我仍然对不使用上下文管理器方法的脚本有疑问。
问问题
332 次
1 回答
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(...)
如果您将 an 传递ApiClient
给其构造函数,则每个 API 版本的客户端对象是无状态的,因此根据需要创建这些对象是安全的。
该类包含一个显式ApiClient
方法,因此您也可以在没有上下文管理器语法的情况下执行此操作(不太安全):close
api_client = kubernetes.client.ApiClient(configuration)
apps_client = kubernetes.client.AppsV1Api(api_client)
...
api_client.close()
库客户端首页README
建议了一条未明确创建ApiClient
. 查看其中一个生成模型的代码,如果您没有ApiClient
明确传递选项,将为每个 API 版本的客户端对象创建一个新选项;这也包括一个连接池。这可能会泄漏本地内存并导致与集群的额外连接,但这对于小型脚本可能无关紧要。
于 2020-12-31T11:54:50.483 回答