2017-03-13 3 views
0

私はKubernetesを使い始めました。私はkubernetesに関するいくつかのクエリを持っています。負荷分散のアプローチがあり、kubernetesのドキュメントで明確な答えを見つけることができません。KubernetesクラスタのLoadBalancingについての質問

まず、「iis」というデプロイメントを作成し、それを3つのレプリカにスケーリングしました。サービスを作成せずに、これらのエンドポイントにどのようにアクセスできますか?

ここでは、ClusterIPを使用するこのデプロイメント用のサービス(3つのレプリカを持つ)を作成しました。このサービスはクラスタ内でのみ公開されています。今、サービスはクラスタ内でこのサービスに来るトラフィックをどのように負荷分散しますか?エンドポイントのラウンドロビンまたはランダムな選択を使用していますか? kubernetesのドキュメントによると、2つのサービスプロキシ、ユーザースペース、またはiptablesがあります。どのサービスが私のサービスを使用しているかをどのように知ることができますか?

次に、LoadBalancerを使用してサービスを公開しました。クラウドプロバイダにロードバランサを作成し、それを使用します。私の質問は、この外部ロードバランサがトラフィックをポッドにどのようにバランスさせるかということです。トラフィックとサービスとのバランスをとってサービスがサービスをエンドポイントにリダイレクトするか、トラフィックがエンドポイント(ポッド)に直接均等に分散されますか?また、このLoadBalancerのケースでは、内部トラフィック(クラスタ内からの)がこのサービスにどのように負荷分散されていますか?

詳細な回答をしてください。

答えて

1

まず、「iis」というデプロイメントを作成し、それを3つのレプリカにスケーリングします。サービスを作成せずに、これらのエンドポイントにどのようにアクセスできますか?

あなたは(あなたがPODのIPSを登録する標準のロードバランサなど)、このためのバンド・ソリューションのうちを持っていない限り

あなたがすることはできません。。サービスは、ポッド間の接続を容易にするためにあります。それらを使用してください!

ここで、サービスはこのサービスのトラフィックをクラスタ内でどのように負荷分散しますか?

これを理解するには、Kubernetesでのサービスの仕組みを知ることが重要です。

サービスはkube-proxyによって処理されます。

で何が起こる
-A KUBE-SERVICES ! -s 192.168.0.0/16 -d <svc-ip>/32 -p tcp -m comment --comment "namespace/service-name: cluster IP" -m tcp --dport svc-port -j KUBE-MARK-MASQ 

、iptablesのは、SVC-IP宛てのすべてのパケットを見て、その後はににそれらを指示します。KUBE-プロキシ(デフォルトでは)少しこのようになりiptablesのルールを作成し、

-A KUBE-SVC-AGR3D4D4FQNH4O33 -m comment --comment "default/redis-slave:" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-25QOXGEMBWAVOAG5 
-A KUBE-SVC-GYQQTB6TY565JPRW -m comment --comment "default/frontend:" -m statistic --mode random --probability 0.33332999982 -j KUBE-SEP-JZXZFA7HRDMGR3BA 
-A KUBE-SVC-GYQQTB6TY565JPRW -m comment --comment "default/frontend:" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-ZW5YSZGA33MN3O6G 

だから、答えは、それはです:あなたはこのような何かを見ることができます - あなたはiptablesのルールでさらに見てみると、「確率」で検索した場合、サービス

を生産しているポッドIPいくつかの確率でランダム能力の重み付け。確率が加重される方法のより完全な説明はkubernetesの文書によると、このgithub comment

で見ることができ、2つのサービスプロキシ、ユーザ空間またはiptablesのは、どのように私は私のサービスが使用している1を知ることができ、がありますか?

また、これはkube-proxyによって決定され、kube-proxyが起動するときに決定されます。これは、kube-proxyプロセスのコマンドラインフラグです。デフォルトでは、iptablesを使用します。あなたが何をしているのか分からない限り、それを固執することを強くお勧めします。

私の質問は、この外部ロードバランサがトラフィックをポッドにどのようにバランスさせるかということです。

これは、クラウドプロバイダと選択したLoadBalanceに完全に依存します。 LoadBalancerサービスタイプはNodePortにサービスを公開し、ロードバランサ上の外部ポートをそれに戻します。 すべてのLoadBalancerタイプは、サービスを提供するノードIPを外部プロバイダのロードバランサ(たとえば、内部クラスタIPサービスではなくELB)に登録します。これを判断するためにクラウドプロバイダのドキュメントを読むことをお勧めします。

また、このLoadBalancerの場合、このサービスへの内部トラフィック(ロードバランシング)はどのように負荷分散されていますか?

この場合も、クラウドプロバイダのドキュメントを参照してください。

+0

Azureロードバランサの説明に従って、「ロードバランサを設定して、VIRTUALマシン間で着信トラフィックを負荷分散することができます。 したがって、ロードバランサがノードのいずれかのNodePortにトラフィックをリダイレクトするだけであれば、そのノードで実行されているkube-proxyは、独自のスペース内で実行中のポッドを選択するか、 ? –

+0

そして空白のロードバランサはトラフィックをサービスポートにリダイレクトするだけで、ポッドの選択を決定するのはkube-proxyだから、ロードバランサの目的は何ですか?実際のロードバランシングはkube-proxyによって行われます。 –