我需要将流量(实时音频/视频)直接路由到特定的Pod容器中。窗格的数量应与副本集一起水平缩放。我现在的解决方案是创建一个StatefulSet,该StatefulSet的NodePort类型的服务与pod一样多。
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
这被认为是可以接受的解决方案,还是为每个吊舱创建服务的更好的解决方案?
答案 0 :(得分:1)
如上面的评论所述,我发现通过使用针对externalTrafficPolicy=Local
的StatefulSet的NodePort服务为here提供了解决方案。这将禁用不同节点之间的群集范围的负载平衡。前提条件是每个节点只能运行有状态集合中的一个Pod,这可以通过设置pod anti-affinity来实现。