0

獲取本地網絡上其他kubernetes Pod的IP地址的最佳方式是什麼?Kubernetes:獲取網絡上其他Pod的IP地址

目前,我使用以下命令並解析輸出:kubectl describe pods

不幸的是,上面的命令通常需要幾秒鐘的時間才能完成(至少3秒,通常超過30秒),並且如果幾乎同時發生多個請求,我會得到503個樣式錯誤。我已經圍繞這個命令構建了一個緩存系統來緩存本地pod上的IP地址,但是當10個左右的pod喚醒並需要創建這個緩存​​時,會有很大的延遲並且往往會出現很多錯誤。我覺得我做錯了什麼。獲取網絡上其他Pod的IP地址似乎應該是一個簡單的過程。那麼得到它們的最好方法是什麼?

有關更多詳細信息,我在其容器引擎上使用了Google的kubernetes系統。運行標準的Ubuntu映像。


語境:要添加背景下,我想放在一起艙體之間共享的分佈式緩存集羣上。要做到這一點,他們都需要知道彼此的IP地址。如果爲了memcached的目的,有更簡單的方式來鏈接pods /實例,那也是有幫助的。

回答

1

對於您描述的用例,您應該使用服務。無頭服務將允許您使用my-svc.my-namespace.svc.cluster.local來引用它們。這假定你不需要知道單個節點,只需要知道如何到達其中的一個節點,因爲它將循環它們之間的循環。

如果您確實需要在連接到容器的集羣中擁有固定的網絡身份,則可以設置StatefulSet並將它們引用:app-0.my-svc.my-namespace.svc.cluster.local,app-1.my-svc.my-namespace.svc.cluster.local等。

你不應該需要以其他方式聯繫特定的pod ip,特別是因爲它們可以在任何時間重新安排並且改變他們的IP。

對於你的使用情況而言,可能更容易只使用內存緩存掌舵的圖表,它支持在StatefulSet集羣:https://github.com/kubernetes/charts/tree/master/stable/memcached

+0

Memcache需要知道網絡上參與Memcache池的所有服務器。不知道這會起作用。 – speedplane

+0

請看我的第二部分答案,當你需要使用StatefulSets知道網絡中的所有身份。 – vascop

+0

從來沒有聽說過StatefulSets,看起來他們很新,Kubernetes是一個真正的移動目標! – speedplane

1

你試過

kubectl get pods -o wide 

這也返回艙的IP地址。由於這不返回所有信息describe返回,這可能會更快。

+0

我試過這個命令,我不認爲這是更好的(也許勉強)。另外,如果這些請求中有很多(例如,每個吊艙上的每個進程都會生成一個請求),則仍然會出現503錯誤。目前,我正在使用基於文件系統的緩存自定義IP 。看起來很奇怪,沒有一種快速簡單的方法來獲取網絡上的所有IP。 – speedplane