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