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