我在这里展示的是我的设置的简化版本,并且语法错误。
我有一个高级“代理”列表,我想在 kubernetes 集群上部署为 pod。
这个集群中的一些节点有特殊的硬件,一些没有,但是所有的 pod 都应该使用同一个容器。
可能看起来像(再次:语法错误):
agent1 wlan
...
agent8 wlan
agent9 wlan rs232.1
agent10 wlan rs232.2
我设置了一个大致看起来像这样的部署(语法错误):
deployment (standard nodes)
replicas: 8
---
deployment (rs232, terminal 1)
replicas: 1
nodeSelector:
rs232=1
env:
rs232=1 (because nodeSelector can't be passed nicely afaik)
---
deployment (rs232, terminal 2)
replicas: 1
nodeSelector:
rs232=2
env:
rs232=2
我希望这些代理中的每一个都启动并从列表中获取一个身份,当然同时拥有匹配的硬件。
所以就像一个 pod 会像这样与一个角色分发服务交谈:
pod - Hi, I'm pod/container-xyz and I have env/label/annotation rs232=2
service - Hi, well then you are now agent10
pod - OK I'll do the work of agent10 then
(service - cool, I'll add agent10 as an alias to you in the cluster DNS) <- that will be my next question
没有特殊硬件的代理也是如此:该服务为每个代理赋予一个代理角色。
我尝试了 StatefulSet 的一些东西,但这不符合要求(因为各种 nodeSelector 并且它们启动速度非常慢)。
我开始考虑一个专用的自我实现的服务器 pod,它会保留我的代理列表并将它们租给匹配的硬件(有点像 dhcp 服务器),但我很确定我不是唯一遇到这个问题的人,而且一定有一个解决方案。我快速查看了 Zookeeper,但我认为它不适合我。我可能找不到解决方案,因为我的词汇量不是我猜的正确词汇。
有人有好主意吗?我是否朝着正确的方向前进?
我可能会使用MetaController CompositeController和定义代理的自定义资源来实现这一点。虽然需要编码。它看起来比实际复杂得多。
基本上,您会定期通过 HTTP 接收描述资源当前状态的同步挂钩,并使用 JSON 响应以创建/销毁它们。