開發者如何利用有效工具開啟Kubernetes之旅?
過去幾年,為了讓Kubernetes做到開箱即用,各種各樣的開發工具如洪水般涌向市場。這也不難理解,沒有誰愿意錯過新的技術趨勢。但一味追新,有時候也會付出慘重代價。隨著Kubernetes生態的不斷完善,有的工具可以繼續發展,而有一些工具則被時代拋棄,或者被并入新的產品研發規劃中。那么,2021年,作為新手開發者,該如何把握趨勢,邁向Kubernetes之旅呢?本文將重點介紹關于Kubernetes的主流應用工具,即Helm、Kustomize和Skaffold。
Helm
Helm是Kubernetes的包管理器,是打包、共享和部署k8s應用的事實標準。Helm允許你把多個YAML配置片段以一致的、結構化的方式組合成一個邏輯包,即 "chart"。這樣,開發者在部署應用時可以使用自定義參數,來確保應用程序可配置。另外,你還可以將你的應用程序以版本化和可跟蹤的方式發布到私有或公有存儲庫中。換言之,Helm為我們提供了強大的封裝機制,可以確保你的應用程序按預期部署。
另外,通過Helm,你可以去訪問廣泛公開可用的圖表庫,并為你的組織提供任何的chart;你也可以根據軟件包作者提供的設置來定制應用程序。最重要的是,我們不必擔心Kubernetes規范語言的復雜性,Helm能支持Atomic操作,能最大限度地降低應用程序和集群風險。也就是說,Helm為我們提供了一個易于理解和隨時可使用的應用程序包。
問題是,Helm有哪些新的應用功能?
在2019年底,我們看到Helm v3正式發布,其中刪除了集群側組件(Tiller)和其他一系列功能。在2020年底,Helm v2被廢止,大多數chart已經遷移到v3格式。如果你還在使用Helm v2,一定要合理分配時間,在近期規劃升級。
在過去的幾個版本中,Helm團隊一直忙于解決Helm用戶經常抱怨的問題,即YAML模板使用問題。Helm新增的另一個完整的功能是后期渲染功能,可以允許我們使用Kustomize等工具時自定義chart。
最后,但并非最不重要的是,2020年,我們還見證了向更分散方向發展的chart管理方式的轉變,并推出了公共Helm Charts的中央存儲庫。
Helm有很多優勢,但有有一個最大的弊端,那就是應用程序的定制化能力僅限于預先存在的配置選項。不僅如此,還得用模板化的方式實現這些自定義選項,非常繁瑣,而Kustomize可以彌補這一劣勢。
Kustomize
kustomize 是一個更方便我們基于模版進行配置和自定義的工具,允許開發者將Kubernetes應用構建分成一系列的層和補丁,并且具有無限廣闊的定制化能力。
Kustomize使用基于YAML的Kubernetes感知的補丁格式來添加/刪除/更新應用清單的任何部分。Kustomize在1.14版本上已成為了kubectl的一個組成部分,你所要做的就是執行kubectl -k來調用它。
簡單理解,Kustomize是一個更強大的應用工具,它能最大化賦予我們修改Kubernetes應用程序的權限。但同樣,Kustomize也有不足之處,那就是無形中加大了開發者的學習曲線。另外,無限制的定制意味著錯誤配置應用程序的可能性增加。
關于Kustomize,有一個使用Helm的新功能,那就是通過post-render功能來修補現有的Helm chart缺陷,并且不需要分拆,能讓版本升級變得更加無縫。
目前,Kubernetes生態系統中的許多工具都已經嵌入了Kustomize,如ArgoCD、Flux和Kubestack編排和持續部署工具。如果你搜索類似Kustomize的補丁功能,會看到很多新功能已經存在于你的CD工具中。
尤其作為新手開發者,如果不熟悉Kubernetes構建過程,就可以考慮使用Kustomize作為一個獨立的CLI工具。
Skaffold
創建Kubernetes原生應用程序,通常要花很長的時間跨注冊中心構建和管理容器映像、手動更新Kubernetes清單文件,以及每次進行哪怕極小的代碼更改都要重新部署其應用程序。如何通過創建一個專有工具來自動執行這些任務,而不是重復管理編輯-調試-部署這樣一個步驟。于是,Skaffold由此誕生了。
Skaffold遵循DevOps最佳實踐,即在SDLC中保持開發環境和工作流的一致性。Skaffold為開發者帶來了工作流和持續集成(CI)和持續部署(CD)能力,可以幫助企業快速構建和部署Kubernetes應用。
在構建部分,Skaffold可以利用Dockerfiles、Buildpacks、Bazel,甚至是自定義腳本,實現快速構建目標。而在部署時,基于Skaffold模板引擎,可以調用kubectl、Helm或Kustomize,實現應用的快速落地。
在2020年,Skaffold團隊專注于各種工作流程的適配,努力其他工具更具互操作性。包括在CI/CD和GitOps方面的能力賦予,以及對Python和Java提供更好的支持。
此外,Skaffold現在有一個新的測試版--skaffold debug。基于新版本應用,Skaffold會嘗試在自動配置應用程序時可進行遠程調試。
總結
總之,當你看到關于Kubernetes的各種應用工具無從下手時,請不必糾結。不妨先看看Kubernetes的主流應用工具,沒準已經能滿足您的業務需求。比如通過使用Helm,我們可以打包、共享和安裝定義好的Kubernetes應用。而使用Kustomize使用補丁,可以修改現有的Kubernetes應用。同時,Skaffold也是一個很受歡迎的工具,可以更好地管理Kubernetes環境。