让 kubernetes pod 在启动后承担特定的身份/角色/工作

让 kubernetes pod 在启动后承担特定的身份/角色/工作

我在这里介绍的是我的设置的简化版本,语法错误

我有一个高级“代理”列表,我想将它们作为 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 响应来创建/销毁它们。

相关内容