Kubernetes已經成為各種規(guī)模企業(yè)在生產環(huán)境事實上的容器編排平臺,在各種應用中設置Kubernetes都是基礎。
那么在Kubernetes集群之上到底要構建什么?比如,Web和API層中的無狀態(tài)應用程序是很好的初始用例,Kubernetes幫助其補足了安全性,可伸縮性和開發(fā)者生產力方面的差距。但不限于此!
服務網格
建立在Kubernetes之上的微服務網絡帶來了分布式計算問題。盡管Kubernetes解決了服務發(fā)現(xiàn),可擴展性問題,但Kubernetes生態(tài)系統(tǒng)需要適用于第7層流量網絡的解決方案。Istio和Linkerd等服務網格為微服務帶來了高級功能,例如流量控制,安全性和可觀察性等。服務網格與Envoy等代理相結合,可以為微服務提供強大的安全性和網絡抽象。而且,開發(fā)者和企業(yè)可以受益于通用框架的改編,從而提高了效率和生產率。
有狀態(tài)的工作負載
在Kubernetes中運行有狀態(tài)工作負載是一個快速發(fā)展的方向。因為Kubernetes有名為StatefulSets的內置對象,可為Pod提供網絡尋址和順序保證。將StatefulSet和應用程序運算符組合在一起可以為運行有狀態(tài)的工作負載(例如需要持久保存狀態(tài)的數(shù)據庫和舊版應用程序)提供強大的解決方案。
開發(fā)者經驗(DevEx)
Kubernetes的學習曲線很陡峭,所以對于企業(yè)開發(fā)者來說挑戰(zhàn)不小。Kubernetes的挑戰(zhàn)是有原因的,比如Kubernetes的設計僅具有極少的功能,僅提供了足夠的構建基塊即可在其之上構建自定義的平臺即服務(PaaS)。根據企業(yè)的成熟度,平臺,DevOps或SRE團隊等專業(yè)團隊可以自定義Kubernetes,并簡化應用程序開發(fā)者的工作。由于部署容器的成本和時間很少,因此對于產品開發(fā)團隊而言,自定義設置可能是一種非常強大的機制,可以提高競爭優(yōu)勢。增強的開發(fā)者體驗很大程度上歸功于產品功能的更快上市,以及嵌入式安全的最佳實踐。如Skaffold之類的工具可以被用來簡化開發(fā)者的Kubernetes,再比如微軟Azure Dev Spaces提供的快速迭代模型,可以使每個開發(fā)者在大型團隊設置中使用他們的pod實例。
無服務器
在公有云環(huán)境,不一定需要在Kubernetes上構建FaaS(功能即服務)。企業(yè)可以簡單地利用專用的無服務器解決方案,比如AWS Lambda。無服務器主要有兩個方面;開發(fā)者的經驗是只需簡單地上傳一段代碼,而不必擔心基礎架構和成本效益問題。如果在本地運行Kubernetes,則仍然可以通過PaaS工具帶來無服務器的的體驗功能。開發(fā)者只需提供他們的git repo即可啟動該服務,但這無法帶來無服務器的成本效益。在真正的無服務器模型中,僅當調用服務時,容器或進程才會進行冷啟動,如Knative之類的框架可能會將無服務器的開發(fā)者經驗和成本效率特性帶入到本地Kubernetes的部署中。
機器學習管道
基礎架構資源的有效共享是Kubernetes平臺的關鍵功能之一。CPU等硬件資源被過度分配用于工作負載,并且在需要時也會受到限制。GPU可以在多個機器學習容器工作負載之間共享,從而為本地設置帶來了成本效益。此外,還有出色的開源機器學習管道,如基于Kubernetes構建的Kubeflow。Kubeflow使數(shù)據科學家可以在Kubernetes中有效地運行其模型。Kubeflow補足了共享昂貴的GPU,以及提供強大的數(shù)據管道編排機制的差距。
云原生CI/CD管道
CI/CD管道通常包括運行一系列測試,例如單元測試,集成測試,靜態(tài)代碼分析,安全掃描,這些在很大程度上是通過Jenkins管道進行編排的。一些團隊正在練習將這些Jenkins作業(yè)作為容器運行。容器的爆炸性增長,今天的Jenkins正努力擴大部署流程。利用Kubernetes調度程序的功能,有一個全新的出色模型可以運行整個業(yè)務流程。這是運行CI/CD編排的云原生方法。如JenkinsX和Tekton之類的項目,將充分利用Kubernetes的編排和調度能力,將你的Jenkins管道提升到新的水平。
零信任網絡
如今許多企業(yè)都在努力發(fā)展基于邊界的網絡安全模型,使得Kubernetes容器網絡接口(CNI)的插件有了用武之地。如Calico之類的項目可以實施Kubernetes網絡策略來隔離每個工作負載,從而提供不信任任何工作負載的細粒度分區(qū)。