新聞中心
當(dāng)前位置:網(wǎng)站首頁 > 新聞中心
2021年11款優(yōu)秀的開源Kubernetes工具
到 2021 年,幾乎所有接觸過云基礎(chǔ)設(shè)施的人都熟悉 Kubernetes 項(xiàng)目。簡單地說,Kubernetes 是一個(gè)非常強(qiáng)大的容器編排平臺,并且 Kubernetes 社區(qū)一直在共享工具,這有助于改善 Kubernetes 開發(fā)人員的體驗(yàn)。本文列出作者自己最常用的 11 款 Kubernetes 工具,并對它們進(jìn)行了分類介紹。
Kubernetes 是一個(gè)非常強(qiáng)大的容器編排平臺。但在我看來,Kubernetes 最重要的是將最佳實(shí)踐整合到了一個(gè)系統(tǒng)中,這個(gè)系統(tǒng)可以從樹莓派(Raspberry Pi)擴(kuò)展到財(cái)富 500 強(qiáng)中最大的基礎(chǔ)設(shè)施。它使得開發(fā)和運(yùn)維人員能夠通過標(biāo)準(zhǔn)化的 API 和有意義的抽象(如 Pod 或 ConfigMap)進(jìn)行協(xié)作。
通過提供一個(gè)開源標(biāo)準(zhǔn),Kubernetes 可以將一個(gè)組織從數(shù)十年自己摸索的“容器策略”中拯救出來,幸運(yùn)的是,這個(gè)標(biāo)準(zhǔn)也是每個(gè)主要云供應(yīng)商的標(biāo)準(zhǔn)。也就是說,像 Kubernetes 這樣龐大的野獸是很難馴服的,但為了充分發(fā)揮它的潛力,我們需要一套額外的工具。
Kubernetes 社區(qū)一直在共享工具,這有助于改善 Kubernetes 開發(fā)人員的體驗(yàn)。以下是我自己最常用的 11 款 Kubernetes 工具,我將它們進(jìn)行了分類:哪些是可以幫助我運(yùn)行 Kubernetes 的工具,哪些是測試 Kubernetes 的工具,以及哪些是可以讓我在 IDE 中能夠獲得樂趣的(最后但并非不重要)。
類別 1:運(yùn)行 Kubernetes 環(huán)境
Minikube 仍然是最佳的
幾乎每個(gè) Kubernetes 教程都是從“下載 Minikube”開始的,這在今天仍然行得通。如果你想在一個(gè)真正低風(fēng)險(xiǎn)的環(huán)境中編排容器,那么打包及維護(hù)良好的 Minikube 項(xiàng)目可以讓 你在大約 23 秒內(nèi)即可運(yùn)行一個(gè)集群。
Helm 仍然是可重復(fù)部署的標(biāo)準(zhǔn)
雖然我們都編寫過一兩個(gè)一次性腳本來將一些配置部署到 Kubernetes 中,但實(shí)際上管理可重復(fù)部署的方法是使用 Helm。就像 Ubuntu 上的 apt 或 RHEL 上的 rpm 一樣,Helm 是一個(gè)包管理器,它為 Kubernetes 開發(fā)人員做了很多事情。作為一名開發(fā)人員,想在投入不多的情況下用其他項(xiàng)目來測試我的應(yīng)用程序。我可以簡單地運(yùn)行helm install jenkins/jenkins,而不是編寫自己的 Jenkins 設(shè)置。想要獲取 Helm 或其他 Kubernetes 軟件包,請查看 Artifact Hub。
Rancher K3s 可隨時(shí)隨地運(yùn)行
向 Kubernetes 服務(wù)中推送容器是一回事,但是如果你想在 Raspberry Pi 農(nóng)場之外也弄一個(gè)呢?來自 Rancher 的 K3s 項(xiàng)目可以做到這一點(diǎn)。正如維護(hù)人員在 README 中所說的那樣,它對于 Kubernetes“集群學(xué)”(clusterology)的任何邊界或物聯(lián)網(wǎng)嘗試都是理想選擇。
K3s 作為本地和輕量級集群選擇的一個(gè)突出特點(diǎn)是它支持的設(shè)備非常廣泛。使用 K3s,你可以在任何地方運(yùn)行 Kubernetes。事實(shí)上,它是以單個(gè)二進(jìn)制文件下載的,這意味著它包含了所有生產(chǎn) Kubernetes 配置的功能(sqlite3 是默認(rèn)的,但是你可以通過它的可插拔存儲后端將其擴(kuò)展到 Etcd3),并且 Rancher 團(tuán)隊(duì)及其 1749 名(到目前為止)貢獻(xiàn)者仍在非常積極地維護(hù)它。
Loft 可擴(kuò)大團(tuán)隊(duì)規(guī)模
任何人都可以通過調(diào)用curl來啟動(dòng)上面提到的 Minikube 集群。但是,如果你想要和別人合作呢?在云原生開發(fā)工具和本地開發(fā)集群的交接處有很多選擇。
傳統(tǒng)的選擇是在公有云上運(yùn)行一些可公開訪問的資源:AKS、EKS、DigitalOcean Managed Kubernetes 或其他可用資源。但是任何一個(gè)在云服務(wù)上運(yùn)行過hello world教程但忘刪除它的人都知道,這會讓你很快就損失很多。
Loft 提供了一組包含 UI 和 CLI 在內(nèi)的服務(wù),可以進(jìn)一步抽象 Kubernetes 環(huán)境,這些環(huán)境最終將在生產(chǎn)環(huán)境中運(yùn)行。這樣做之后,你可以建立一個(gè)自助服務(wù)體驗(yàn),而無需考慮隔離和預(yù)算問題。
Loft 對隔離的關(guān)注,特別是對 vClusters 及其相應(yīng) Spaces 的關(guān)注,為每個(gè)開發(fā)人員提供了一個(gè)真實(shí)的環(huán)境,而不會影響預(yù)算。這對開發(fā)人員和部門領(lǐng)導(dǎo)來說都是非常有價(jià)值的。
Loft 的價(jià)值在于啟動(dòng)和關(guān)閉安全 Kubernetes 環(huán)境的速度。它在一個(gè)用例中提到只需單擊一次 UI,即可創(chuàng)建本地環(huán)境的現(xiàn)場演示。更自私地考慮一下,在不破壞開發(fā)集群命名空間的情況下,可以在自己的獨(dú)立測試用例中演示最新的生產(chǎn)功能, 這說聽起來確實(shí)不錯(cuò)。
此外,Loft 實(shí)驗(yàn)室最近聘請了了不起的 Rich Burroughs,這對于他們正在建立的這類社區(qū)來說是個(gè)非常好兆頭。
當(dāng)與團(tuán)隊(duì)合作時(shí),使用 Loft 是非常有意義的。
類別 2:簡化反饋回路
Skaffold 可提供自動(dòng)反饋回路
假設(shè)你是一名開發(fā)人員,你想寫一個(gè)可以在 Kubernetes 上運(yùn)行的應(yīng)用程序。從運(yùn)行 Node.js 或 Python 應(yīng)用程序到在 Kubernetes 上運(yùn)行容器,你需要了解大量的 Kubernetes 概念,數(shù)量大到像一堵 YAML 墻。幸運(yùn)的是,谷歌的好朋友們編寫了 Skaffold,為我們提供了一些急需的腳手架。
不要誤會我的意思:你仍然需要編寫自己的代碼、dockerfile、清單文件以及與管道相關(guān)的所有服務(wù)。Skaffold 提供的是一種干凈的方法,可以在每次變更代碼后重新運(yùn)行部署管道。它的主頁上引用了來自世界各地開發(fā)人員的語錄,深受用戶喜愛。
你可能會有這種感覺:運(yùn)行 Skaffold 感覺就像第一次運(yùn)行 Vagrant,而不是手動(dòng)管理虛擬機(jī)。曾經(jīng)需要很多步驟才能完成且不可靠的任務(wù),在某種程度上變得簡單且可重復(fù)了,從而簡化了我們的工作。Skaffold 將在 Kubernetes 的測試和部署反饋回路中這樣做。
Podman 可停止管理 Docker 守護(hù)進(jìn)程
雖然 Dockerfiles 可能永遠(yuǎn)是我們表示容器的方式,但 Docker 本身是完全可選的。甚至 Kubernetes 本身也在將其運(yùn)行時(shí)從 Dockershim 中移出來。我非常推薦 Podman 作為本地運(yùn)行 Docker 的替代品,唯一的原因是你不需要再維護(hù)守護(hù)進(jìn)程服務(wù)了。不干擾守護(hù)進(jìn)程意味著更少的無效時(shí)間浪費(fèi)和更多的編碼時(shí)間。
這種區(qū)別對你來說可能很陌生,所以解釋一下:Docker 既是一個(gè)與本地容器交互的客戶端,也是一個(gè)管理容器運(yùn)行的用戶態(tài)守護(hù)進(jìn)程(aka server)。Nick Janetakis在這里 完美地解釋了這一點(diǎn)。
像我一樣,當(dāng)一切都能正常工作時(shí),你可能會忘記 Docker 客戶端和服務(wù)端之間的區(qū)別。也就是說,我經(jīng)常會看到這樣的信息:
$ docker ps$ Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
現(xiàn)在我只能選擇了。我可以對 Docker 守護(hù)進(jìn)程和工具鏈中的服務(wù)進(jìn)行故障排除,或者我可以使用一些不會遇到相同問題的服務(wù)。我更喜歡后者。
Podman 提供了將容器作為子進(jìn)程運(yùn)行的選項(xiàng),從而無需單獨(dú)的守護(hù)進(jìn)程。這意味著我永遠(yuǎn)不會再收到那條錯(cuò)誤消息了,我的容器會一直在做它該做的事情。
你可能會因?yàn)樽约旱募∪庥洃浱畹俟潭辉父淖?。在這種情況下,我強(qiáng)烈建議你刪除dockerCLI 并將alias docker = podman添加到你的 shell 配置文件中。
Tilt 真正了解你的應(yīng)用程序
雖然我介紹了幾種不同的管理管道的方法,但我仍然認(rèn)為 Tilt 是觀察基于 Kubernetes 應(yīng)用程序的持續(xù)反饋回路最徹底、最直觀的方法。Tilt UI 具有非常簡潔的錯(cuò)誤捕捉功能,可以在 YAML 小錯(cuò)誤變成重大部署錯(cuò)誤之前就能指認(rèn)出它們來。它還具有可定制的按鈕,以提供特定于應(yīng)用程序的獨(dú)特功能,如在不同迭代之間刷新架構(gòu)中的消息隊(duì)列。
如果你想觀察細(xì)節(jié)但又不想被它們淹沒,那就試試 Tilt 吧。
DevSpace 可使開發(fā)流程更高效
你是否有過想讓kubectl做某件事情,但卻忘記了做這件事情所需要的大量命令呢?很幸運(yùn)的是,DevSpace 是一個(gè)開源的命令行實(shí)用程序,它可以將 Kubernetes 開發(fā)人員體驗(yàn)包在一個(gè)溫暖的擁抱中。它能管理大量繁瑣的任務(wù),所以你可以像對待運(yùn)行在本地系統(tǒng)上的 Pod 一樣對待它。
此外,如果你有非常特殊的設(shè)置項(xiàng),可以簡單地將它們添加到 devspace.yaml 聲明配置文件中即可。
雖然它不會一對一地取代kubectl提供的“手術(shù)刀”,但運(yùn)行 DevSpace 會為你提供大量正常的默認(rèn)行為,使與真正的 Kubernetes 環(huán)境交互更像是$HOME。
Lens IDE 可使調(diào)試更快速
像 Minikube 這樣的 Kubernetes 項(xiàng)目開箱即用,帶有一個(gè)稱為 Dashboard 的絲滑而直接的 GUI。這是一個(gè)非常出色的以閱讀為中心的環(huán)境視圖,但是如果你想通過 UI 執(zhí)行某些操作,該怎么辦呢?
開源社區(qū)中最強(qiáng)大的選項(xiàng)是 Lens。我真的不應(yīng)該稱它為 GUI,因?yàn)樗奶匦载S富到足以被視為 IDE。只需單擊按鈕,你就可以在 Lens 中執(zhí)行 Kubernetes 能夠執(zhí)行的任何操作。我最喜歡 Lens 的是它那不可思議的思維情境特定選項(xiàng),它幫助我區(qū)分了 Kubernetes 領(lǐng)域許多其他資源的命名空間服務(wù)。
類別 3:不可或缺的 IDE 開發(fā)工具
VSCode 我們都需要的 Kubernetes 擴(kuò)展
如果沒有一個(gè)能夠區(qū)分 Kubernetes 資源和 Helm 圖表的 IDE,就不能說是有 Kubernetes 開發(fā)經(jīng)驗(yàn)。這就是 Visual Studio Code Kubernetes Tools 的亮點(diǎn)所在。任何生活在 Kubernetes 世界的人都必須從安裝它開始。
該 VSCode 插件使 YAML 更易于管理
Kubernetes 開發(fā)人員被描述為 YAML 牧民,我認(rèn)為這非常合適。雖然我也喜歡結(jié)構(gòu)化的特定領(lǐng)域語言,如下一代 Kubernaut,但我不會放棄任何來自管理 YAML 本身的幫忙。幸運(yùn)的是,紅帽(Red Hat)的 YAML Language Support 擴(kuò)展可以幫到我。
它提供了大量的自動(dòng)完成選項(xiàng),以及許多額外的細(xì)微選項(xiàng),這些選項(xiàng)幫助我解決了問題。話雖如此,右鍵單擊并選擇“格式化文檔”的功能本身就很有價(jià)值。
Footsteps 通過代碼查找路徑
嚴(yán)格來說,它雖然不是 Kubernetes 擴(kuò)展,但是我發(fā)現(xiàn)在 YAML 的農(nóng)場中導(dǎo)航可能會讓我忘記出發(fā)的地方。它在我 2000 行的配置文件的什么地方呢?那時(shí) Footsteps 聲照亮了我短期失憶的立足點(diǎn)。這個(gè)出色的擴(kuò)展程序,也適用于 VSCode 或其他 IDE,它通過高亮來突出顯示最近編輯的文檔。隨著你的繼續(xù)編碼,F(xiàn)ootsteps 會逐漸淡化這些顏色,讓你了解你的編碼模式。安裝它,可以節(jié)省你迷失方向的時(shí)間。
總結(jié)
有很多不可思議的工具可以幫助 Kubernetes 開發(fā)和運(yùn)維人員來駕馭這種新的容器編排范式。我喜歡從三個(gè)方面來考慮它們:它們是能幫助我運(yùn)行 Kubernetes,是能測試 Kubernetes,還是能以可感知的方式編寫 Kubernetes 代碼呢?所有這三個(gè)類別都可以引導(dǎo)你在開源生態(tài)系統(tǒng)中獲取維護(hù)良好的軟件,這可以幫助你像我們及其他人一樣成為更好的 YAML 牧民。
作者:Matt Broberg來源:IT168網(wǎng)站
|