歡迎光臨
每天分享高質量文章

為什麼需要Kubernetes?

 

Matthias Endler最近發表了一篇關於《你是否真的需要Kubernetes?》的博文,在這裡我將嘗試解釋為何我認為Kubernetes值得一探究竟,即使你只是單單想運行一些容器。
免責宣告:這並不奇怪,我對此存在偏見。我們在Zalando運行了100多個Kubernetes集群[1],並且我在Kubernetes這個專案上投入了大量資金(你可以在我的GitHub Repo[2]上看到)。你們不必要都聽取我的意見,接下來將進入正文。
Matthias Endler寫道:
Kubernetes是一個十分強大的容器編排系統。它在全球範圍內已廣受使用,支持了一些很大型的部署,但同時它也伴隨著一些代價。
特別是對於規模較小的團隊而言,會因為維護它並且因它的學習曲線陡峭導致大量耗時。
我認為Kubernetes的內聚和可擴展性API很重要,學習它也是非常值得的,即便你僅僅只想運行一堆容器。

 

運行容器

 

假設你將要運行一堆容器,你會有哪些選擇?(以下按字母順序排列)
  • Apache Mesos,http://mesos.apache.org/

  • AWS ECS,https://aws.amazon.com/ecs/

  • AWS Elastic Beanstalk(在這個討論結果[3]中我感覺可以忽略掉),https://aws.amazon.com/elasticbeanstalk/

  • AWS Fargate(無服務器型別容器),https://aws.amazon.com/fargate/

  • docker run(一個簡單可行的選擇)

  • HashiCorp Nomad,https://www.nomadproject.io/

  • Kubernetes(托管或自托管),https://kubernetes.io/

  • 更多你可能喜歡的選擇

以上只列出了我個人調研過的選項,所有的這些基本能滿足需求,但是它們提供的用戶接口差別很大:Mesos提供了容器編排,但不提供一致性的API(比較Marathon和Chronos),而且在近期我沒見過任何有使用它的公司。AWS ECS,Beanstalk和Fargate是運行容器化工作負載的選擇,但與所有專有AWS產品一樣,要求你對AWS的工作樣式有一定的信奉。這意味著你會擁有一個具有速率限制的AWS API,並緊緊依賴著AWS Lambda。AWS ECS被許多組織所使用,並且已被證實是一個可靠的選擇,但它僅提供一組有限的功能和不可擴展的API。Blox試圖解決它的一些痛點,但從最近的提交記錄來看它似乎已經停滯了(最後一次提交還是在1年前)。Nomad似乎是一個非常棒的專案,專註於簡單性並且很好地與HashiCorp公司藍圖集成,但是它提供了一個更窄的、不可擴展的HTTP API。

 

Kubernetes API

 

對比上面的選項,對我來說,Kubernetes唯一的賣點是:
  • 提供了足夠的抽象來涵蓋大多數應用程式用例:滾動部署,服務端點,入口路由,有狀態工作負載,定時批處理任務

  • 提供了一致性(通用型結構,OpenAPI規範樣式,版本,元資料標簽/註釋,規格和狀態欄位)

  • 可通過自定義註釋擴展,即Custom Resource Definitions(CRDs),以及APIserver聚合

  • 提供一定的兼容性保證(通過版本控制)

  • 被廣泛採用(所有主流雲提供商都提供托管解決方案)併在其之上打造了龐大的生態系統

  • 跨環境和實現工作:作為Kubernetes API的原生用戶,我實際上並不關心節點是如何實現的,甚至它們是否是虛擬的

我可以創建例如kube-ops-view[4], kube-downscaler[5]和kube-janitor[6]這樣的開源工具,確保它們能工作於任何標準的Kuberntes API上,無論是托管的還是自托管的。我個人沒有動力將我的時間投入到AWS ECS這種我不精通而且市場份額有限的專有技術上,我認為這種網絡效應將會盛行,我們將會看到越來越多的Kubernetes高級工具(apps、operators和其他等等)。
為何關心Kubernetes API是否是可擴展的?因為你遲早會遇到基礎架構API不能100%改寫到的用例,或者是你需要與現有的組織藍圖進行集成。Kubenetes允許你使用自定義資源(即CRDs)來擴展它的API,例如Zalando使用它來集成其現有的OAuth基礎架構以進行服務到服務身份驗證。自定義資源同時允許你在核心概念之上構建更高層級的抽象,例如Kubernetes StackSet Controller向API添加來一個新的StackSet資源,用於管理應用程式生命周期和流量切換。更多關於自定義資源的通用用例存在於Operators這個專案,這些Operators為許多工作負載定義了CRD,例如PostgreSQL、etcd、Prometheus和Elasticsearch(Zalando計劃發佈一個支持自動擴展的定製的Elasticsearch operator[7])。
也許我不是第一個寫這個的人,但我經常將Kubernetes API與Linux內核做比較:這個領域整體向Linux內核API靠攏(當我們談論容器時,99%以上指的是Linux內核功能,如cgroups/namespaces),現在我們看到了Kubernetes API類似的趨勢。或許它可能不是內核而是systemd?

運行Kubernetes

 

Kubernetes雖然很複雜,但建立Kubernetes(集群)卻不一定非常複雜或是昂貴:在DigitalOcean上創建一個集群只需不到4分鐘而且相當便宜(3個小節點每月僅需30美元,每個節點配備有2 GB記憶體和1個CPU)。所有主流的雲提供商都提供有托管型的Kubernetes產品,雖然有些不足使得開始使用存在不必要的困難。使用K3s可以更輕鬆地在Raspberry PI上運行Kubernetes。
無論實現如何,Kubernetes API都很有價值:Virtual Kubelet允許你在不關註節點的情況下運行工作負載。Microsoft已在其Azure雲中提供此功能(AKS虛擬節點)。你甚至可以嘗試使用virtual-kubelet和AWS Fargate。
現在有很多選擇可以在本地運行Kubernetes API進行開發或測試:
  • Minikube(KVM或Virtualbox)

  • kind(Docker中的Kubernetes,尤其是CI/CD管道)

  • k3s(輕量級Kubernetes,可以在Linux桌面或Raspi上運行)

雖然在本地運行Kubernetes從未如此簡單,但像kind和k3s這樣的新專案仍需要持續不斷改進。
Matthias Endler在他的博文中寫道:
研究結果就是:不要僅僅因為其他人都使用Kubernetes你就要去用它,仔細評估你的需求並檢查哪些工具能更符合場景。
我當然同意這一說法,但以我的經驗來看,人們從容器編排開始時經常會忽視“標準”Kubernetes API的價值(它不是他們的要求清單的一部分)。當我告訴他們這個事實標準,我對Kubernetes的主要論點是可擴展的API時感到非常驚訝。我知道很多公司正是因為這個原因而從AWS ECS切換到EKS:他們必須專門針對ECS去解決問題,但對於Kubernetes他們可以使用現有的為Kubernetes API創建的開源工具。雖然你不應該只是“因為每個人都這樣做”就跳進Kubernetes這個“坑”,它的用戶(組織)名單固然是一個優勢,特別是對學習生產操作來說。我開始收集一些Kubernetes的失敗案例[8],除了利用龐大的社區和改善基礎設施運營之外沒有其他原因(對托管和自托管而言都是如此)。我還沒有看到其他容器編排系統有著同樣廣泛的串列,並且,沒找到失敗案例並不意味著不存在失敗;-)

 

結論

 

不論如何你都不得不以某種方式去投資你的基礎架構設施,即使對於像ECS這樣的托管平臺,你也需要學習特定的概念,抽象以及如何避開陷阱。我相信Kubernetes可以讓你在雲提供商間,環境甚至雇主間更好地利用所學知識。
不要低估Kubernetes的複雜性,但同時也不應該忽視Kubernetes API及其生態系統的價值。
並且不要忘記,五年內將不會再有人關心Kubernetes,因為它將變得無處不在;-)

這就是互聯網,到處都存在不同的見解。做出決定,並知道權衡取捨。
相關鏈接:
  1. https://www.youtube.com/watch?v=4QyecOoPsGU

  2. https://github.com/hjacobs

  3. https://twitter.com/QuinnyPig/status/1070848346992963584

  4. https://github.com/hjacobs/kube-ops-view

  5. https://github.com/hjacobs/kube-downscaler

  6. https://github.com/hjacobs/kube-janitor

  7. https://twitter.com/otrosien/status/1110587374805966849

  8. https://srcco.de/posts/kubernetes-failure-stories.html

原文鏈接:https://srcco.de/posts/why-kubernetes.html

已同步到看一看
赞(0)

分享創造快樂