Kubernetes 很復(fù)雜,那是因?yàn)閺?fù)雜才能解決你的問(wèn)題

Kubernetes 是否過(guò)于復(fù)雜?
我經(jīng)常被問(wèn)及Kubernetes 是否復(fù)雜。在這篇文章中,我將逐一討論這些論點(diǎn)并給出答案。當(dāng)您需要和不需要 Kubernetes 時(shí),我也會(huì)向您解釋。
與虛擬機(jī)相比,使用容器的優(yōu)勢(shì)
在了解 Kubernetes 本身的復(fù)雜性之前,我們需要了解一下 Docker 容器,因?yàn)樗苍黾恿藦?fù)雜性。這種復(fù)雜性值得嗎?
幾乎每個(gè)人都會(huì)同意,即使您決定不使用 Kubernetes,您仍然應(yīng)該使用 Docker。在沒(méi)有 Kubernetes 的情況下,將 Docker 容器部署到 AWS 或其他云提供商也不難。您只需要在虛擬機(jī)上設(shè)置一個(gè)運(yùn)行 Docker 守護(hù)進(jìn)程。
Docker 容器的主要優(yōu)點(diǎn)是它們是獨(dú)立的包。它們將應(yīng)用程序的環(huán)境與其運(yùn)行的機(jī)器分離。您不再需要關(guān)心主機(jī)上存在什么庫(kù)或 Python 版本,因?yàn)?Dockerfile 使您的依賴關(guān)系明確。如果它可以在您自己的機(jī)器上運(yùn)行,那么它也可以在任何相同CPU架構(gòu)上的機(jī)器運(yùn)行。Docker 不完全是基礎(chǔ)設(shè)施即代碼,但 Dockerfiles 確實(shí)允許您將應(yīng)用程序運(yùn)行時(shí)定義為 git 存儲(chǔ)庫(kù)中的一個(gè)簡(jiǎn)單文件。
Docker 容器的另一個(gè)好處是它們是分布式應(yīng)用程序包,專為不可變基礎(chǔ)架構(gòu)的世界而設(shè)計(jì)。換句話說(shuō),它們被設(shè)計(jì)成無(wú)狀態(tài)的。容器本質(zhì)上是短暫的。如果他們死了并重新啟動(dòng)也沒(méi)關(guān)系。
什么時(shí)候不需要使用 kubernetes
當(dāng)滿足以下四個(gè)條件時(shí),您不需要 Kubernetes:
- 將極少數(shù)容器部署到極少數(shù)機(jī)器(主機(jī)),換句話說(shuō)你的用戶數(shù)量有限。
- 容器和機(jī)器的數(shù)量是靜態(tài)的,不會(huì)經(jīng)常出現(xiàn)擴(kuò)容或者縮容。
- 您的容器和機(jī)器不會(huì)經(jīng)常出現(xiàn)故障。
- 您不需要持久存儲(chǔ)、負(fù)載均衡、配置管理、服務(wù)發(fā)現(xiàn)、自動(dòng)修復(fù)、自動(dòng)縮放等其他功能?;蛘吣_實(shí)需要這些功能,但您的要求非常有限并且不介意供應(yīng)商鎖定。
換句話說(shuō),如果您有簡(jiǎn)單的要求,那么有一個(gè)更簡(jiǎn)單的 Kubernetes 替代方案。您可以將容器直接部署到運(yùn)行在幾個(gè)虛擬機(jī)上的 Docker 守護(hù)進(jìn)程。
復(fù)雜的需求就需要復(fù)雜的解決方案
當(dāng)您擁有的業(yè)務(wù)正在快速成長(zhǎng),用戶量激增,那么您可能確實(shí)需要 Kubernetes:
- 您的應(yīng)用需要處理可變的用戶負(fù)載量
- 您需要使用計(jì)算之外的其他云服務(wù) - 例如,持久存儲(chǔ)、負(fù)載均衡器、配置管理等。
- 節(jié)點(diǎn)過(guò)多,經(jīng)常出錯(cuò),您的應(yīng)用需要自動(dòng)恢復(fù)能力
- 您希望以一致的方式管理多個(gè)應(yīng)用程序和系統(tǒng)
- 您有上百個(gè)團(tuán)隊(duì)在相同的環(huán)境中工作或使用彼此的微服務(wù)
- 其它復(fù)雜場(chǎng)景
對(duì)于上述要求,您需要引入容器基礎(chǔ)設(shè)施,這意味著為大規(guī)模、動(dòng)態(tài)地部署 Docker 容器并將它們相互連接以及與其他云服務(wù)(如存儲(chǔ))進(jìn)行優(yōu)化的基礎(chǔ)設(shè)施。
該基礎(chǔ)設(shè)施最流行的形式是 Kubernetes。如果這些是您的要求,為什么不運(yùn)行 Kubernetes?當(dāng)然它很復(fù)雜,但是滿足這些要求的每個(gè)解決方案都將具有相似的復(fù)雜性。
至少對(duì)于 Kubernetes,復(fù)雜性是開源的,并且以聲明式 Kubernetes API 的形式標(biāo)準(zhǔn)化。這優(yōu)于其他公共云或內(nèi)部解決方案。
沒(méi)有 Kubernetes 和 Docker 的企業(yè)基礎(chǔ)架構(gòu)
這是仇恨者的典型主張:
Kubernetes 和 Docker 是不必要的,因?yàn)樽詣?dòng)縮放很容易,systemd 可以自我修復(fù),云提供商有用于持久卷的 API,備份應(yīng)該用主機(jī)上的 cronjobs 完成,秘密用 MyFavoriteSecretVault 完成,Consul 做配置管理,服務(wù)發(fā)現(xiàn)是 DNS ,健康檢查不是必需的,Reddit 上的一個(gè)家伙在他的上一家公司寫了一個(gè) 3000 行的 Perl 腳本用于滾動(dòng)更新,因此顯然 Kubernetes 是不必要的。
對(duì)于這些人,我只能說(shuō)祝你好運(yùn)。此外,您重新發(fā)明了 Kubernetes。
讓初學(xué)者更容易使用 Kubernetes
Kubernetes 的最大缺點(diǎn)是它預(yù)先加載了很多復(fù)雜性,但是復(fù)雜性是合理的,這就導(dǎo)致又很多東西需要預(yù)先學(xué)習(xí)。
























