簡體   English   中英

在 Kubernetes 中分配和維護順序 Worker-Number 或 NodeId

[英]Assign and maintain sequential Worker-Number or NodeId in Kubernetes

當 Kubernetes Spring-Boot 應用以 8 個實例啟動時,每個節點中運行的應用需要獲取 pod/容器的序列號。 運行相同應用程序的 pods/容器不應有重復的數字。 假設一個 pod 運行一個容器,一個容器只運行一個應用程序實例。

應用程序可以從 Kubernetes API 為每個 pod 提取一些唯一標識符,例如:

  • MAC 地址( networkInterface.getHardwareAddress()
  • 主機名
  • aks-default-12345677-3aks-default-12345677-3
  • targetRef.name ( my-sample-service-sandbox-54k47696e9-abcde )
  • targetRef.uid ( aa7k6278-abcd-11ef-e531-kdk8jjkkllmm )
  • IP 地址 ( 12.34.56.78 )

但是從 API 獲取此信息的應用程序無法在指定的 pod 范圍內安全地生成和分配唯一編號 [0 - Max Node Count-1]。 在這些唯一標識符上運行的任何減速器步驟(按位 &)最終都會重復這些數字。 與其他 Pod 通信是一種反模式,盡管有些方法采用共識/協議模式來實現這一點。

我的問題是: Kubernetes 是否有一種簡單的方法可以在創建時為每個節點/容器/pod 分配一個序列號 - 可能在 pod 的環境變量中? 數字可以從 0 或 1 開始,並且應該到達住宅區的最大數量的豆莢數。

背景信息和一些研究:執行UUID.randomUUID().hashCode() & 7八次將使您重復 0 和 7 之間的數字。參考文章createNodeId()有此錯誤。 上述減速器步驟實際運行的示例輸出。

{0=2, 1=1, 2=0, 3=3, 4=0, 5=1, 6=1, 7=0}
{0=1, 1=0, 2=0, 3=1, 4=3, 5=0, 6=2, 7=1}
{0=1, 1=0, 2=2, 3=1, 4=1, 5=2, 6=0, 7=1}

我繼續執行上述代碼的 1 億次運行,發現只有 0.24% 的案例具有均勻分布。

Uneven Reducers: 99760174 | Even Reducers: 239826

app以8個實例啟動,每個節點運行的app都需要獲取pod的序列號

聽起來您正在請求一個穩定的 Pod 身份 如果您將 Spring Boot 應用程序部署為StatefulSet而不是Deployment ,則此身份是 Kubernetes 的“提供的功能”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM