什麼是容器協調?

容器協調是一種可自動化容器化應用程式的部署、管理和大規模擴充的技術。它簡化了管理大量 容器的複雜任務。 Kubernetes等容器協調器可確保這些容器在不同的伺服器和環境中有效互動。Orchestrators 提供了管理容器生命週期、促進服務發現和維持高可用性的架構。對於 微服務架構( 雲端原生 應用程式包含許多相互依存的元件) 而言,此 Framework 是基礎 架構。

透過利用容器協調, DevOps 團隊 可以簡化佈建、資源分配和大規模擴充,使他們能夠充分發揮容器化的潛力,並與業務目標保持一致。

 

容器協調說明

容器協調可自動化容器化應用程式的部署、管理和大規模擴充。企業利用協調器控制和協調大量容器,確保它們在不同伺服器之間有效互動。

部署微服務新版本、大規模擴充微服務以滿足需求,以及監控微服務效能與健康狀況的協調層

圖 1:部署微服務新版本的協調層、擴充微服務以滿足需求,以及監控微服務的效能與健康狀況

像 Kubernetes 之類的協調器可管理生命週期、促進服務發現,並維持高可用性。它們可讓容器協同運作,這對於雲端原生應用程式由眾多相互依存的元件組成的微服務架構非常重要。

容器協調市場事實上與微服務架構、雲端原生應用程式和 容器化的採用同步。以 2022 年的 7.4572 億美元計算 (五年間成長 26%), 市場規模不斷地攀升,預計到 2029 年將達到 1,0847.9 億美元

 

編排工具

協調工具提供自動化容器工作負載的框架,讓 DevOps 團隊能夠管理容器的生命週期。這些系統或稱為協調引擎,可促進先進的網路功能,簡化容器和微服務的佈建,同時調整資源以滿足需求。有了協調器,DevOps 團隊就能充分發揮容器化的潛力,使其符合業務目標。

熱門容器協調引擎

  • Kubernetes® (K8s)
  • 牧場主
  • SUSE Rancher
  • 亞馬遜彈性 Kubernetes 服務 (EKS)
  • Azure Kubernetes 服務 (AKS)
  • Google Kubernetes Engine (GKE) / Anthos
  • Red Hat OpenShift 容器平台 (OCP)
  • 中間體
  • 思科容器平台 (CCP)
  • Oracle Kubernetes 容器引擎 (OKE)
  • 愛立信集裝箱雲端 (ECC)
  • Docker Swarm
  • HashiCorp 游牧

協調引擎的優勢來自於它們通常採用的宣告式模型,這種模型有效地結合了 基礎架構即服務 (IaaS)平台即服務 (PaaS)的優點。

  • IaaS 提供細緻的控制和自動化功能,讓開發人員可以管理底層基礎架構,例如伺服器、儲存設備和網路。這讓開發人員可以靈活地自訂部署,以滿足特定需求。
  • PaaS 提供了更高層級的抽象,讓開發人員可以專注於應用程式,而不必擔心底層基礎架構。PaaS 可讓工程師更輕鬆地部署和管理應用程式,但同時也減少了工程師對基礎架構的控制。

協調器汲取兩者的優點,為開發人員提供強大的靈活性,以及跨環境的一致作業體驗,從實體機器和內部資料中心,到虛擬部署和雲端環境。

傑出協調引擎的核心功能包括排程、資源管理、服務發現、健康檢查、自動擴充,以及管理更新與升級。

 

協調器的主要元件

目前市場上各種工具對於容器協調元件的術語各有不同。不過,基本概念和功能仍然相對一致。表 3 提供了流行容器協調器的主要元件與相對應術語的比較概觀。為了達到我們的目的,我們會使用 Kubernetes 的詞彙來介紹協調機制。

容器協調元件概觀

圖 2:容器協調元件概觀

像 Kubernetes 之類的協調引擎非常複雜,由幾個嚴重性的技術元件組成,這些元件協同運作以管理容器的生命週期。透過瞭解關鍵元件,您就能瞭解如何以最佳方式運用容器化技術。

控制平面

Kubernetes 的核心在於其控制平面,也就是排程和管理應用程式生命週期的指揮中心。控制平面會揭露 Kubernetes API、協調部署,並指導整個系統的通訊。它還可以監控容器的健康狀況並對群集進行管理,確保容器映像可以隨時從註冊表中獲得,以便進行部署。

Kubernetes 控制平面包含幾個元件 - etcd、API 伺服器、排程器和控制器管理員。

etcd

由 CoreOS 開發、後來被 Red Hat 收購的 etcd 資料儲存區,是一個分散式的鍵值儲存區,用來保存群集的設定資料。它會通知協調器的動作,以維持所需的應用程式狀態,如宣告式政策所定義。此政策概述了應用程式的最佳化環境,指導協調器管理實體數量、儲存需求和資源分配等屬性。

API 伺服器

Kubernetes API 伺服器扮演關鍵角色,透過 RESTful 介面揭露群集的功能。它會處理請求、驗證請求,並根據收到的指示更新群集的狀態。此機制可對工作負載和資源進行動態配置和管理。

排程

Kubernetes 中的排程器會根據資源可用性和其他限制條件 (例如服務品質和親和性規則) 將工作負載指派給工作人員節點。調度程序可確保工作負載的分佈對群集的目前狀態和資源配置保持最佳化。

控制器經理

控制器管理員維護應用程式的理想狀態。它透過控制器運作,這些控制迴路會監控群集的共享狀態,並作出調整,使目前的狀態與期望的狀態一致。這些控制器可確保節點和 Pod 的穩定性,回應群集健康狀況的變化,以維持運作的一致性。

容器協調器 控制平面元件 工作節點元件 部署單位 服務
Kubernetes API 伺服器、排程器、控制器管理員等 kubelet 花苞 服務
Docker Swarm 經理 工人 服務 堆疊
游牧民族 伺服器 代理 工作機會 分配
中間體 大師 代理 任務 工作機會
OpenShift 控制台、控制器管理員、etcd 節點 花苞 服務
亞馬遜彈性容器服務 (ECS) 叢集控制器 EC2 實體 任務 服務
Google Kubernetes Engine (GKE) 控制平面 節點 花苞 服務
Azure Kubernetes 服務 (AKS) 控制平面 節點 花苞 花苞

表 1:各種協調引擎的共通元件。

協調與不可變的基礎架構

與傳統伺服器和虛擬機器不同的是,容器及其基礎架構的不可變模式使得部署後的修改不存在。取而代之的是,透過從具有必要變更的共用映像部署新容器或伺服器來套用更新或修正。

不可變更基礎架構固有的可程式化功能可實現自動化。基礎架構即 程式碼 (IaC) 是現代基礎架構的一大特色,允許應用程式以程式化的方式佈建、配置及管理所需的基礎架構。集裝箱協調、不變基礎架構和 IaC 驅動的自動化等功能於一身,可提供無與倫比的彈性和擴充性。

 

容器協調與管道

在集裝箱化及 DevOps 的雙引擎推動下,集裝箱協調將速度與可擴充性結合起來,為今日動態且要求嚴苛的 生產管道奠定基礎。

CI/CD 管道應用程式開發生命週期

圖 3:CI/CD 管道應用程式開發生命週期

取得並建立管道階段

在取得與建立階段,開發人員會從版本控制程式碼儲存庫中拉取程式碼,啟動建立程序。自動化工具可將原始碼編譯為二進位工件,以便使用 Docker 或 BuildKit 等工具進行部署。一旦容器映像建立完成,它就會儲存在 Docker Hub 或 Google Artifact Registry 等註冊表中。

獲取與建置階段可促進應用程式的一致建構,並透過腳本管理相依性和執行初步測試。結果是一個可靠的建立,當與主要分支整合時,會觸發進一步的自動化流程。

運行階段

當建立階段結束時,管道會在受控制的環境中執行程式碼。在暫存環境中執行容器映像可以使用 Kubernetes 等容器編排工具來完成。這個關鍵步驟需要團隊進行一系列自動化測試,以驗證應用程式的功能。開發人員會主動尋找並處理錯誤,以確保只有高品質的程式碼才能通過管道。

交付階段

在 CI/CD 管道的交付階段,團隊會自動執行新程式碼從程式 碼儲存庫 到生產準備就緒的過程。每次提交都會啟動一連串嚴格的自動化測試和品質檢查,確保只有經過嚴格審核的程式碼才能進入暫存環境。在此,軟體還要經過額外的驗證,通常是面向客戶的驗證。此流程包涵了建置在各種環境中的升級,每種環境都是穩定性和效能的驗證場。團隊對交付階段的承諾可確保軟體體現當前開發工作的最佳成果。

部署階段

在部署階段,當團隊將應用程式推出生產環境時,應用程式就到了關鍵時刻。Kubernetes 等容器編排工具會負責控制、大規模擴充應用程式,並以最少的停機時間進行更新。團隊已準備好回滾機制,讓他們在出現任何問題時,可以回復到先前的版本。此時,應用程式開始運作,為其目標使用者提供服務,並完成其在數位生態系統中的目的。

維持階段

部署後,團隊會轉換為主動維護應用程式。他們採用 運行時解決方案 ,不斷地監控效能、記錄錯誤並收集使用者回饋,所有這些都會驅使未來的增強功能,以及 容器安全性

當開發人員微調應用程式、套用安全修補程式並推出新功能時,維護階段突顯了現代應用程式開發的迭代性質。無形中,產品不斷地演進,以滿足使用者的需求,並整合最新的技術進步。

 

容器協調的優點

容器協調提供了一系列符合 DevOps 目標的優點,最終可提升雲端環境的作業效率並降低開銷。

增強擴充性

集裝箱協調平台可讓企業因應波動的需求來大規模擴充集裝箱應用程式,而無需人工介入或嘗試預測應用程式負載。Orchestrator 的 bin 套件和自動擴充功能,加上公有雲端基礎架構即程式碼,可動態分配資源,確保在高峰負載期間達到最佳化效能。

促進復原能力

透過在多台主機間分佈容器實體,協調工具可加強應用程式的彈性。它們會偵測故障並自動重新啟動容器,將停工時間降至最短,並維持服務的不斷地。

提升效率

Orchestration 引擎可依據應用程式在各種使用情境中的需求調整資源,避免過度配置或要求組織針對高水資源利用率進行架構與規劃。此效率可降低基礎建設成本,並使投資報酬率最大化。

簡化管理

集裝箱協調器提供統一介面來管理集裝箱群集,將複雜的任務抽象化,並減輕操作負擔。團隊可以部署更新、監控健康狀況,並執行政策,只需最少的手動干預。

提高安全性

容器協調可自動部署修補程式和安全性更新,從而增強安全性。它可在整個容器機隊中執行一致的安全性政策,降低漏洞風險。

可攜性

Orchestration 可確保容器化應用程式與底層基礎架構保持不相關,促進不同雲端環境和內部部署資料中心之間的可移植性。

加速部署週期

透過自動化部署流程,協調工具縮短了從開發到生產的時間,實現了快速迭代,並加快了新功能的上市時間。

支援 DevOps 實務

CI/CD 管道 整合並提升軟體開發的敏捷性,容器協調可促進開發與作業團隊之間的合作。健康監控和自我修復等功能可讓團隊減少系統支援和疑難排解,最佳化 DevOps 的生產力。

 

容器生態系統

很簡單,容器生態系統代表著應用程式開發和部署的重大轉變。它包含一系列元件 - 從執行時引擎到協調平台、登錄和安全工具 - 為企業提供當今快節奏的數位環境所需的重要效率。

當然,這個生態系統的核心在於容器引擎和協調引擎之間的協同效應。這些技術共同引導容器化應用程式通過其生命週期的複雜階段。

容器引擎會建立並包裝個別容器,而 Orchestrator 引擎則會在分散式基礎架構中管理並協調多個容器。

在開發過程中,容器引擎有助於快速原型設計和測試,讓開發人員可以快速、有效率地進行迭代。當應用程式成熟時,協調器就會將應用程式轉換到生產中,為處理真實世界的工作負載提供穩健且可擴充的基礎。

代表容器和協調引擎動態的 Docker 和 Kubernetes

圖 4:代表容器和協調引擎動態的 Docker 和 Kubernetes

對企業領導者的策略影響

軟體部署的敏捷性與速度

容器生態系統加速了應用程式的部署。透過將應用程式封裝在容器中,無論底層環境為何,組織都能迅速從開發階段進入生產階段。對於需要快速適應市場變化或使用者需求的組織而言,這種敏捷性至關重要。

強化效率與資源最佳化

容器共用底層 作業系統核心 ,消耗較少的資源,是傳統虛擬機器的替代 方案。這種效率可轉化為營運成本的降低以及運算資源利用率的提升,對於管理大規模應用程式的企業而言,這是一項關鍵優勢。

擴充性與彈性

對於需求不定的數位企業而言,容器生態系統中的協調器非常重要,可讓企業在不影響效能的情況下大規模擴充應用程式。容器生態系統作為一個整體,完善了先前的大規模擴充和資源可用性的能力。

跨環境的一致性與可攜性

容器生態系統可確保一致性和可攜性。包裝在容器中的應用程式可以在不同的運算環境中統一且可靠地運行,從內部部署的資料中心到公共雲端。

託管容器環境剖析

圖 5:託管容器環境剖析

為貨櫃驅動的未來做好準備

未來的數位世界,即使不是全部,也是大部分的應用程式都在容器上執行。對於主管而言,瞭解容器生態系統背後的協同效應可提供策略優勢。有了明智的觀點,就能讓您預測並有效地滿足現代軟體開發不斷演進的需求 - 並獲得最佳化的投資報酬率。

 

容器協調常見問題

Helm 是 Kubernetes 的套件管理器,可簡化 Kubernetes 集群上應用程式的部署與管理。它使用稱為圖表的套件,圖表是預先設定的 Kubernetes 資源。即使是最複雜的 Kubernetes 應用程式,Helm 圖表也能簡化定義、安裝和升級的過程。它可以管理圖表間的依賴關係,並以受控制的方式更新圖表。Helm 對於管理複雜部署的 DevOps 團隊來說是不可或缺的,因為它提供了一種高效、可重複且標準化的方式來部署應用程式。
Kubernetes 中的 ReplicaSet 可確保任何指定時間都有指定數量的 pod 複製品在運行。它主要用於保證指定數量的相同 pod 的可用性。如果 Pod 失敗,ReplicaSet 會啟動新的 Pod 來取代它。ReplicaSets 對於維持應用程式的理想狀態和高可用性至關重要,尤其是在分散式和動態雲端環境中。
Kubernetes 中的部署為應用程式提供宣告式更新。它允許您描述應用程式的生命週期,例如應用程式要使用哪些映像、pod 的數量,以及更新的方式等等。部署可管理 ReplicaSets,並提供回滾至先前部署狀態的功能,因此對於管理無狀態應用程式以及確保其彈性和可擴展性而言,部署是不可或缺的。
Kubernetes 中的 StatefulSet 用於管理有狀態的應用程式。與部署管理的無狀態應用程式不同,有狀態應用程式需要持久性儲存和唯一的網路識別碼。StatefulSets 會為每個 Pod 維護一個黏性身分,以確保即使每個 Pod 移到不同的節點,也能以相同的主機名稱和儲存空間重新排程。
Kubernetes 中的 DaemonSet 可確保所有 (或部分) 節點都執行特定 pod 的複本。當節點加入群集時,pod 也會自動加入。同樣地,當節點從群集移除時,這些 Pod 也會被垃圾回收。DaemonSets 是在每個節點上執行記錄、監控或網路代理等工作的理想選擇,因為它們會在整個群集中自動管理這些工作的部署和大規模擴充。
Kubernetes 中的服務是一種抽象,定義了 Pod 的邏輯集及存取 Pod 的政策。此抽象將工作定義與 Pod 解耦。服務會在一組 Pod 之間路由流量,通常由選擇器決定。它們允許相依 Pod 之間的松散耦合,提供 IP 位址和 DNS 名稱,藉此可以存取 Pod。服務對於確保網路應用程式可輕鬆存取,並能適應底層 Pod 組態的變更至關重要。
Kubernetes 中的 Ingress 是一種資源,用來管理對叢集內服務的外部存取,通常是 HTTP。Ingress 允許您定義將流量路由到服務的規則,包括 URL 路徑、負載平衡、SSL 終止和基於名稱的虛擬主機。它是管理從外部世界存取容器化應用程式的關鍵元件,提供比簡單的連接埠轉送更複雜、更靈活的解決方案。
Kubernetes 中的 ConfigMap 是用來以鍵值對儲存非機密資料的資源。Pod 可以將 ConfigMaps 作為環境變數、指令行參數或卷中的組態檔案來使用,這可讓您將組態工件與影像內容分開。
Kubernetes 中的 Persistent Volume (PV) 是群集中由管理員佈建或使用 Storage Classes 動態佈建的一塊儲存空間。它是群集中的一種資源,就像節點一樣,並在任何單獨 pod 的生命週期中持續存在。PV 提供應用程式獨立於底層儲存基礎架構掛載儲存的方式,為有狀態的應用程式提供更一致且整合的儲存解決方案。
Kubernetes 中的 Persistent Volume Claim (PVC) 是使用者對儲存的請求。它與 Pod 相似,Pod 消耗節點資源,而 PVC 消耗 PV 資源。PVC 允許使用者抽象出儲存如何提供以及如何消耗的細節。當使用者請求 PVC 時,他們會被綁定到群集中的可用 PV,提供 Kubernetes 環境中管理儲存資源的動態方式。
Kubernetes 中的 Autoscaling 是指根據當前負載自動調整部署、複製集或有狀態集中的 Pod 數量。自動擴充有助於確保應用程式在任何特定時間都擁有適當的資源量,提高資源利用率並有效處理波動的工作負載。Horizontal Pod Autoscaler (HPA) 和 Vertical Pod Autoscaler (VPA) 是 Kubernetes 中兩種常見的自動擴充器類型,可分別擴充 Pod 的數量和 Pod 的大規模。
上一頁 什麼是容器安全性?
下一頁 什麼是容器註冊安全性?