kubernetesポッド内のクライアント/サーバとしてPythonでgRPCを使用しています... 同じタイプ(gRPCサーバ)の複数のポッドを起動してクライアントに接続させたいと思いますそれら(無作為に)。gRPCクライアント側の負荷分散
私は10ポッドのサーバを派遣し、それらをターゲットとするために「サービス」をセットアップしました。次に、クライアントでは、サービスのDNS名に接続しました。つまり、kubernetesはロードバランシングを行い、ランダムなサーバーポッドに移動する必要があります。 実際には、クライアントはgRPC関数を呼び出します(これはうまくいきます)が、ログを見ると、すべての呼び出しが同じサーバーポッドに送られています。
私は、クライアントが何らかの種類のDNSキャッシングを行っていると仮定し、すべての呼び出しが同じサーバーに送信されるようにします。これは本当ですか?とにかくそれを無効にし、同じスタブクライアントを設定して "新しい"呼び出しを行い、各呼び出しでDNSによって新しいIPをフェッチしますか?
毎回DNSサーバーにクエリを実行すると、負荷が分散することがわかります。
EDIT
は、おそらくキャッシュの問題は...ちょうどgRPCの動作方法かもしれません。 HTTP/2と永続的な再利用可能な接続。各通話後に「切断」する方法はありますか?
詳細な回答ありがとうございます。実際には、私はあなたが提案したものを既に行い、それぞれの要求に対して新しいチャンネルを作成しました(効率的ではありません、私は知っています)。あなたの答えから、私は、DNS内の最初のIPだけが停止するまで(使用可能な接続/強制終了/クラッシュ)、クライアントが2番目のIPに到達するまで要求を取得することを理解しています。 – Idan
はい。前述のように、LBポリシーとして最初に選択の代わりにラウンドロビンを選択できるようになるまでは、 –
通常、複数のgRPCサーバーを拡張する方法はありますか?またはクライアント側のロードバランシング? –