Kubernetes

獲取 kubernetes pod 以在啟動後承擔特定的身份/角色/作業

  • February 2, 2022

我在這裡展示的是我的設置的簡化版本,並且語法錯誤

我有一個高級“代理”列表,我想在 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 響應以創建/銷毀它們。

引用自:https://serverfault.com/questions/1085827