谷歌開源 Skaffold:簡化 Kubernetes 開發(fā)
作者:Nick Kubala 是谷歌云部門的軟件工程師,Russell Wolf 是產(chǎn)品經(jīng)理
早在 2017 年我們就注意到,創(chuàng)建 Kubernetes 原生應(yīng)用程序的開發(fā)人員要花很長的時(shí)間跨注冊(cè)中心構(gòu)建和管理容器映像、手動(dòng)更新 Kubernetes 清單文件,以及每次進(jìn)行哪怕極小的代碼更改都要重新部署其應(yīng)用程序。于是我們著手創(chuàng)建一個(gè)工具來自動(dòng)執(zhí)行這些任務(wù),幫助他們專注于編寫和維護(hù)代碼,而不是管理編輯-調(diào)試-部署這個(gè)“內(nèi)部循環(huán)”過程中所需的重復(fù)性步驟。Skaffold 由此誕生了。
今天,我們宣布推出 Skaffold 的第一個(gè)正式版。Skaffold 簡化了你在進(jìn)行 Kubernetes 開發(fā)時(shí)執(zhí)行的常見操作任務(wù),使你可以專注于代碼更改并迅速部署到集群上。它是驅(qū)動(dòng) Cloud Code 的底層引擎,而 Cloud Code 本身就是一款功能強(qiáng)大的工具,可以提高開發(fā)人員的工作效率。
Skaffold 的核心命令 skaffold dev 密切關(guān)注本地源代碼的更改,實(shí)時(shí)重新構(gòu)建應(yīng)用程序,并實(shí)時(shí)重新部署到集群上。但 Skaffold 已得到了很大的完善,不僅僅是一款構(gòu)建和部署工具,它還成為提高開發(fā)人員速度和工作效率的工具。
Skaffold 用戶的反饋?zhàn)C明了這一點(diǎn)。ForgeRock 的工程主管 Warren Strange 說:“我們的客戶很喜歡[Kubernetes],但老是向我們反饋稱在 Kubernetes 上進(jìn)行開發(fā)很麻煩。Skaffold 正適合解決這個(gè)問題。對(duì) Docker 映像或配置進(jìn)行更改以前要花幾分鐘,現(xiàn)在只要花幾秒鐘。 Skaffold 的插件架構(gòu)使我們能夠部署到 Helm 或 Kustomize,并使用 Kaniko 之類的各種 Docker 構(gòu)建插件。Skaffold 把我們?cè)瓉硪惶锥ㄖ频膶?shí)用程序和腳本換成了易于使用的簡化版工具。”
Kubernetes 開發(fā)人員的最好朋友
Skaffold 是一種命令行工具,通過以一種可擴(kuò)展的方式自動(dòng)執(zhí)行開發(fā)工作流程中從源代碼到部署的大部分環(huán)節(jié),因而為開發(fā)人員節(jié)省了時(shí)間。它默認(rèn)支持最常見的映像構(gòu)建和應(yīng)用程序部署策略,因而與一系列廣泛的新舊項(xiàng)目兼容。Skaffold 還可以完全在客戶端運(yùn)行,你的集群中不需要任何組件,因而擁有輕量級(jí)和高性能的優(yōu)點(diǎn)。
Skaffold 的內(nèi)部開發(fā)循環(huán)
通過處理迭代開發(fā)的操作任務(wù),Skaffold 為應(yīng)用程序開發(fā)人員大大減輕了負(fù)擔(dān),并大大提高了工作效率。
在過去這兩年,近 150 位代碼貢獻(xiàn)者向 Skaffold 項(xiàng)目提交了 5000 多次代碼,帶來了 40 個(gè)版本,我們對(duì) Skaffold 的核心功能很成熟充滿信心。下面不妨仔細(xì)看看 Skaffold 的一些核心功能。
快速迭代開發(fā)
說到開發(fā),skaffold dev 是你的個(gè)人操作助手:它了解構(gòu)成你應(yīng)用程序的源文件,在你工作時(shí)密切關(guān)注它們,僅重新構(gòu)建和重新部署必要的組件。Skaffold 隨帶面向本地和遠(yuǎn)程部署的高度優(yōu)化的工作流程,使你可以靈活地針對(duì) Minikube 或 Kind 等本地 Kubernetes 集群以及任何遠(yuǎn)程 Kubernetes 集群進(jìn)行開發(fā)。
德國 TNG 科技咨詢公司的首席顧問 Martin Höfling 說:“Skaffold 是一款了不起的工具,為我們簡化了開發(fā)和交付。Skaffold 在這兩個(gè)方面正合我們的心意:首先是從本地開發(fā)、集成測試到交付的整個(gè)開發(fā)周期。其次,Skaffold 使我們能夠獨(dú)立于平臺(tái)在 Linux、OSX 和 Windows 上進(jìn)行開發(fā),不需要針對(duì)特定平臺(tái)的邏輯。”
Skaffold 的開發(fā)循環(huán)還可以自動(dòng)執(zhí)行開發(fā)人員的典型任務(wù)。它可自動(dòng)跟蹤來自所部署工作負(fù)載的日志,并將遠(yuǎn)程應(yīng)用程序端口轉(zhuǎn)發(fā)到你的計(jì)算機(jī)上,那樣你可以直接針對(duì)服務(wù)端點(diǎn)進(jìn)行迭代。使用 Skaffold 的內(nèi)置實(shí)用程序,你可以完全使用一款輕量級(jí)客戶端工具進(jìn)行真正的云原生開發(fā)。
生產(chǎn)就緒的 CI/CD 管道
Skaffold 可用作生產(chǎn)級(jí) CI/CD 管道的構(gòu)建模塊。 Quora 的軟件工程師 Taylor Barrella 說:“Skaffold 很出色,它是我們想要用于開發(fā)和部署的工具。它為我們提供了跨應(yīng)用程序的通用入口點(diǎn),我們也可以將其重新用于 CI/CD。眼下,我們所有用于 Kubernetes 應(yīng)用程序的 CI/CD 管道在構(gòu)建和部署時(shí)都使用 Skaffold。”
Skaffold 可用于構(gòu)建映像并將應(yīng)用程序安全地部署到生產(chǎn)環(huán)境,從而重復(fù)使用你用于本地運(yùn)行應(yīng)用程序的大多數(shù)同樣工具。skaffold run 使用一個(gè)簡單的命令,即可運(yùn)行從構(gòu)建到部署的整條管道,還可以分解為 skaffold build 和 skaffold deploy,以便對(duì)這個(gè)過程實(shí)行更精細(xì)化的控制。skaffold render 可用于構(gòu)建應(yīng)用程序映像,輸出模板化的 Kubernetes 清單文件,而不是實(shí)際部署到你的集群,因而易于與 GitOps 工作流程整合起來。
配置文件讓你可以在多個(gè)環(huán)境中使用同樣的 Skaffold 配置,通過面向每個(gè)環(huán)境的 Skaffold 配置文件來表達(dá)差異,并使用當(dāng)前的 Kubernetes 上下文激活特定的配置文件。這意味著你可以推送映像,并將應(yīng)用程序部署到全然不同的環(huán)境,根本沒必要修改 Skaffold 配置。這使得團(tuán)隊(duì)中的所有成員都可以輕松共享同樣的 Skaffold 項(xiàng)目配置,同時(shí)仍能夠針對(duì)其自己的個(gè)人開發(fā)環(huán)境進(jìn)行開發(fā),甚至可以使用同樣的配置來部署到試運(yùn)行環(huán)境和生產(chǎn)環(huán)境。
集群上的應(yīng)用程序調(diào)試
除了應(yīng)用程序部署外,Skaffold 在許多方面也大有幫助,尤其是調(diào)試。Skaffold 默認(rèn)情況下就支持直接調(diào)試在你集群上運(yùn)行的 Golang、NodeJS、Java 和 Python 代碼!
skaffold debug 命令以持續(xù)的構(gòu)建和部署循環(huán)運(yùn)行你的應(yīng)用程序,并將所有必需的調(diào)試端口轉(zhuǎn)發(fā)到本地計(jì)算機(jī)。這使 Skaffold 可以自動(dòng)為運(yùn)行中的應(yīng)用程序添加調(diào)試器。
Skaffold 還可以動(dòng)態(tài)處理任何配置更改,為你提供了一個(gè)簡單而強(qiáng)大的工具來開發(fā) Kubernetes 原生應(yīng)用程序。skaffold debug 幕后支持 Cloud Code for IntelliJ 和 Cloud Code for Visual Studio Code 中的調(diào)試功能。
Cloud Code:IDE 中的 Kubernetes 開發(fā)
Cloud Code 隨帶的工具可以幫助你快速而輕松地編寫、部署和調(diào)試云原生應(yīng)用程序。它提供了 Visual Studio Code 和 IntelliJ 等 IDE 的擴(kuò)展件,使你可以迅速迭代和調(diào)試代碼,并迅速將代碼部署到 Kubernetes。要是覺得聽起來與 Skaffold 相似,那是由于兩者本來密切相關(guān)――Skaffold 幕后支持使 Cloud Code 如此出色的諸多核心功能!在 Skaffold 的幫助下,本地調(diào)試部署到 Kubernetes 的應(yīng)用程序和持續(xù)部署之類的功能直接做入到 Cloud Code 擴(kuò)展件中。
為了獲得 Skaffold 的最佳 IDE 體驗(yàn),請(qǐng)嘗試使用 Cloud Code for Visual Studio Code 或 IntelliJ IDEA!
下一步是什么?
我們?cè)?Skaffold 和 Cloud Code 方面的目標(biāo)是,為 Kubernetes 開發(fā)提供行業(yè)領(lǐng)先的工具。自 Skaffold 問世以來,我們就與更廣泛的社區(qū)積極合作,確保 Skaffold 的發(fā)展順應(yīng)用戶需求。我們看到,來自外部貢獻(xiàn)者的一些奇妙想法取得了成果;鑒于 Kubernetes 開發(fā)生態(tài)系統(tǒng)仍在不斷變化,我們將優(yōu)先考慮對(duì) Skaffold 的有用性和可用性會(huì)有最大影響的功能。我們還與 Cloud Code 團(tuán)隊(duì)緊密合作,在你的 IDE 中展示 Skaffold 的功能。
由于迎來了正式版,現(xiàn)在是開始使用(或繼續(xù)使用)Skaffold 的最佳時(shí)機(jī),它將提供一種出色的生產(chǎn)級(jí)開發(fā)體驗(yàn),值得你依賴。