負荷分散

Kubernetesは、クラスタに入ってくるトラフィックの負荷分散をサポートしています。しかし、クラスター内のKubernetes Serviceについてはどうでしょうか?

クラスター内サービスが通信するとき、kube-proxyと呼ばれるロードバランサーがリクエストをService Podにランダムに転送します。 Istioを使用することで、Envoyがもたらす、より複雑な負荷分散方式を追加できます。

Envoyは、ランダムラウンドロビン最小リクエストなど、複数の負荷分散方式をサポートしています。

Istioを使用して、Web frontend のすべてのトランザクションを処理する、paymentsと呼ばれるサービスの最小リクエスト負荷分散方式を追加する方法を見てみましょう。paymentsサービスは3つのPodによって支えられています。

この最小リクエストアルゴリズムでは、クライアント側のEnvoyは最初にランダムに2つのインスタンスを選択します。次に、アクティブなリクエストの数が最も少ないインスタンスにリクエストを転送し、すべてのインスタンス間で負荷を均等に分散できるようにします。

load balancing

この機能を有効にするには、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を参照して、単一のホストに複数の負荷分散方式を追加する方法を確認してください。