这是一个非常基本的问题,所以我想我一定遗漏了一些明显的问题,openshift 服务是否使用循环法在 pod 之间进行负载平衡?或者它是否将请求转发到具有最大可用资源量的 pod?还是完全随机?
我的服务配置如下:
kind: service
metadata:
name: temp
labels:
app: temp
spec:
port:
targetPort: temp-port
to:
kind: Service
name: temp
答案 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 的更多控制。您可以选择不同的负载平衡算法。可用选项为 source
、roundrobin
和 leastconn
。
您可以在 documentation about OpenShift Routes 中找到更多选项。