私は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(...)
API バージョンごとのクライアント オブジェクトはApiClient
、コンストラクターに を渡すとステートレスになるため、必要に応じてこれらのオブジェクトを安全に作成できます。
このApiClient
クラスには明示的なclose
メソッドが含まれているため、コンテキスト マネージャーの構文を使用せずにこれを行うこともできます (安全性は低くなります)。
api_client = kubernetes.client.ApiClient(configuration)
apps_client = kubernetes.client.AppsV1Api(api_client)
...
api_client.close()
ライブラリ クライアントのフロント ページREADME
では、明示的にApiClient
. 生成されたモデルのコードの 1 つを見ると、オプションを明示的に渡さない場合、ApiClient
API バージョンのクライアント オブジェクトごとに新しいモデルが作成されます。これには接続プールも含まれます。これにより、ローカル メモリがリークし、クラスターへの余分な接続が発生する可能性がありますが、小さなスクリプトの場合は問題にならない場合があります。
于 2020-12-31T11:54:50.483 に答える