我在这里介绍的是我的设置的简化版本,语法错误。
我有一个高级“代理”列表,我想将它们作为 pod 部署在 kubernetes 集群上。
该集群中的一些节点有特殊硬件,一些没有,但所有 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,但我认为它不适合我。我猜我可能找不到解决方案,因为我的词汇表不正确。
有人有什么好主意吗?我走的路对吗?
答案1
我可能会用MetaController 复合控制器以及定义代理的自定义资源。但需要编码。它看起来比实际要复杂得多。
基本上,您会定期通过 HTTP 接收描述资源当前状态的同步挂钩,并使用 JSON 响应来创建/销毁它们。