0

私はPython でkubernetes-clientライブラリを使用しており、さまざまな例を見ると、API サーバーへのクライアント接続を明示的に閉じる必要はないようです。クライアント接続は自動的に終了しますか、それとも例に接続を閉じるための呼び出しがありませんか? また、API のドキュメント ページ ( AppsV1など) も見つけました。そこに示されている例では、呼び出しにコンテキスト マネージャーを使用しているため、そこで接続が自動的に切断されますが、コンテキスト マネージャー アプローチを使用しないスクリプトについてはまだ質問があります。

4

1 に答える 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 つを見ると、オプションを明示的に渡さない場合、ApiClientAPI バージョンのクライアント オブジェクトごとに新しいモデルが作成されます。これには接続プールも含まれます。これにより、ローカル メモリがリークし、クラスターへの余分な接続が発生する可能性がありますが、小さなスクリプトの場合は問題にならない場合があります。

于 2020-12-31T11:54:50.483 に答える