Kubernetesは、クラスタに入ってくるトラフィックの負荷分散をサポートしています。しかし、クラスター内のKubernetes Serviceについてはどうでしょうか?
クラスター内サービスが通信するとき、kube-proxyと呼ばれるロードバランサーがリクエストをService Podにランダムに転送します。 Istioを使用することで、Envoyがもたらす、より複雑な負荷分散方式を追加できます。
Envoyは、ランダム、ラウンドロビン、最小リクエストなど、複数の負荷分散方式をサポートしています。
Istioを使用して、Web frontend
のすべてのトランザクションを処理する、payments
と呼ばれるサービスの最小リクエスト負荷分散方式を追加する方法を見てみましょう。paymentsサービスは3つのPodによって支えられています。
この最小リクエストアルゴリズムでは、クライアント側のEnvoyは最初にランダムに2つのインスタンスを選択します。次に、アクティブなリクエストの数が最も少ないインスタンスにリクエストを転送し、すべてのインスタンス間で負荷を均等に分散できるようにします。
この機能を有効にするには、trafficPolicyのloadBalancerに LEAST_CONN
を設定した Istio DestinationRuleを作成します。:
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: payments-load-balancer
spec:
host: payments.prod.svc.cluster.local
trafficPolicy:
loadBalancer:
simple: LEAST_CONN
Istio docsを参照して、単一のホストに複数の負荷分散方式を追加する方法を確認してください。