簡體   English   中英

Kubernetes使用自定義算法擴展Pod

[英]Kubernetes scaling pods using custom algorithm

我們的雲應用程序包含3個緊密耦合的Docker容器:Nginx,Web和Mongo。 當前,我們在單個計算機上運行這些容器。 但是,隨着用戶數量的增加,我們正在尋找可擴展的解決方案。 使用Kubernetes,我們將形成一個多容器容器。 如果要復制,則需要將所有3個容器復制為一個單元。 我們的雲應用程序被移動應用程序用戶使用。 我們的應用程序每個工人節點只能處理大約30000個用戶,我們打算在單個工人節點上放置一個Pod。 一旦移動設備連接到工作節點,它就必須繼續僅使用該機器(唯一的IP地址)

我們計划使用Kubernetes管理容器。 負載平衡不適用於我們的用例,因為一旦分配了移動設備就需要將其綁定到一台機器上,並且每個Pod均以其自己的持久卷獨立工作。 但是,如果用戶數量超過30000,我們需要一種在工作節點上旋轉新Pod的方法,依此類推。

我們的想法是,我們有某種自定義調度程序,可根據該節點上的用戶數量為移動設備分配一個工作節點(域/ IP地址)。

Kubernetes是否非常適合此設計,以及如何實現自定義的pod scale算法。

謝謝

對喬納·本頓的答案進行小抄:

盡管這在技術上是可能的-您的問題不是Kubernetes而是應用程序! 讓我指出你的問題:

我們的雲應用程序包含3個緊密耦合的Docker容器,Nginx,Web和Mongo。

這是您的第一個問題:是您只能將這三個容器一起部署,而不能獨立部署嗎?您無法擴展一個或另一個! 雖然MongoDB可以擴展到瘋狂的負載-如果將它與Web服務器和Web應用程序捆綁在一起,它將無法...

因此,您的第一步是分解這三個組件,以便可以彼此獨立地進行管理。 下一個:

當前,我們在單個計算機上運行這些容器。

盡管不是嚴格的問題,但我非常懷疑擴展您的應用程序意味着什么以及可伸縮性帶來的挑戰!

一旦移動設備連接到工作節點,它就必須繼續僅使用該機器(唯一的IP地址)

現在,這是一個問題。 您正在尋找在Kubernetes上運行應用程序的方法,但我認為您不理解這樣做的后果:Kubernetes協調您的資源。 這意味着它將在節點之間(必要時移至同一節點)(通過殺死和重新創建)移動容器。 它實現了這種完全自主的功能(這很棒,並且可以讓您睡個好覺)。如果您依賴客戶端堅持使用單個節點IP,那么您將在半夜起床,因為Kubernetes嘗試糾正節點發生故障,移動了您的Pod,該Pod現在不見了,用戶無法連接。 您需要利用Kubernetes中的負載平衡功能(服務)。 只有他們能夠處理Kubernetes集群中發生的動態變化。

使用Kubernetes,我們將形成一個多容器容器。

我們還有另一個贏家-不! 您正在嘗試將Kubernetes視為您的本地基礎架構! 如果繼續這樣做,您將失敗並詛咒Kubernetes!

現在,我告訴您一些您在想錯的事情-如果我不提供有關如何進行這項工作的建議,那么我將成為一個什么樣的人:

在Kubernetes中,您的三個應用程序不應在一個Pod中運行! 它們應在單獨的Pod中運行:

隨時問您還有其他問題!

支持構建自定義調度程序並同時運行多個調度程序:

https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/

就是說,對於kubernetes是否適合這種設計的問題,我的回答是:並非如此。

K8可能難以操作,其收益在於它為整個類別的工作負載提供了開箱即用的自動化和彈性水平。

此工作負載不是其中之一。 為了獲得任何好處,您必須編寫一種調度程序來處理此應用程序遇到的邊緣故障和錯誤情況(短時間內丟失節點會發生什么情況……),這對於k8s來說是有意義的。 而且,您必須加快正常的k8s操作速度。

憑借提供的信息,很難理解為什么僅在某些VM上運行docker並編寫一些自動化腳本,而不是使用k8來處理這種工作負載。

暫無
暫無

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

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