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