如何在 Pod 之间实现 openshift 服务负载平衡?

时间:2021-07-11 08:38:41

标签: kubernetes openshift

这是一个非常基本的问题,所以我想我一定遗漏了一些明显的问题,openshift 服务是否使用循环法在 pod 之间进行负载平衡?或者它是否将请求转发到具有最大可用资源量的 pod?还是完全随机?

我的服务配置如下:

kind: service
metadata:
  name: temp
  labels:
    app: temp
spec:
  port:
    targetPort: temp-port
  to:
    kind: Service
    name: temp

1 个答案:

答案 0 :(得分:1)

在 Kubernetes(OpenShift 只是一个 Kubernetes 发行版)中,服务导致 iptables 规则。这意味着对于具有多个 Pod 的 Service,流量通过 iptables 分配/重定向到 Service 选择的不同 Pod。

例如,如果我们有一个服务选择了三个 Pod,我们可以在底层工作节点上看到以下结果 iptables 条目,其中包含 --probability

-A KUBE-SVC-C5D5TE7O3IX6LYPU -m comment --comment "openshift-logging/fluentd:metrics" -m statistic --mode random --probability 0.20000000019 -j KUBE-SEP-K7BWKR3YFNRALYRO
-A KUBE-SVC-C5D5TE7O3IX6LYPU -m comment --comment "openshift-logging/fluentd:metrics" -m statistic --mode random --probability 0.25000000000 -j KUBE-SEP-SLOSD6E2CHTNQQZ7
-A KUBE-SVC-C5D5TE7O3IX6LYPU -m comment --comment "openshift-logging/fluentd:metrics" -m statistic --mode random --probability 0.33333333349 -j KUBE-SEP-I2MJAF47DZ7EPTNC
-A KUBE-SVC-C5D5TE7O3IX6LYPU -m comment --comment "openshift-logging/fluentd:metrics" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-QCINKYOFNQTK2FRX
-A KUBE-SVC-C5D5TE7O3IX6LYPU -m comment --comment "openshift-logging/fluentd:metrics" -j KUBE-SEP-RWL5ZKQM57XO3TAF

所以您的问题的答案是通过服务的流量分配是随机的

另一方面,OpenShift Route 提供了对流量如何分配到 Pod 的更多控制。您可以选择不同的负载平衡算法。可用选项为 sourceroundrobinleastconn。 您可以在 documentation about OpenShift Routes 中找到更多选项。