為什么你應(yīng)該慎重考慮使用 Kubernetes

很多團(tuán)隊(duì)都很興奮地開始使用 Kubernetes。其中一些團(tuán)隊(duì)希望能充分利用它的彈性、靈活性、可移植性、可靠性以及其他的一些 Kubernetes 能原生地提供的優(yōu)勢(shì)。也有些團(tuán)隊(duì)只是熱衷于技術(shù),僅僅想使用下這個(gè)平臺(tái),來(lái)更好地了解它。還有一些開發(fā)者想獲得一些使用它的經(jīng)驗(yàn),這樣他們的簡(jiǎn)歷上就可以添加一項(xiàng)很多公司急需的技能??傊?,現(xiàn)在大部分開發(fā)者出于不同的目的都想要使用 Kubernetes。
使用 Kubernetes 有好處也有壞處。
設(shè)計(jì) Kubernetes 的初衷是用來(lái)解決分布式架構(gòu)的問題的
來(lái)看官網(wǎng)文檔網(wǎng)站[1]的定義:
“Kubernetes 為你提供了能靈活運(yùn)行分布式系統(tǒng)的框架。它的能力體現(xiàn)在對(duì)你的應(yīng)用進(jìn)行擴(kuò)縮容和故障轉(zhuǎn)移,提供部署模式,等等”。
它不是僅用于分布式系統(tǒng)的,而是用于容器化應(yīng)用。即便如此,它提供了很多可以讓管理分布式系統(tǒng)和擴(kuò)縮容變得更容易地資源,就像微服務(wù)解決方案一樣。它也被認(rèn)為是一個(gè)編排系統(tǒng)。
自動(dòng)化[2]和編排不一樣,但是也有關(guān)聯(lián)。自動(dòng)化通過減少和替換掉人與 IT 系統(tǒng)的交互使用軟件來(lái)執(zhí)行任務(wù),這樣能減少資源消耗,降低復(fù)雜度和減少錯(cuò)誤,進(jìn)而使得系統(tǒng)更加高效。
總之,自動(dòng)化表示使某單一的任務(wù)自動(dòng)執(zhí)行。它與編排不同,編排是指在多個(gè)不同的系統(tǒng)間的多個(gè)步驟中如何自動(dòng)化執(zhí)行某一個(gè)處理或工作流。當(dāng)你開始把自動(dòng)化編進(jìn)你的處理流程中時(shí),你可以編排它們,讓他們自動(dòng)執(zhí)行。
— 編排是什么?RedHat 官方網(wǎng)站[3]
換句話說,Kubernetes 使管理復(fù)雜的解決方案變得更加容易,而如果沒有適當(dāng)?shù)木幣畔到y(tǒng),這些解決方案將很難維護(hù)。雖然您可以自己實(shí)施 DevOps 工程實(shí)踐,但如果要從數(shù)十種服務(wù)擴(kuò)展到數(shù)百種服務(wù),則無(wú)法擴(kuò)展。
Kubernetes 很復(fù)雜
為了充分利用它的各個(gè)功能,開發(fā)者和 IT 操作者們必須掌握容器、網(wǎng)絡(luò)、安全、移植性、彈性和 Kubernetes 本身相關(guān)的知識(shí)。為了合理地使用它的負(fù)載,你應(yīng)該先了解每個(gè)組件是如何工作的。為了管理一個(gè)集群,你應(yīng)該了解它的架構(gòu)、存儲(chǔ)、API 和后臺(tái)管理系統(tǒng),而這可能與傳統(tǒng)的虛擬化環(huán)境不一樣。為了實(shí)施某個(gè)方案,你應(yīng)該先了解如何集成工具來(lái)部署、監(jiān)控以及追蹤服務(wù),諸如 Helm[4] 和 Istio[5]。這里涉及大量的新概念,因此你的團(tuán)隊(duì)要做好充足的準(zhǔn)備來(lái)迎接挑戰(zhàn)。
Kubernetes 對(duì)于小的解決方案花費(fèi)很大
為了理解原因,我們先來(lái)加深下對(duì) Kubernetes 的一個(gè)很重要的概念的認(rèn)識(shí) — 彈性。為了體現(xiàn)彈性,你需要更多的節(jié)點(diǎn) — 比運(yùn)行應(yīng)用程序所需的最少節(jié)點(diǎn)數(shù)要多一點(diǎn)。當(dāng)某個(gè)節(jié)點(diǎn)掛掉時(shí),請(qǐng)求的 pod 會(huì)遷移到可用的節(jié)點(diǎn)。在生產(chǎn)中的工作負(fù)載,為了集群有彈性,推薦至少部署三個(gè)節(jié)點(diǎn)。
如果你只需要維護(hù)一個(gè)單一的應(yīng)用,那么顯然不需要像上面那樣做。但是即使你有十幾個(gè)應(yīng)用,你仍然要考慮維護(hù)集群的收益和集群的開銷是否平衡。
**維護(hù)環(huán)境的開銷還包括運(yùn)維支持。**平臺(tái)越復(fù)雜,對(duì)運(yùn)維人員的專業(yè)性要求就越高。你可能需要雇傭第三方的專業(yè)團(tuán)隊(duì)來(lái)提供支持,或者需要一個(gè)諸如 Openshift 的包含支持服務(wù)的解決方案。
什么時(shí)候該選擇 Kubernetes
基于你使用的架構(gòu),應(yīng)用的數(shù)量和各應(yīng)用間的依賴程度,你的團(tuán)隊(duì)能提供的運(yùn)維能力,你可以在眾多可用的技術(shù)中判斷 Kubernetes 是否是最佳選擇。

按照基于容器的 Web 應(yīng)用[6]部署完后,你有了一套可以用于生產(chǎn)的環(huán)境。在遵照流程做了完整的計(jì)劃,有 SSL 特性,并安裝了 Application Insights[7] 后,你的環(huán)境會(huì)變得安全、可伸縮,幾乎不需要運(yùn)維工作。
如果你的應(yīng)用都是獨(dú)立的,或者只連接了少量的應(yīng)用,也許在同一個(gè)虛擬網(wǎng)絡(luò)中組合使用 Azure Web Apps 和 容器實(shí)例[8]就足夠了。
然而,如果你的容器化的應(yīng)用數(shù)量會(huì)增長(zhǎng),那么使用 Kubernetes 管理他們會(huì)很有趣。你會(huì)在單一的、集中式的環(huán)境中管理像 Web 應(yīng)用,API 和 循環(huán)的任務(wù)等不同類型的應(yīng)用。你的團(tuán)隊(duì)也能把精力放在 Kubernetes 而不是浪費(fèi)在選擇不同的云原生解決方案上。
如果你要處理分布式的場(chǎng)景,像微服務(wù),那么請(qǐng)選擇 Kubernetes。分布式架構(gòu)很復(fù)雜,而 Kubernetes 就是為它設(shè)計(jì)的。能完全契合分布式的應(yīng)用,以及可以根據(jù)應(yīng)用的需求進(jìn)行擴(kuò)展,除了 Kubernetes,我想不到更好的任何其他平臺(tái)。
總結(jié)
當(dāng)你只需要處理少量的容器化的應(yīng)用、各應(yīng)用相互獨(dú)立的或者應(yīng)用間幾乎不相互依賴時(shí),選擇其他的管理方式如基于容器的 Web 應(yīng)用[9]或Azure 容器實(shí)例[10] — 或者兩者結(jié)合 — 可能更簡(jiǎn)單,花費(fèi)更少。
如果你的團(tuán)隊(duì)對(duì) Kubernetes 的能力很滿意,并且你的容器化的應(yīng)用數(shù)量會(huì)越來(lái)越多,那么可能值得你在一個(gè) Kubernetes 平臺(tái)(如 Azure Kubernetes 服務(wù)[11])中進(jìn)行集中式管理。
*Kubernetes 是一個(gè)用來(lái)提高性能和減少分布式系統(tǒng)中運(yùn)維工作的平臺(tái)。*它主要用來(lái)降低復(fù)雜場(chǎng)景(如 微服務(wù))中運(yùn)維的復(fù)雜度。
如果你不需要處理大量的應(yīng)用,沒有使用分布式架構(gòu),或者團(tuán)隊(duì)中沒有技術(shù)專家,那么你就不能享受到 Kubernetes 帶來(lái)的便利 — 因?yàn)樗皇菫槟阍O(shè)計(jì)的。使用 Kubernetes 只會(huì)給你的解決方案增加意外和不符合預(yù)期的復(fù)雜度。
如果你想更好地了解容器化應(yīng)用的管理方式和如何選擇最適合的方式,那么請(qǐng)查閱下面的文章:
為你的應(yīng)用選擇 Azure 計(jì)算服務(wù)[12]
via: https://medium.com/better-programming/why-not-use-kubernetes-52a89ada5e22
作者:Grazi Bonizi[13]譯者:lxbwolf[14]校對(duì):polaris1119[15]
本文由 GCTT[16] 原創(chuàng)編譯,Go 中文網(wǎng)[17] 榮譽(yù)推出
參考資料
官網(wǎng)文檔網(wǎng)站: https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/
[2]自動(dòng)化: https://www.redhat.com/en/topics/automation
[3]編排是什么?RedHat 官方網(wǎng)站: https://www.redhat.com/en/topics/automation/what-is-orchestration
[4]Helm: https://helm.sh/
[5]Istio: https://istio.io/
[6]基于容器的 Web 應(yīng)用: https://azure.microsoft.com/en-us/services/app-service/containers/
[7]Application Insights: https://docs.microsoft.com/en-us/azure/azure-monitor/app/cloudservices
[8]容器實(shí)例: https://azure.microsoft.com/en-us/services/container-instances/
[9]基于容器的 Web 應(yīng)用: https://azure.microsoft.com/en-us/services/app-service/containers/
[10]Azure 容器實(shí)例: https://azure.microsoft.com/en-us/services/container-instances/
[11]Azure Kubernetes 服務(wù): https://azure.microsoft.com/en-us/services/kubernetes-service/
[12]為你的應(yīng)用選擇 Azure 計(jì)算服務(wù): https://docs.microsoft.com/en-us/azure/architecture/guide/technology-choices/compute-decision-tree
[13]Grazi Bonizi: https://medium.com/@grazibonizi
[14]lxbwolf: https://github.com/lxbwolf
[15]polaris1119: https://github.com/polaris1119
[16]GCTT: https://github.com/studygolang/GCTT
[17]Go 中文網(wǎng): https://studygolang.com/
推薦閱讀
