在過去幾年,我們看到有大量工具被開發(fā)出來,用于簡化在 Kubernetes 上的軟件開發(fā)。正如生態(tài)系統(tǒng)中,優(yōu)勝劣汰、適者生存一樣,功能強(qiáng)大、操作便利的工具會不斷壯大,反之,則不會被使用者接受。那么,2021 年,有哪些好工具供我們使用?
關(guān)注公號:課工場 (wxh:kgc-vip)了解最前沿IT技術(shù)!
01Kubernetes 清單(YAML)
如果你是 Kubernetes 的新用戶,建議瀏覽這個網(wǎng)站,里面有詳細(xì)介紹。
https://www.jeremyjordan.me/kubernetes/?fileGuid=vrvQpyxYcpQJt6YG
首先需要了解,Kubernets 具有編排應(yīng)用的聲明式方法??梢詫⑵谕膽?yīng)用狀態(tài)寫入 YAML 格式的配置文件,即所謂“manifest”,然后將其發(fā)送給 Kubernetes 后臺,即可實(shí)現(xiàn)相應(yīng)操作。
02Helm
Helm 是 Kubernetes 的包管理工具,可以打包、共享和部署 K8s 應(yīng)用。將 Helm 視為一個包管理器——它允許用戶將多個 YAML 配置文件片段到“圖表”的邏輯程序包中。即主要用來管理圖表。它讓你可以用一種一致的、結(jié)構(gòu)化的方式將多個 YAML 配置片段分組到一個稱為“chart”的邏輯包中。
作為包制作者,創(chuàng)建 Helm Chart 有以下好處:
可以在部署應(yīng)用時使用自定義參數(shù)實(shí)現(xiàn)應(yīng)用程序可配置。為此,可以使用模板。
可以通過版本化和可追蹤方式將應(yīng)用程序發(fā)布到私有或公共的軟件存儲庫中
可以將你的應(yīng)用程序依賴于其他的 Helm Chart
總體而言,Helm 可以提供強(qiáng)大的封裝機(jī)制,以確保應(yīng)用程序按預(yù)期部署。
作為包使用者,安裝 Helm Chart 可以獲得更多好處:
可以訪問內(nèi)容豐富的存儲庫,其中既有公開發(fā)布的 Chart,也有組織提供的私有 Chart。
可以根據(jù)程序包制作者提供的設(shè)置來自定義應(yīng)用程序
擁有部署軟件包的正版資源
不必?fù)?dān)心 Kubernetes 規(guī)范語言的復(fù)雜性
Helm 支持原子操作,最大程度上降低應(yīng)用程序和集群的風(fēng)險。
總體而言,您可以獲得一個易于理解且可以即時可用的應(yīng)用程序包。
https://helm.sh/docs/chart_template_guide/?fileGuid=vrvQpyxYcpQJt6YG
https://www.rookout.com/blog/using-helm-to-improve-software-understandability?fileGuid=vrvQpyxYcpQJt6YG
Helm 有什么新功能?
2019 年末,Helm v3 發(fā)布,刪除了集群組件(Tiller)和許多其他的功能。2020 年底,Helm v3 逐漸取代 Helm v2,大多數(shù)公共 Charts 已經(jīng)改成了 v3 的格式。如果你還在使用 Helm v2,務(wù)必要安排時間升級近期軟件路線圖(升級時可以看下這個插件,可能會有所幫助)。
https://github.com/helm/helm-2to3?fileGuid=vrvQpyxYcpQJt6YG
在最近的幾個發(fā)行版中,Helm 團(tuán)隊(duì)一直致力于解決用戶的其中一個最大的煩惱——YAML 模板使用難度大。目前 Helm 開發(fā)出了一個功能強(qiáng)大的 linting 命令,可以解決在調(diào)試 YAML 時所遇到的部分問題。
https://helm.sh/docs/helm/helm_lint/?fileGuid=vrvQpyxYcpQJt6YG
Helm 中又添加了一個后期渲染功能,使用戶可以使用 Kustomize 等工具自定義 Helm 圖表。
https://helm.sh/docs/topics/advanced/?fileGuid=vrvQpyxYcpQJt6YG
最后但也同樣是重要的,2020 年,Helm 也開始向去中心化的圖表管理方式轉(zhuǎn)變,并推出了兩個共享的中心存儲庫:
ArtifactHub
ChartCenter
下載地址:https://helm.sh/
03Kustomize
Helm 的最大缺點(diǎn)是應(yīng)用程序的設(shè)置僅限于預(yù)先存在的配置選項(xiàng)。并且,圖表作者還必須以有些麻煩的模板方式來實(shí)現(xiàn)這些自定義選項(xiàng)。Kustomize 可以彌補(bǔ)這些缺點(diǎn)。
Kustomize 允許用戶將 Kubernetes 應(yīng)用程序構(gòu)建為一系列的層和補(bǔ)丁,從而實(shí)現(xiàn)沒有限制的自定義。Kustomize 使用基于 YAML 文件的、Kubernetes 可識別的補(bǔ)丁格式來添加 / 刪除 / 更新應(yīng)用程序清單的任何部分。Kustomize 在 1.14 版本中成為了 kubectl 中不可或缺的一部分,要調(diào)用它,用戶需要做的就是執(zhí)行 kubectl-k 命令。
Kustomize 是一個功能強(qiáng)大的工具,可以讓用戶以所需要的任何方式來修改 Kubernetes 應(yīng)用程序。但是,這就意味著學(xué)習(xí)起來有些困難,因?yàn)槎ㄖ品桨傅倪^于隨意會導(dǎo)致出錯的可能性大大提高。Kustomize 有一種高級用法,使用 Helm 的后期渲染功能來修補(bǔ)現(xiàn)有的 Helm 圖表。這樣就無需再另做版本分支,使得版本升級變得更加方便。
https://github.com/thomastaylor312/advanced-helm-demos/tree/master/post-render?fileGuid=vrvQpyxYcpQJt6YG
Kustomize 有什么新功能?
為了添加上 Kustomize 的功能,Kubernets 生態(tài)系統(tǒng)中的許多工具都內(nèi)嵌了 Kustomize。最突出的案例是編排和持續(xù)部署工具,如 ArgoCD、Flux 和 Kubestack 這三種工具。如果用戶搜索類似于補(bǔ)丁功能的工具,去查看你的 CD 工具,就可以找到它。
如果用戶不熟悉 Kubernetes 的構(gòu)建過程,可能就不知道在初始集成期間,維護(hù)人員將嵌入 Kubectl 的 Kustomize 版本凍結(jié)在了 2.0.3。這不僅使得文檔更加令人困惑了,也讓 Kubectl 內(nèi)嵌的版本缺少了過去兩年所做的大量增強(qiáng)功能,希望負(fù)責(zé)該部分的維護(hù)團(tuán)隊(duì)可以快速解決這個問題。同時,如果用戶需要最新版本,可以考慮使用 Kustomize 作為獨(dú)立的 CLI 工具。
https://kubectl.docs.kubernetes.io/installation/kustomize/?fileGuid=vrvQpyxYcpQJt6YG
地址:https://kustomize.io/
04 Skaffold
Skaffold 的作法有些不同,它遵循 DevOps 的最佳實(shí)踐,在 SDLC 中保持開發(fā)環(huán)境和工作流程的一致性。Skaffold 為開發(fā)流程、持續(xù)集成及持續(xù)部署構(gòu)建和部署 Kubernetes 應(yīng)用程序。
在構(gòu)建過程中,Skaffold 可以使用 Dockerfiles、Buildpacks、Bazel,甚至是自定義的腳本。對于部署,Skaffold 所使用的模板引擎是有限的,但可以調(diào)用 Kubectl,Helm 或者 Kustomize。
Skaffold 有三種主要的操作模式:
skaffold dev—此模式可以在一個“觀察,構(gòu)建,部署”循環(huán)中運(yùn)行 Skaffold。在這種模式下,用戶可以在本地編輯源文件,Skaffold 將它們部署到用戶選擇的集群中。Skaffold 支持端口轉(zhuǎn)發(fā)和日志追蹤,以便在這種模式下工作時能夠獲得更流暢的開發(fā)體驗(yàn)。
scaffold build—此模式可以運(yùn)行 Skaffold 來構(gòu)建用戶的工件,并將其放置在用戶所選擇的存儲庫中。
scaffold deploy—此模式將用戶構(gòu)建的應(yīng)用程序部署到用戶所選擇的集群中,也可能可以用于 Helm 和 Kustomize。如果想要使用單個命令來構(gòu)建和部署,可以使用 Skaffold run。
Skaffold 有什么新功能?
2020 年,Skaffold 團(tuán)隊(duì)致力于使得 Skaffold 更易適應(yīng)各種工作流程,并實(shí)現(xiàn)與其他工具的交互操作。改進(jìn)點(diǎn)包括與 CI/CD 和 GitOps 更靈活的集成,以及對 Python 和 Java 語言更好地支持。
此外,Skaffold 在 Beta 版本中有一個新的操作模式 skaffold debug。在這種新模式下,配置應(yīng)用程序運(yùn)行時,實(shí)現(xiàn)自動遠(yuǎn)程調(diào)試。這個功能在微服務(wù)環(huán)境下,使用遠(yuǎn)程操控集群時,應(yīng)用傳統(tǒng)的調(diào)試器比較困難。如果用戶在這方面遇到麻煩,可以查看一下類似于 Rookout 這樣的不間斷調(diào)試器。
https://skaffold.dev/docs/workflows/debug/?fileGuid=vrvQpyxYcpQJt6YG
地址:https://skaffold.dev/
寫在最后:
在打包、部署和共享眾人皆知的 Kubernetes 應(yīng)用程序清單方面,我們可以明顯看到,市場在整合。CNCF 在這方面做的非常好,具有很多目前為止看來很先進(jìn)的工具,其中包括 Helm(CNCF 的一個官方項(xiàng)目)、集成到 kubectl 中的 Kustomize 和許多其他工具。像 Kubernetes 系統(tǒng)的其他部分一樣,這方面的工具目前做得已經(jīng)非常成熟了,且每個工具都有其各自的特點(diǎn)。使用 Helm 打包、共享和安裝定義完備的 Kubernetes 應(yīng)用程序。使用 Kustomize 補(bǔ)丁修改現(xiàn)有的 Kubernetes 應(yīng)用程序。Skaffold 這個工具也很有用(也很受歡迎),但配置 Kubernetes 應(yīng)用程序并不是它的主要功能。
原文鏈接:https://dzone.com/articles/developer-tooling-for-kubernetes-in-2021-helm-kust?fileGuid=vrvQpyxYcpQJt6YG
來源:Cloud Zone ,作者:Liran Haimovitch(Rookout 公司 CTO)如侵刪!