2021年,開發者必備的3款Kubernetes工具

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在過去幾年,我們看到有大量工具被開發出來,用於簡化在Kubernetes上的軟件開發。正如生態系統中,優勝劣汰、適者生存一樣,功能強大、操作便利的工具會不斷壯大,反之,則不會被使用者接受。那麼,2021年,有哪些好工具供我們使用?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"本文將重點介紹Kubernetes應用程序的工具:Helm、Kustomize、Skaffold"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"Kubernetes 清單(YAML)"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果你是Kubernetes的新用戶,建議瀏覽這個"},{"type":"link","attrs":{"href":"https:\/\/www.jeremyjordan.me\/kubernetes\/?fileGuid=vrvQpyxYcpQJt6YG","title":"","type":null},"content":[{"type":"text","text":"網站"}]},{"type":"text","text":",裏面有詳細介紹。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"你首先需要了解,Kubernets具有編排應用的聲明式方法。你可以將期望的應用狀態寫入YAML格式的配置文件,即所謂“manifest”,然後將其發送給Kubernetes後臺,即可實現相應操作。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"Helm"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Helm是Kubernetes的包管理工具,可以打包、共享和部署K8s應用。將Helm視爲一個包管理器——它允許用戶將多個YAML配置文件片段到“圖表”的邏輯程序包中。即主要用來管理圖表。它讓你可以用一種一致的、結構​​化的方式將多個YAML配置片段分組到一個稱爲“chart”的邏輯包中。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"作爲包製作者,創建 Helm Chart 有以下好處:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"numberedlist","attrs":{"start":1,"normalizeStart":1},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":1,"align":null,"origin":null},"content":[{"type":"text","text":"可以在部署應用時使用自定義參數實現應用程序可配置。爲此,可以使用"},{"type":"link","attrs":{"href":"https:\/\/helm.sh\/docs\/chart_template_guide\/?fileGuid=vrvQpyxYcpQJt6YG","title":"","type":null},"content":[{"type":"text","text":"模板"}]},{"type":"text","text":"。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":2,"align":null,"origin":null},"content":[{"type":"text","text":"可以通過版本化和可追蹤方式將應用程序發佈到私有或公共的軟件存儲庫中"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":3,"align":null,"origin":null},"content":[{"type":"text","text":"可以將你的應用程序依賴於其他的Helm Chart"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":4,"align":null,"origin":null},"content":[{"type":"text","text":"總體而言,Helm可以提供強大的封裝機制,以確保應用程序按預期部署。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"作爲包使用者,安裝 Helm Chart 可以獲得更多好處:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"numberedlist","attrs":{"start":1,"normalizeStart":1},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":1,"align":null,"origin":null},"content":[{"type":"text","text":"可以訪問內容豐富的存儲庫,其中既有公開發布的Chart,也有組織提供的私有Chart。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":2,"align":null,"origin":null},"content":[{"type":"text","text":"可以根據程序包製作者提供的設置來自定義應用程序"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":3,"align":null,"origin":null},"content":[{"type":"text","text":"擁有部署軟件包的正版資源"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":4,"align":null,"origin":null},"content":[{"type":"text","text":"不必擔心Kubernetes規範語言的複雜性"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":5,"align":null,"origin":null},"content":[{"type":"text","text":"Helm支持原子操作,最大程度上降低應用程序和集羣的風險。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":6,"align":null,"origin":null},"content":[{"type":"text","text":"總體而言,您可以獲得一個易於"},{"type":"link","attrs":{"href":"https:\/\/www.rookout.com\/blog\/using-helm-to-improve-software-understandability?fileGuid=vrvQpyxYcpQJt6YG","title":"","type":null},"content":[{"type":"text","text":"理解"}]},{"type":"text","text":"且可以即時可用的應用程序包。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"Helm有什麼新功能?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2019年末,Helm v3發佈,刪除了集羣組件(Tiller)和許多其他的功能。2020年底,Helm v3 逐漸取代Helm v2,大多數公共Charts已經改成了v3的格式。如果你還在使用Helm v2,務必要安排時間升級近期軟件路線圖(升級時可以看下這個"},{"type":"link","attrs":{"href":"https:\/\/github.com\/helm\/helm-2to3?fileGuid=vrvQpyxYcpQJt6YG","title":"","type":null},"content":[{"type":"text","text":"插件"}]},{"type":"text","text":",可能會有所幫助)。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在最近的幾個發行版中,Helm團隊一直致力於解決用戶的其中一個最大的煩惱——YAML模板使用難度大。目前Helm開發出了一個功能強大的linting"},{"type":"link","attrs":{"href":"https:\/\/helm.sh\/docs\/helm\/helm_lint\/?fileGuid=vrvQpyxYcpQJt6YG","title":"","type":null},"content":[{"type":"text","text":"命令"}]},{"type":"text","text":",可以解決在調試YAML時所遇到的部分問題。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Helm中又添加了一個"},{"type":"link","attrs":{"href":"https:\/\/helm.sh\/docs\/topics\/advanced\/?fileGuid=vrvQpyxYcpQJt6YG","title":"","type":null},"content":[{"type":"text","text":"後期"}]},{"type":"link","attrs":{"href":"https:\/\/helm.sh\/docs\/topics\/advanced\/?fileGuid=vrvQpyxYcpQJt6YG","title":"","type":null},"content":[{"type":"text","text":"渲染"}]},{"type":"text","text":"功能,使用戶可以使用Kustomize等工具自定義Helm圖表。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"最後但也同樣是重要的,2020年,Helm也開始向去中心化的圖表管理方式轉變,並推出了兩個共享的中心存儲庫:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"ArtifactHub"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"ChartCenter"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"下載地址:https:\/\/helm.sh\/"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"Kustomize"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Helm的最大缺點是應用程序的設置僅限於預先存在的配置選項。並且,圖表作者還必須以有些麻煩的模板方式來實現這些自定義選項。"},{"type":"link","attrs":{"href":"https:\/\/kustomize.io\/?fileGuid=vrvQpyxYcpQJt6YG","title":"","type":null},"content":[{"type":"text","text":"Kustomize"}]},{"type":"text","text":"可以彌補這些缺點。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Kustomize允許用戶將Kubernetes應用程序構建爲一系列的層和補丁,從而實現沒有限制的自定義。Kustomize使用基於YAML文件的、Kubernetes可識別的補丁格式來添加\/刪除\/更新應用程序清單的任何部分。Kustomize在"},{"type":"link","attrs":{"href":"https:\/\/kubernetes.io\/blog\/2019\/03\/25\/kubernetes-1-14-release-announcement\/?fileGuid=vrvQpyxYcpQJt6YG","title":"","type":null},"content":[{"type":"text","text":"1.14"}]},{"type":"text","text":"版本中成爲了"},{"type":"link","attrs":{"href":"https:\/\/dockerlabs.collabnix.com\/kubernetes\/beginners\/what-is-kubect.html?fileGuid=vrvQpyxYcpQJt6YG","title":"","type":null},"content":[{"type":"text","text":"kubectl "}]},{"type":"text","text":"中不可或缺的一部分,要調用它,用戶需要做的就是執行kubectl-k命令。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Kustomize是一個功能強大的工具,可以讓用戶以所需要的任何方式來修改Kubernetes應用程序。但是,這就意味着學習起來有些困難,因爲定製方案的過於隨意會導致出錯的可能性大大提高。Kustomize有一種高級用法,使用Helm的後期渲染功能來"},{"type":"link","attrs":{"href":"https:\/\/github.com\/thomastaylor312\/advanced-helm-demos\/tree\/master\/post-render?fileGuid=vrvQpyxYcpQJt6YG","title":"","type":null},"content":[{"type":"text","text":"修補"}]},{"type":"text","text":"現有的Helm圖表。這樣就無需再另做版本分支,使得版本升級變得更加方便。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"Kustomize有什麼新功能?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"爲了添加上Kustomize的功能,Kubernets生態系統中的許多工具都內嵌了Kustomize。最突出的案例是編排和持續部署工具,如"},{"type":"link","attrs":{"href":"https:\/\/argoproj.github.io\/argo-cd\/?fileGuid=vrvQpyxYcpQJt6YG","title":"","type":null},"content":[{"type":"text","text":"ArgoCD"}]},{"type":"text","text":"、"},{"type":"link","attrs":{"href":"https:\/\/fluxcd.io\/?fileGuid=vrvQpyxYcpQJt6YG","title":"","type":null},"content":[{"type":"text","text":"Flux"}]},{"type":"text","text":"和"},{"type":"link","attrs":{"href":"https:\/\/www.kubestack.com\/?fileGuid=vrvQpyxYcpQJt6YG","title":"","type":null},"content":[{"type":"text","text":"Kubestack"}]},{"type":"text","text":"這三種工具。如果用戶搜索類似於補丁功能的工具,去查看你的CD工具,就可以找到它。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果用戶不熟悉Kubernetes的構建過程,可能就不知道在初始集成期間,維護人員將嵌入Kubectl的Kustomize版本凍結在了2.0.3。這不僅使得文檔更加令人困惑了,也讓Kubectl內嵌的版本缺少了過去兩年所做的大量增強功能,希望負責該部分的維護團隊可以快速解決這個問題。同時,如果用戶需要最新版本,可以考慮使用Kustomize作爲"},{"type":"link","attrs":{"href":"https:\/\/kubectl.docs.kubernetes.io\/installation\/kustomize\/?fileGuid=vrvQpyxYcpQJt6YG","title":"","type":null},"content":[{"type":"text","text":"獨立"}]},{"type":"text","text":"的CLI工具。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"Skaffold"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/skaffold.dev\/?fileGuid=vrvQpyxYcpQJt6YG","title":"","type":null},"content":[{"type":"text","text":"Skaffold"}]},{"type":"text","text":"的作法有些不同,它遵循DevOps的最佳實踐,在SDLC中保持開發環境和工作流程的一致性。Skaffold爲開發流程、持續集成及持續部署構建和部署Kubernetes應用程序。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在構建過程中,Skaffold可以使用Dockerfiles、Buildpacks、Bazel,甚至是自定義的腳本。對於部署,Skaffold所使用的模板引擎是有限的,但可以調用Kubectl,Helm或者Kustomize。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Skaffold有三種主要的操作模式:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"numberedlist","attrs":{"start":1,"normalizeStart":1},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":1,"align":null,"origin":null},"content":[{"type":"text","text":"skaffold dev——此模式可以在一個“觀察,構建,部署”循環中運行Skaffold。在這種模式下,用戶可以在本地編輯源文件,Skaffold將它們部署到用戶選擇的集羣中。Skaffold支持端口轉發和日誌追蹤,以便在這種模式下工作時能夠獲得更流暢的開發體驗。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":2,"align":null,"origin":null},"content":[{"type":"text","text":"scaffold build——此模式可以運行Skaffold來構建用戶的工件,並將其放置在用戶所選擇的存儲庫中。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":3,"align":null,"origin":null},"content":[{"type":"text","text":"scaffold deploy——此模式將用戶構建的應用程序部署到用戶所選擇的集羣中,也可能可以用於Helm和Kustomize。如果想要使用單個命令來構建和部署,可以使用Skaffold run。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"Skaffold有什麼新功能?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2020年,Skaffold團隊致力於使得Skaffold更易適應各種工作流程,並實現與其他工具的交互操作。改進點包括與CI\/CD和GitOps更靈活的集成,以及對Python和Java語言更好地支持。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"此外,Skaffold在Beta版本中有一個新的操作模式"},{"type":"link","attrs":{"href":"https:\/\/skaffold.dev\/docs\/workflows\/debug\/?fileGuid=vrvQpyxYcpQJt6YG","title":"","type":null},"content":[{"type":"text","text":"skaffold debug"}]},{"type":"text","text":"。在這種新模式下,配置應用程序運行時,實現自動遠程調試。這個功能在微服務環境下,使用遠程操控集羣時,應用傳統的調試器比較困難。如果用戶在這方面遇到麻煩,可以查看一下類似於Rookout這樣的不間斷調試器。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"總結"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在打包、部署和共享衆人皆知的Kubernetes應用程序清單方面,我們可以明顯看到,市場在整合。CNCF在這方面做的非常好,具有很多目前爲止看來很先進的工具,其中包括Helm(CNCF的一個官方項目)、集成到kubectl中的Kustomize和許多其他工具。像Kubernetes系統的其他部分一樣,這方面的工具目前做得已經非常成熟了,且每個工具都有其各自的特點。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"使用Helm打包、共享和安裝定義完備的Kubernetes應用程序。使用Kustomize補丁修改現有的Kubernetes應用程序。Skaffold這個工具也很有用(也很受歡迎!),但配置Kubernetes應用程序並不是它的主要功能。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"原文鏈接:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"https:\/\/dzone.com\/articles\/developer-tooling-for-kubernetes-in-2021-helm-kust?fileGuid=vrvQpyxYcpQJt6YG"}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章