什么是軟件容器?最流行的應用程序調度和編排工具

      云原生應用程序的標志之一是它具有高度的錯誤恢復能力,同時提供多種可擴展性選項。這是唯一可能的,因為云環境使開發人員能夠部署和管理整個容器集群。對于只有幾個容器的小型應用程序,管理不是什么大問題——但隨著應用程序的擴展,它們的編排和調度變得越來越重要。

      什么是軟件容器?最流行的應用程序調度和編排工具-南華中天

      雖然我們在關于 DevOps 景觀的綜合指南中已經觸及了這個主題,但本文將詳細闡述調度和編排的工作原理。有多種工具可以幫助您編排應用程序服務器,消除部署大量容器帶來的大部分復雜性。但在我們開始之前,讓我們先解釋一下容器在 DevOps 世界中扮演的重要角色。

      什么是軟件容器?

      作為包括微服務和 DevOps 在內的現代軟件開發的關鍵組成部分,如果不深入研究容器的概念,就無法理解應用程序的調度和編排。根據標準的Docker 定義:“容器是一個標準的軟件單元,它將代碼及其所有依賴項打包在一起,因此應用程序可以快速可靠地從一個計算環境運行到另一個計算環境?!?/p>

      簡而言之,容器是一個小型的獨立軟件包,包含運行應用程序所需的一切;代碼和所有其他依賴項(例如系統工具、庫和運行時等等)。它的核心優勢是體積小,允許您將大量容器打包到一臺計算機上,所有容器都在共享操作系統內核上運行。

      在容器出現之前,同樣的工作是由虛擬機完成的,它不僅將應用程序代碼及其依賴項打包在一起,而且還運行一個隔離的操作系統。這意味著許多操作系統內核將在一臺服務器上運行,彼此不知情。除此之外,整個過程有時由主機操作系統管理。

      由于這些虛擬機在模擬服務器上運行,因此存在與該過程相關的各種困難。與容器相比,虛擬機通常是影響整體系統性能的開銷,導致企業每美元的性能較低。使用容器,您只需打包應用程序代碼、相關庫及其依賴項。此外,唯一的操作系統是主機的操作系統,這意味著容器可以直接與操作系統通信,而不會產生不必要的開銷。

      容器有幾個好處

      容器的最大好處之一是它們為開發人員簡化了軟件部署。通過將基本要素與代碼打包在一起,開發人員可以更輕松地知道他們的應用程序軟件將執行,而不管它部署在何處。

      容器也是被稱為“微服務”的新應用程序開發趨勢的核心部分。容器不是獨立的整體應用程序,而是允許您將應用程序分解為松散耦合的微服務,這些微服務通過不可知的 API 接口相互通信。微服務架構可以帶來大量好處,我們的微服務軟件架構風格概述中對此進行了介紹。但是由于它們的體積小,一個全尺寸的應用程序需要大量的容器來運行——因此,有許多需要管理的移動部件。這就是應用程序調度和編排的用武之地。

      應用編排和調度

      應用程序編排,通常稱為容器編排,是一種非常流行的技術,被世界各地的開發團隊用來管理數量極其龐大的容器。Devopedia將容器編排定義為:“……一個自動化基于容器的應用程序的部署、管理、擴展、網絡和可用性的過程。”容器管理涉及大量任務,例如供應、管理、擴展和網絡等等。對于具有五個容器的應用程序,開發團隊可能能夠有效地管理這些任務;但是大型應用程序從數千個容器中獲取數據。通過編排,開發人員可以自動化簡化整個流程的各種工作。

      值得注意的一點是,調度通常被視為整個容器管理范圍的一部分,而一些專家將其視為一個單獨的容器原則。根據微軟的說法,“調度意味著管理員能夠在集群中啟動容器,因此它們也提供了一個 UI?!比萜髡{度程序有很多職責,從最有效地利用資源到確??绮煌濣c或主機的有效負載平衡。由于它們靠近集群,它們通常被同等對待。事實上,流行的容器編排工具也提供了調度能力。

      它是如何工作的?

      有效編排容器的第一步是確定正確的工具。著名的名字包括 Docker Swarm 和 Kubernetes,但我們稍后會談到它們。

      首先我們來分析一下應用編排和調度過程是如何工作的:

      • 一旦您確定了您的編排工具,下一步就是描述應用程序的配置。這可以在 JSON 或 YAML 文件中完成。
      • 配置文件有一個重要的用途;它將容器編排工具定向到存儲圖像和日志的位置。此外,它還協助工具完成如何掛載存儲卷以及如何建立容器內網絡的過程——這個位置通常是一個私有注冊表。
      • 編排工具將在復制組中進一步將它們部署到主機服務器上。這可確保在檢查預定義的先決條件(例如 CPU 內存要求)后自動安排集群內發生的任何新部署。
      • 部署到主機后,編排工具可確保使用配置文件中規定的條件和規定來管理容器的生命周期。

      通常,開發團隊會在將相同的應用程序部署到生產環境之前,嘗試通過在各種測試環境中部署相同的應用程序來控制配置文件。借助容器編排工具,開發人員可以自由選擇部署位置。這些工具可以在各種環境中運行,從本地服務器和本地機器到公共云基礎設施提供商。

      最流行的應用程序調度和編排工具

      市場上有很多應用程序調度和編排工具,各有優缺點。以下是主導軟件開發市場的前三名的概述:

      庫伯內斯

      Kubernetes 已成為軟件開發行業的基準編排工具之一。它的起源可以追溯到谷歌,最初是搜索引擎巨頭“Borg 項目”的迭代。此外,它還是著名的Cloud Native Computing Foundation的核心,該基金會得到 Google、Amazon Web Services、Microsoft、IBM、Intel、Redhat 和 Cisco 等計算巨頭的支持。

      Kubernetes 的標志仍然是它允許開發人員交付 PaaS(平臺即服務)的能力,這有助于創建硬件抽象層,而它能夠跨領先的云平臺和本地服務器運行是另一個加分項。這允許團隊輕松地跨不同平臺移動工作負載,而無需投資于應用程序重新設計。

      Kubernetes 的主要組件包括:

      • 集群:一組節點,通常由一個主節點領導。其他節點(worker)可以是虛擬機也可以是物理機。
      • Kubernetes master:根據定義的策略,master 跨所有節點管理應用程序實例——從部署到調度。
      • Kubelet:每個節點都運行一個稱為 Kubelet 的代理進程,它從 API 服務器獲取所有相關信息。
      • Pod:最基本的單元,可能由位于同一主機上的多個容器組成;每個 pod 都有一個唯一的 IP 地址。
      • Deployments:描述 Pod 和容器實例數量的 YAML 對象
      • ReplicaSet:您希望在集群中運行的副本數量只能由 ReplicaSet 定義。如果運行 Pod 的節點發生故障,ReplicaSet 可以確保在可用節點上進行調度。

      碼頭群

      它是另一種流行的編排工具,提供與 Docker 的完全集成。它不如 Kubernetes 復雜,是剛開始使用容器編排的開發人員的絕佳選擇。簡而言之,Docker Swarm 由于與平臺的固有集成,使工程師能夠更輕松、更快速地進行容器部署。盡管如此,Dockers 提供了兩者——它自己的編排工具“Swarm”和 Kubernetes——希望讓它們成為免費的。

      Swarm 的主要組件包括:

      • Swarm:一組節點,通常伴隨著一個主節點。每個節點表示一臺機器,無論是虛擬的還是物理的。
      • 服務:管理員列出的綁定在代理節點上的每個任務都是一項服務。它有助于描述節點將使用哪些容器映像以及將在每個容器中執行哪些命令。
      • 管理器節點:顧名思義,管理器會忽略集群的交付和狀態。
      • 工作節點:經理分配的任務由工作人員接收。每個節點向主節點報告,而管理器只跟蹤任務。
      • 任務:在 Docker 環境中,“任務”是執行服務中列出的命令的容器。一旦工人有任務,就不能重新分配。此外,如果任務在副本集中失敗,則會將任務的新版本分配給下一個可用的工作人員。

      阿帕奇月

      Mesos 由加州大學(伯克利分校)制造,比 Kubernetes 存在的時間更長。它以為開發人員提供高級可擴展性的輕量級應用程序而聞名。一個典型的 Mesos 可以運行超過 10,000 個節點——這還不包括它允許獨立發展的框架。此外,它還支持多種流行的編程語言,例如 Java、C++ 和 Python。需要注意的是,Mesos 僅提供集群管理解決方案。因此,開發人員必須構建整個框架以啟用容器的編排——一個流行的例子包括Marathon。

      Mesos 的關鍵組件包括:

      • 主守護進程:監督工作節點的主節點。
      • Agent Daemon:編排框架下發的每一個任務都由Agent完成。
      • Framework:編排平臺,使其能夠從集群管理器(Mesos)接收資源并發送要執行的任務。
      • Offer:與通過 Mesos 發送到編排框架的代理節點有關的信息。
      • Task:根據資源offer需要完成的工作。

      應用編排工具的好處

      最終,編排工具承擔了許多以前會讓開發人員忙得不可開交的流程;有了這些,資源就可以專用于更重要的任務。

      以下是應用程序編排工具的一些好處:

      可運輸性

      現代工具允許在不影響應用程序其余部分的情況下擴展特定的應用程序組件。

      快速部署

      面對增加的流量?編排工具可以幫助您快速創建新的容器化應用程序。

      提高效率

      通過自動執行多項核心任務,您可以減少人為錯誤的可能性。有了這樣一個簡化的安裝過程,您的軟件開發團隊的工作效率就會提高。

      高度安全

      通過應用程序的容器化,這些工具允許您共享資源而不會危及數據的安全性。

      結論

      軟件開發行業已迅速轉向采用容器模型,因為它允許他們簡化整個部署過程。但軟件容器的成功在很大程度上得益于允許用戶自動化容器管理的高級編排工具的出現。在 Kubernetes 繼續主導行業的同時,還有許多其他工具也具有不同的優勢。最終,適合您的選擇取決于您的要求以及最能滿足這些要求的工具。