云原生是當(dāng)今技術(shù)中最流行的術(shù)語之一,而且它只會越來越流行。事實(shí)上,根據(jù)谷歌趨勢,“云原生”一詞在 2019 年 10 月剛剛達(dá)到最高關(guān)注度。部分流行可以歸因于營銷熱議,但云原生令人興奮的是草根支持。如此多的開發(fā)人員和組織正在接受云原生的承諾并幫助開發(fā)生態(tài)系統(tǒng)。因此,今天有各種各樣的工具構(gòu)成了云原生景觀。在他們的交互式地圖中,云原生計(jì)算基金會 (CNCF) 將這些工具分為幾類。
在這里,我們將仔細(xì)研究其中一個類別:云原生應(yīng)用程序定義和映像構(gòu)建。這些工具提供“黃金圖像”和權(quán)威的應(yīng)用程序定義,以簡化定義和擴(kuò)展云原生應(yīng)用程序的過程。為了滿足云原生空間的需求,這些工具需要輕量級、可擴(kuò)展且敏捷。到本文結(jié)束時,您將了解什么是云原生應(yīng)用程序定義和映像構(gòu)建、它們的優(yōu)勢以及該類別中一些最流行工具的詳細(xì)信息。
什么是云原生應(yīng)用定義和鏡像構(gòu)建?
云原生應(yīng)用定義和鏡像構(gòu)建是自動化應(yīng)用交付的重要部分。圖像和應(yīng)用程序定義為您提供了部署和擴(kuò)展云原生微服務(wù)的來源。鏡像是為容器和虛擬設(shè)備部署提供權(quán)威來源的二進(jìn)制文件。應(yīng)用程序定義定義了應(yīng)用程序所需的所有資源。因此,開發(fā)人員可以從以編程方式進(jìn)行的可重復(fù)部署中獲益。這些圖像和應(yīng)用程序定義的描述可能有點(diǎn)抽象,所以讓我們分別仔細(xì)看看。
應(yīng)用程序定義速成班
正如 Puppet 在其文檔中所描述的那樣,應(yīng)用程序定義有兩部分:應(yīng)用程序組件和服務(wù)資源。應(yīng)用程序組件是在您的云原生應(yīng)用程序中啟用特定功能的代碼塊。如果您正在創(chuàng)建 LAMP/LEMP 堆棧,您可以為數(shù)據(jù)庫、Web 服務(wù)器、CMS(內(nèi)容管理系統(tǒng))和負(fù)載平衡器創(chuàng)建離散組件。
另一方面,服務(wù)資源抽象出模塊依賴性并支持應(yīng)用程序內(nèi)節(jié)點(diǎn)之間的數(shù)據(jù)傳輸。例如,如果您創(chuàng)建云原生 LAMP/LEMP 應(yīng)用程序,服務(wù)資源使您的數(shù)據(jù)庫和應(yīng)用程序能夠進(jìn)行通信。應(yīng)用程序定義是一種以編程方式定義這兩個部分之間的數(shù)據(jù)流和依賴關(guān)系的方法。因此,它們允許您抽象出復(fù)雜性并輕松擴(kuò)展配置。
了解機(jī)器映像和容器映像
CNCF 的 Cloud Native Landscape 包括用于構(gòu)建機(jī)器映像和容器映像的工具。如果您曾經(jīng)使用過虛擬設(shè)備,您應(yīng)該熟悉機(jī)器映像的概念。與應(yīng)用程序定義一樣,機(jī)器映像支持部署預(yù)配置資源。但是,他們這樣做的方式不同。機(jī)器映像將操作系統(tǒng)、程序包和服務(wù)捆綁在一起作為一個映像。OVA、Amazon 機(jī)器映像和 VMDK 是您可能熟悉的機(jī)器映像的常見示例。容器鏡像類似,但不需要操作系統(tǒng)。打個比方:容器鏡像之于容器,就像 OVA 之于虛擬設(shè)備。例如,當(dāng)您使用 docker run 命令時,您是從運(yùn)行在底層操作系統(tǒng)內(nèi)核之上的 Docker 映像創(chuàng)建一個容器。
云原生應(yīng)用定義和鏡像構(gòu)建的好處
您現(xiàn)在應(yīng)該了解什么是云原生應(yīng)用程序定義和映像構(gòu)建。現(xiàn)在,讓我們探討一下為什么它是 Cloud Native Landscape 的重要組成部分。在本節(jié)中,我們將探討云原生應(yīng)用程序定義和映像構(gòu)建工具的優(yōu)勢。
可擴(kuò)展的部署
使用云原生應(yīng)用程序,您需要快速啟動微服務(wù)。您還必須能夠迭代和重復(fù)地執(zhí)行此操作。一般來說,微服務(wù)可以幫助您實(shí)現(xiàn)這些目標(biāo)。但是,您需要明確定義的權(quán)威參考,以可靠的方式以編程方式部署微服務(wù)。云原生應(yīng)用程序定義和鏡像構(gòu)建工具可幫助您解決該問題。使用正確的工具,您可以定義多容器應(yīng)用程序并大規(guī)模部署它。
改進(jìn)的 CI/CD
快速實(shí)例化圖像的能力大大改進(jìn)了測試和開發(fā)工作流程。應(yīng)用程序定義和映像構(gòu)建類別中的工具有助于確保向測試人員和其他開發(fā)人員部署相同的應(yīng)用程序。因此,整體 CI/CD 管道得到改善。例如,您可以顯著減少創(chuàng)建隔離開發(fā)環(huán)境所需的時間。同樣,像 Docker Compose 這樣的工具可以幫助您快速啟動圖像、測試它并在需要時終止它。
松耦合
松散耦合是使微服務(wù)具有彈性和可擴(kuò)展性的重要組成部分。云原生應(yīng)用程序定義有助于松耦合離散服務(wù)。假設(shè)您使用 MySQL 作為應(yīng)用程序的數(shù)據(jù)庫組件。假設(shè)您的 CMS 和數(shù)據(jù)庫使用“Sql”服務(wù)資源進(jìn)行通信。現(xiàn)在,假設(shè)您的團(tuán)隊(duì)決定從 MySQL 切換到 Postgres 數(shù)據(jù)庫。由于服務(wù)資源提供的抽象,您可以這樣做而不必?fù)?dān)心對 CMS 組件的修改。
降低復(fù)雜性
云原生應(yīng)用程序定義和圖像構(gòu)建工具為您的圖像和應(yīng)用程序定義創(chuàng)建“單一真實(shí)來源”。因此,您可以消除與大規(guī)模管理微服務(wù)相關(guān)的大部分復(fù)雜性。版本控制、更新和回滾變得更易于管理。
部署到多個環(huán)境
為云原生構(gòu)建的圖像通常可以在多個公共和私有云平臺以及裸機(jī)上實(shí)例化。這種獨(dú)立于平臺的映像構(gòu)建方法提高了靈活性并減少了供應(yīng)商鎖定。它還允許您快速為客戶創(chuàng)建演示,并在您最初沒有考慮的環(huán)境中使用您的圖像。
流行的云原生應(yīng)用定義和鏡像構(gòu)建服務(wù)
我們無法推薦一種放之四海而皆準(zhǔn)的云原生應(yīng)用程序定義和映像構(gòu)建工具。您需要了解您的環(huán)境需求并為工作選擇合適的工具。CNCF的交互式云原生景觀頁面是您研究的一個很好的起點(diǎn)。但是,要整理的內(nèi)容可能很多。為了幫助您進(jìn)行搜索,我們仔細(xì)研究了列表中一些最受歡迎的項(xiàng)目。
舵
Helm已經(jīng)成為云原生界的熱門項(xiàng)目。它得到了開發(fā)者社區(qū)的支持,包括來自 Microsoft、Google 和 Samsung SDS 等公司的開發(fā)者。此外,Helm 由 CNCF 自己維護(hù)。Helm 可幫助您簡化定義、安裝和升級 Kubernetes 的過程。Charts是精選的應(yīng)用程序定義,是使 Helm 如此強(qiáng)大的重要組成部分。Charts 允許您對復(fù)雜的云原生應(yīng)用程序擁有單一的授權(quán)點(diǎn)。他們還提供大規(guī)模可重復(fù)的應(yīng)用程序安裝。如果您想深入了解圖表主題,請查看Helm 文檔中的此頁面。
碼頭工人組成
Docker Compose是云原生應(yīng)用程序定義和鏡像構(gòu)建類別中最受歡迎的工具之一。借助 Compose,您可以使用 YAML 文件配置多容器應(yīng)用程序。然后,您只需執(zhí)行 docker-compose up 命令即可啟動并運(yùn)行您的應(yīng)用程序。傳統(tǒng)上,Compose 在測試自動化和開發(fā)環(huán)境中很有用。但是,它的功能集正在發(fā)展,以至于單主機(jī)部署已成為其常見用例列表的一部分。
人居經(jīng)理
Chef Habitat是一個獨(dú)立于平臺的應(yīng)用程序生命周期管理工具,構(gòu)建時考慮到了云原生。借助 Habitat,您的應(yīng)用程序以一種允許您輕松部署、更新和擴(kuò)展它們的方式進(jìn)行編碼。
Habitat 將應(yīng)用程序及其依賴項(xiàng)捆綁到輕量級和便攜式單元中。從那里,您可以跨各種平臺部署這些單元,從容器到裸機(jī)服務(wù)器。如果您正在尋找一種云原生應(yīng)用程序定義和映像構(gòu)建工具來簡化遺留應(yīng)用程序向云的遷移,Habitat 是一個不錯的選擇。
封隔器
Packer是云原生鏡像構(gòu)建領(lǐng)域中最令人興奮的工具之一。Packer 使用單一基本配置自動執(zhí)行創(chuàng)建相同機(jī)器映像的過程。然后,您可以將這些機(jī)器映像部署到多個平臺。因此,持續(xù)交付、維護(hù)一致的開發(fā)/QA/staging/prod 環(huán)境以及創(chuàng)建虛擬設(shè)備是Packer 的示例用例。
當(dāng)然,這些聽起來都不太具有開創(chuàng)性。虛擬設(shè)備已經(jīng)存在了一段時間。是什么讓 Packer 與眾不同?速度和便攜性。當(dāng)然,您可以使用 OVA 創(chuàng)建虛擬設(shè)備。但是,使用 Packer,過去需要數(shù)小時的配置過程可以減少到幾秒鐘。同樣,傳統(tǒng)虛擬設(shè)備的可移植性有限。使用 Packer,您可以在從 VirtualBox 到 AWS 再到 OpenStack 的任何地方進(jìn)行部署。
腳手架
Skaffold是來自 Google 的開源 CLI 工具。前提很簡單:您處理代碼,Skaffold 會自動執(zhí)行構(gòu)建、推送和部署過程。Skaffold 監(jiān)控您的源代碼并在發(fā)生更改時啟動工作流。當(dāng)然,您定義什么是“可同步的”以及它的部署位置。該項(xiàng)目仍處于測試階段,但前景廣闊。Skaffold 可以讓您更多地關(guān)注開發(fā),而不是構(gòu)建和部署過程。
最后的想法
我們希望您喜歡我們深入探討 CNCF 的云原生景觀的云原生應(yīng)用程序定義和圖像構(gòu)建類別。該類別涵蓋范圍廣泛的工具和功能,但您不需要列出的所有工具。重要的部分是了解哪些工具和實(shí)踐對您的用例有益。