0

我需要将流量(实时音频/视频)直接路由到特定的 pod 容器中。pod 的数量应该使用副本集水平扩展。我现在的解决方案是创建一个包含与 pod 一样多的 NodePort 类型服务的 StatefulSet。

apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app: foobar
  name: foobar-app
spec:
  serviceName: foobar
  replicas: 2
  selector:
    matchLabels:
      app: foobar
  template:
    metadata:
      labels:
        app: foobar
    spec:
      containers:
      - image: foobar:latest
        name: foobar
---
apiVersion: v1
kind: Service
metadata:
  name: foobar-service-0
spec:
  type: NodePort
  selector:
    statefulset.kubernetes.io/pod-name: foobar-app-0
  ports:
    - protocol: TCP
      nodePort: 30036
      port: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: foobar-service-1
spec:
  type: NodePort
  selector:
    statefulset.kubernetes.io/pod-name: foobar-app-1
  ports:
    - protocol: TCP
      nodePort: 30037
      port: 3000

这被认为是一种可接受的解决方案,还是有更好的为每个 pod 创建服务的解决方案?

4

1 回答 1

1

正如上面评论中所解释的,我发现这里提供的解决方案是使用 NodePort 服务来定位 StatefulSet 和externalTrafficPolicy=Local. 这将禁用不同节点之间的集群范围负载平衡。前提是每个节点只能运行有状态集的一个 pod,这可以通过设置pod 反亲和性来实现。

于 2020-03-13T08:00:39.100 回答