當我第一次開始使用容器技術時,Docker CLI 確實提供了一套完整的命令來管理單一容器的生命週期 - 從映像檔提取、容器啟動、提交變更到終止執行,這些基本操作讓開發者能夠快速上手。然而,隨著我在多個專案中引入容器化架構,很快就發現單一主機上管理個別容器的方法難以擴充套件到真實的生產環境。

在現代分散式系統中,應用程式通常由多個容器組成,這些容器需要佈署在多台主機上,並且彼此協同運作。這種環境下,單純的容器管理工具顯得力不從心,我們需要的是能夠協調整個生態系統的協調工具。

協調工具的出現,正是為瞭解決這個複雜性問題。它們將生命週期管理能力擴充套件到複雜的多容器工作負載,並讓這些工作負載能夠在多主機叢集上順暢執行。透過抽象化底層基礎設施,協調工具讓使用者能將整個叢集視為單一佈署目標,大幅簡化了管理複雜度。

容器協調的基礎功能:現代協調工具的核心特性

在我參與設計多個微服務架構的過程中,發現容器協調工具的核心價值在於自動化應用程式的整個生命週期 - 從初始放置、排程和佈署,到穩定狀態下的活動,如更新、擴充套件和健康監控。這些能力已成為現代容器協調工具的標準特性。

宣告式設定:基礎藍圖的定義方式

宣告式設定是協調工具的核心元素之一。它允許開發團隊使用標準結構化語言(如YAML或JSON)來定義應用程式的藍圖及其設定。我在實務中發現,這種方法的優勢在於:

# Docker Compose 宣告式設定範例
version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - app
  app:
    build: ./app
    environment:
      - DB_HOST=db
    depends_on:
      - db
  db:
    image: postgres:13
    volumes:
      - db-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=mysecretpassword

volumes:
  db-data:

這種宣告式定義包含了關鍵資訊,如映像函式庫、網路連線埠、儲存卷和日誌設定等。透過這種設定方法,協調工具可以在不同環境中應用相同的設定,並始終產生一致的結果。這也讓團隊能夠為同一應用程式在開發、測試和生產階段提供不同的設定,以適應各種目標環境的特性。

規則與約束:工作負載放置的智慧決策

在我設計高用性系統時,發現工作負載通常有特定的放置需求。例如,將主資料函式庫屬資料函式庫佈署在同一主機上是沒有意義的,這會破壞高用性的目的。相反地,將記憶體快取與網頁伺服器放在同一主機上可能是明智之舉,以減少網路延遲。

協調工具支援定義容器放置的親和性與約束機制,讓管理員能夠指定如:

  1. 哪些容器應該共同佈署在同一主機上(親和性)
  2. 哪些容器必須分散在不同主機上(反親和性)
  3. 容器對主機資源的特定需求(例如GPU、SSD儲存等)

這些規則確保容器以最佳方式分佈在叢集中,同時滿足效能和可用性需求。

資源佈建與排程:容器放置的藝術

佈建(或稱排程)涉及協商容器在叢集內的放置並啟動它們。這個過程根據設定選擇適當的主機。協調工具不僅提供容器佈建API,還會呼叫特定於主機環境的基礎設施即服務功能。

在我管理的一個大型電商平台中,排程器需要考慮多種因素做出決策:

  • 主機當前負載和可用資源
  • 網路拓撲和延遲要求
  • 儲存需求和可用性
  • 高用性和災難復原考量

優秀的協調工具能夠根據這些因素人工智慧地分發容器,確保整體系統效能最佳化。

服務發現:分散式佈署的關鍵

在由多主機上執行的容器組成的分散式佈署中,服務發現變得至關重要。網頁伺服器需要動態發現資料函式庫器,負載平衡器需要發現並註冊網頁伺服器。

協調工具通常提供或期望有分散式鍵值儲存、輕量級DNS或其他機制來實作容器的服務發現。這些機制讓容器能夠自動找到並連線到它們所依賴的其他服務,而不需要硬編碼IP位址或連線埠。

在我參與的一個金融科技專案中,服務發現機制讓我們能夠實作無縫擴充套件和容錯移轉,系統能夠自動偵測新增加的服務例項或失敗的節點,並相應地調整路由策略。

健康監控:確保系統穩定性

由於協調工具瞭解系統的期望設定,它們能夠追蹤和監控容器和主機的健康狀態。當主機故障時,工具可以重新定位容器。同樣,當容器當機時,協調工具可以啟動替代容器。

健康監控通常包括:

  • 容器狀態檢查(執行中、停止、當機等)
  • 應用程式健康探測(如HTTP端點回應)
  • 資源使用監控(CPU、記憶體、網路等)
  • 日誌和事件分析

協調工具確保佈署始終符合開發者或維運人員宣告的期望狀態,這是維持系統可靠性的關鍵所在。

Docker Swarm:原生容器協調解決方案

在眾多容器協調平台中,Docker Swarm 以其簡單性和與 Docker 核心的無縫整合而脫穎而出。作為 Docker 生態系統的原生協調工具,Swarm 的設計目標是沿用與核心 Docker Engine 相同的 API。

Swarm 的設計理念:保持 API 一致性

Docker Swarm 的核心優勢在於其透明性。開發者不需要學習新的 API 或工具,只需將目標從單一 Docker Engine 的 API 端點切換到代表 Docker Engine 池的 Swarm 端點。這意味著現有的工具和 API 可以相同的方式繼續與叢集協作,就像它們與單一例項協作一樣。

這種設計理念讓我在匯入容器協調時,能夠平滑過渡,團隊成員不需要額外學習新工具,使用熟悉的 Docker CLI 和 Compose 就能建立和管理應用程式。

Swarm 的排程策略與靈活性

Docker Swarm 提供多種內建的排程策略,使用者可以根據需求引導容器放置,以最大化或最小化容器在叢集中的分佈。它支援:

  • Spread 策略:盡可能將容器分散到不同節點,提高用性
  • Binpack 策略:盡可能將容器集中到少數節點,提高資源利用率
  • Random 策略:隨機放置容器

Docker 遵循「電池包含但可拆卸」的原則,這意味著雖然目前它只附帶少數簡單的排程後端,但未來可能透過可插拔介面支援更多後端。根據使用情境的規模和複雜性,開發者或維運人員可以選擇插入適當的後端。

約束與親和性:精確控制容器放置

Swarm 支援約束和親和性來決定容器在特定主機上的放置。約束定義了選擇主機子集的要求,這些主機應該被考慮用於排程。它們可以根據屬性如儲存類別、地理位置、環境和核心版本。

親和性定義了在主機上共同放置容器的要求。例如,在我設計的一個媒體處理系統中,我使用親和性規則確保編碼容器和儲存容器佈署在同一節點,以最小化資料傳輸延遲。

服務發現機制:靈活的後端架構

對於發現每個主機上的容器,Swarm 使用可插拔的後端架構,可以與簡單的託管發現服務、靜態檔案、IP 列表、etcd、Consul 和 ZooKeeper 等配合使用。

這種靈活性讓 Swarm 能夠適應各種環境和需求,無論是小型開發環境還是大型生產佈署。在我參與的一個跨國電商平台中,我們利用 Consul 作為服務發現後端,實作了跨資料中心的容器協調,大幅提升了系統的彈性和可靠性。

容器協調的價值:從單一容器到協調系統

從我多年的容器技術實踐經驗來看,協調工具的真正價值在於它們將容器從孤立的執行單元轉變為協作系統的元件。這種轉變帶來了諸多好處:

  1. 自動化還原:系統能夠自動偵測並修復故障,提高整體可靠性
  2. 資源最佳化:人工智慧排程確保資源得到最佳利用
  3. 擴充套件簡化:可以輕鬆擴充套件服務,應對流量波動
  4. 佈署一致性:無論環境如何,佈署結果始終一致
  5. 維運效率:減少人工干預,降低維運成本和錯誤率

容器協調工具正是連線開發和維運的橋樑,它們讓複雜的分散式系統變得可管理,使組織能夠充分發揮容器技術的潛力。

隨著容器技術的不斷發展,協調工具也在不斷演進,提供更豐富的功能和更高的可靠性。作為技術專業人士,掌握這些工具的核心概念和最佳實踐,將有助於我們設計和維護更健壯、更高效的現代應用系統。

容器協調已經成為現代雲原生架構的根本,它不僅簡化了複雜系統的管理,還為創新和快速迭代提供了堅實的技術基礎。無論是初創企業還是大型企業,掌握容器協調技術都將成為應對數位轉型挑戰的關鍵能力。

容器協調技術:現代分散式系統的根本

在容器技術成為軟體佈署標準的今日,單純執行容器已不足以應對企業級應用的複雜需求。隨著應用規模擴大,容器協調(Container Orchestration)已成為管理分散式系統的關鍵能力。經過多年在大型企業環境中實作容器平台的經驗,玄貓發現,選擇合適的協調工具不僅關係到佈署效率,更直接影響系統的可靠性與擴充套件性。

協調系統的本質與重要性

協調系統的核心任務是自動化管理容器的生命週期 - 從佈署、擴充套件到故障還原。在我參與的金融科技專案中,容器協調平台幫助團隊將應用佈署時間從數天縮短至數分鐘,同時顯著提高了系統穩定性。

協調平台必須處理的關鍵功能包括:

  • 容器排程(Container Scheduling)
  • 叢集管理(Cluster Management)
  • 服務發現(Service Discovery)
  • 負載平衡(Load Balancing)
  • 健康檢查與自動還原(Health Checking & Self-healing)
  • 滾動更新(Rolling Updates)

接下來,讓我們深入分析當前主流的三大協調平台:Kubernetes、Docker Swarm和Apache Mesos的架構特性與適用場景。

Kubernetes:Google經驗的結晶

架構根源與設計哲學

Kubernetes源自Google內部的Borg系統,這是一個每天負責啟動超過20億個容器的內部叢集管理系統。這種淵源賦予了Kubernetes處理極大規模工作負載的天然能力。

我曾在一家電子商務公司實作Kubernetes,其分層架構讓我們能夠輕鬆應對節日購物高峰期的流量暴增,系統從基礎的50個容器例項自動擴充套件至超過500個,整個過程無需人工干預。

Kubernetes的核心架構

Kubernetes採用主從式架構,包含以下關鍵元件:

Master節點元件

  • API Server:所有操作的統一入口,提供RESTful API介面
  • Scheduler:負責將Pod分配到適合的Node上
  • Controller Manager:管理控制器,如Replication Controller
  • etcd:分散式鍵值儲存系統,儲存所有叢集資料

Minion (Node) 節點元件

  • Kubelet:在每個Node上執行,接收並執行來自Master的命令
  • Container Runtime:如Docker,負責容器的實際執行
  • Kube-proxy:負責網路通訊與負載平衡

關鍵概念

  • Pod:Kubernetes中最小的佈署單位,可包含一個或多個容器
  • Replication Controller:確保指定數量的Pod副本正在執行
  • Service:定義了Pod的存取方式,提供穩定的服務發現機制
  • kubectl:命令列工具,用於與Master的API Server通訊

Kubernetes的健康檢查機制

Kubernetes支援三種應用健康檢查方式:

livenessProbe:
  httpGet:
    path: /health
    port: 8080
  initialDelaySeconds: 30
  timeoutSeconds: 1
  1. HTTP健康檢查:Kubelet呼叫Web端點,回應碼在200-399之間視為成功
  2. Container Exec檢查:Kubelet在容器內執行命令,回傳"OK"視為成功
  3. TCP Socket檢查:Kubelet嘗試與容器建立Socket連線,成功建立視為健康

在我主導的一個高用性金融系統中,我們結合使用了HTTP和TCP檢查,不僅監控應用層狀態,還能確保底層連線的可靠性,這種組合大幅減少了誤判率。

Docker Swarm:原生簡便的協調方案

Docker Swarm是Docker自家的協調解決方案,提供與Docker CLI完全相容的使用體驗。其最大優勢在於簡單易用,對於已熟悉Docker的團隊來說,學習成本極低。

Swarm架構與功能

Swarm採用簡潔的架構,包含以下主要元件:

  • Swarm Manager:負責整個叢集的管理,接收API請求
  • Node:執行容器的工作節點
  • Discovery Service:用於節點發現和叢集狀態維護

Swarm支援基本的健康監控功能,可以防止在故障主機上佈署容器。相較於Kubernetes,Swarm的功能相對簡化,但對於中小規模佈署或開發環境來說已經足夠。

我在一個中型媒體公司的技術轉型專案中選用了Swarm,原因很簡單:團隊已經熟悉Docker,而與應用複雜度不高。結果證明這是正確的選擇,整個遷移過程僅用了兩週,比預期快了50%。

Apache Mesos:為高效能工作負載設計

強大的分散式系統基礎

Apache Mesos最初設計用於支援高效能計算工作負載,在0.20.0版本中加入了對Docker的支援。與前兩者不同,Mesos不僅是容器協調平台,而是一個更通用的資源管理系統,能夠同時執行多種工作負載,包括Hadoop、Spark和容器化應用。

Mesos架構元件

典型的Mesos叢集包含以下元件:

  • Master Daemon:在主節點上執行,管理Slave節點
  • Slave Daemon:在每個工作節點上執行屬於Framework的任務
  • Framework:應用定義,包含一個Scheduler和多個Executor
  • Offer:Slave節點資源列表,Master將Offer提供給註冊的Framework
  • Task:由Framework排程執行在Slave節點上的工作單位
  • Apache ZooKeeper:用於協調Master節點集合

高用性設計

Mesos透過Apache ZooKeeper確保Master節點的高用性,複製Master形成仲裁。高用性佈署需要至少三個Master節點。系統中的所有節點(包括Master和Slave)都與ZooKeeper通訊,以確定當前的主導Master。主導Master對所有Slave進行健康檢查,並主動停用任何失敗的節點。

當Mesos與Marathon(一個用於長期執行服務的框架)結合使用時,可以根據HAProxy TCP/HTTP負載平衡器啟用服務發現,並結合一個輔助指令碼,該指令碼使用Marathon的REST API定期重新生成HAProxy設定檔案。或者,也可以使用Mesos-DNS這一根據DNS的服務發現機制。

{
  "id": "web-service",
  "cpus": 0.5,
  "mem": 128,
  "instances": 3,
  "container": {
    "type": "DOCKER",
    "docker": {
      "image": "nginx:latest",
      "network": "BRIDGE",
      "portMappings": [
        { "containerPort": 80, "hostPort": 0, "protocol": "tcp" }
      ]
    }
  },
  "healthChecks": [
    {
      "protocol": "HTTP",
      "path": "/",
      "portIndex": 0,
      "gracePeriodSeconds": 30,
      "intervalSeconds": 20,
      "timeoutSeconds": 5,
      "maxConsecutiveFailures": 3
    }
  ]
}

在一個處理大資料分析的專案中,我選擇了Mesos作為基礎平台,因為它能同時管理容器化的微服務和Spark分析任務。這種統一資源管理的能力讓我們避免了建立多個獨立系統的複雜性,資源利用率提高了約35%。

跨越現實:協調與可程式化基礎設施

容器生態系統的持續演變

容器生態系統正在快速發展,從大型基礎設施公司到PaaS供應商,從早期創業公司到無伺服器計算,每個參與者都努力在生態系統中佔據一席之地。

容器協調工具對於佈署真實世界的應用至關重要,因此推動了Docker和容器的採用。除了明確的協調工具外,還需要關注構建、佈署、CI/CD、PaaS等與協調器互動的工具。

面對當前複雜現實

Docker創始人兼技術長Solomon Hykes曾表示,軟體行業整體上未能真正實作可程式化基礎設施背後的理念。沒有十年或更多的程式設計經驗,很難成為一名有效的開發者。規模需要達到網際網路的規模。

「叢集、協調、容器間的網路、跨多個容器的儲存、分享儲存、安全性,以及內容驗證等,這些都是構建和佈署分散式應用的問題的一部分。這是一個龐大的問題列表,你需要組合各種工具來解決這些問題。而與這些工具需要整合,需要一起工作形成一個平台,否則你就有了一個巨大的拼圖,而拼圖的碎片永遠不會拼合在一起。」Hykes說道。

Docker採取漸進式的工具開發方法,不試圖透過開發一個包辦一切的平台來「大海撈針」。這種方法適用於整個Docker和容器生態系統,部分原因是規模帶來的複雜性和容器技術本身的特性。

容器的本質與影響

Docker和容器是程式,它們使元件的交付更加容易。容器不攜帶作業系統,這使得容器更輕量、更易於管理。它不需要對機器本身進行設定。

容器是一次性的 - 它體現了不可變基礎設施的概念;活動例項從不直接更改,而是在其設定更改時被替換。由於其輕量級和易於複製的特性,現有封裝形式的容器引入了以前未理解的新複雜性。

雲原生與可程式化基礎設施

雲原生的概念為組織如何開發可程式化基礎設施奠定了基礎,但其複雜性令人驚嘆。隨著容器的採用變得更加廣泛,加速了開放原始碼開發,Dev和Ops之間的壁壘將被打破,這是所有變革中最重要的轉變。

管理叢集的軟體將是協調平台,在使容器化叢集完全移動的資料平面上工作。基礎設施本身變得以應用為中心。

執行叢集和協調成千上萬的容器是一個全新的遊戲。它將軟體置於中心舞台,需要更多地監控元件而非應用本身。這是一個需要透過API進行自動化的高階理解的世界,以及考慮排程、叢集管理和一系列其他事項(如節點安全、健康檢查和優先順序)的協調。

今天,我們看到容器協調如何改變了我們檢視應用的視角。微服務使開發者專注於服務以及這些服務如何區分應用。容器是催化劑,使這些應用根據分散式叢集上的元件執行。Apache Mesos、Docker Swarm、HashiCorp Nomad和Kubernetes是很好的例子。它們幫助系統操作員建模他們的叢集並使服務可存取。

許多軟體公司已經建立了幾乎完全短暫的平台。對於採用彈性、擴充套件平台的公司來說,這個概念通常是關於如何完全消除虛擬機器,直接在裸機上構建並建立根據容器的叢集。

協調平台選擇

經過多年在不同規模企業中實施容器平台的經驗,玄貓總結了以下選擇協調系統的關鍵考量因素:

1. 規模與複雜度評估

  • 小規模與簡單應用:Docker Swarm提供最低的入門檻和學習曲線
  • 中等規模與多樣化需求:Kubernetes提供良好的平衡,功能豐富但仍可控
  • 大規模與異構工作負載:Mesos提供最佳的資源抽象和多框架支援

2. 團隊技能與經驗

協調平台的選擇應考慮團隊的現有技能。在一個主要使用Docker但缺乏Kubernetes經驗的團隊中,初期採用Swarm可能是更實際的選擇,同時逐步培養Kubernetes

容器協調的現實挑戰:連線各技術生態系統

在容器管理的領域中,有許多重疊的技術範疇與解決方案。IBM Cloud開放技術部門的首席技術長Chris Ferris在接受採訪時指出,目前市場上存在多種容器管理方案:Kubernetes、Docker Swarm、Mesos,以及OpenStack Magnum等專案,都致力於提供容器的協調、管理與排程功能。此外,還有Cloud Foundry這類別平台,雖然也提供容器排程與協調功能,但這些功能相對更加隱蔽。

這個現象引出了關鍵問題:

“這些技術都是在獨立的群組、獨立的社群中分別開發的…最終這些技術必須開始融合,或至少提供整合的能力。例如,如果我在Kubernetes Pod中執行容器,而我想將這些功能與我在OpenStack虛擬機器中執行的某些服務整合,從網路和儲存的角度來看,我該如何做到這一點?如何在這些平台之間分享網路和儲存資源?”

在我過去為大型金融機構設計混合雲架構時,正是這種跨平台整合的挑戰讓許多專案陷入困境。技術團隊往往被迫在不同的孤立環境中運作,造成資源利用效率低下,同時也增加了營運複雜性。

Ferris進一步解釋,業界對於各技術應該如何相互配合存在不同觀點—有人認為OpenStack應該位於底層,有人認為它應該在中間層,還有人主張它應該在頂層。目前OpenStack Magnum正在開發,以便能夠佈建Kubernetes和Mesos等平台。

這種多元化的技術生態系統導致了不同的整合方式,讓客戶能夠根據自身需求選擇合適的元件,並可能形成一個大家都能認同的架構。我們真正需要的是容錯能力、自我修復、便捷的佈署、版本控制,以及輕鬆擴充套件的能力。容器應該能夠在雲端服務或自有硬體上執行,並根據需要自動擴充套件,不會出現故障,也不會驚動維運團隊。這正是人們所稱的「協調」。

自動化與協調的界定

IBM的Doug Davis對於自動化和協調的定義提供了有價值的見解:

“大體上,當我們談論自動化時,指的是編寫整合到平台(如Chef、Jenkins或Ansible)中的指令碼,這些指令碼實際驅動具體行為;而當我們談論協調時,指的是提供按特定順序執行操作的平台本身。這就是協調。而自動化本身只是在特定時間點執行指令碼的行為。”

在我參與設計的多個大規模容器專案中,這種區分非常重要。自動化專注於「如何」執行特定任務,而協調則關注「何時」和「何種順序」執行這些任務。理解這一區別對於建立有效的容器管理策略至關重要。

Cisco的創新架構師Ben Schumacher認同自動化與協調之間的內在關係:「我們很快就瞭解到,雖然工作者和使用者對這兩個標籤有不同的關聯,但它們本質上服務於相同的目的。」他的同事、雲端基礎設施服務(CIS)的首席技術長Ken Owens則提供了更詳細的觀點:

「當你轉向這個新的容器生態系統時,你會看到所有底層基礎設施都變成了基礎設施即程式碼(Infrastructure as Code)」,Owens表示。「容器生態系統、Mesos,以及Kubernetes的協調和排程功能,再加上Marathon,帶來了一個全新與有趣的層級。從Cisco的角度來看,我們不僅關注這一層面從雲原生開發的視角,還關注企業級的功能集,如品質、工作負載和叢集管理,以提供客戶所需的細粒度控制。我們如何透過更好的網路功能、服務發現和服務管理能力,以及更強的安全能力來增強這些功能?」

構建新架構與流程:協調的核心價值

協調在多方面幫助完成端對端的DevOps流程。對開發者而言,這始於他們筆電上的本地環境。但要使平台正常運作,就需要自動化整個基礎設施。

這不僅關乎持續整合和持續交付,還涉及容器操作,這與Mesosphere開發的資料中心作業系統(DCOS)概念相符。

Mesosphere的資料中心應用架構師和DevOps倡導者Michael Hausenblas解釋說,DCOS提供了一個作業系統,它抽象化整個機器叢集的資源,並使其像一個大型裝置一樣可供開發者使用。各種框架執行在DCOS之上。

“對於許多人來說,真正的關鍵是如何在Docker build、Docker run之後實作下一步。如何真正將容器投入生產並保持執行,同時完成這些應用程式操作任務?其中一部分自然是CI/CD流程。對我們來說,Mesos的獨特之處在於能夠執行各種不同的框架。”

在我主導的一個大型微服務轉型專案中,這一點尤為明顯。團隊最初僅關注容器化,但很快就發現沒有強大的協調層,無法實作真正的生產級佈署。容器協調不僅解決了佈署問題,還提供了自動擴充套件、負載平衡和自我修復等關鍵功能,這些都是生產環境不可或缺的。

例如,Jenkins可能負責CI/CD流程,同時與處理分析的Cassandra、Kafka和Spark一起執行,再加上提供網站服務的某個Web伺服器。所有這些不同的應用程式和框架可以在一個叢集中共同執行,覆寫整個生命週期。

Hausenblas表示,容器協調主要需要開發者開始建立新的專案、工具和解決方案。人們學習管理容器協調的方式,反過來也會改變他們對自動化環境的思考方式。

容器為構建這些新架構提供了現實可行的機制,但實施過程中需要新的工具和自我修復功能,以管理系統如何在分散式平台上運作。

「對我而言,協調平台是一個能夠協調多個其他系統工具、協調引擎的平台——在這一點上,我指的是特定的排程器,如ZooKeeper、Mesos和Marathon」,Owens說。「這些是你試圖協調的終點,再加上組態管理系統和自動化工具、工具系統或平台。所以這有點像協調器的協調器,或執行時和組態管理工具或工具集的協調器。」

工具需求的發掘

容器協調環境中仍然需要許多工具。例如,Yelp在使用容器時發現了由訊號問題引起的「殭屍程式」問題。為了消除這些訊號問題,Yelp開發了dumb-init,一個執行在Docker容器內的初始化系統。

對工具的明確需求來自於容器協調環境中採用DevOps實踐的假設。正如我們在自己的研究中所述,在考慮工具環境時,針對特定工作角色的需求至關重要。在我們對容器使用者的調查中,58%的受訪者表示,整合應用程式開發和IT維運的工具非常重要。

隨著容器協調的使用案例才剛出現,工具問題的定義將需要一些時間。由於平台的不成熟,許多工作者使用者現在才發現這些分散式平台高效運作需要哪些工具。

大規模容器協調的叢集管理仍然相對基礎。這種不成熟意味著諸如工作負載優先順序等問題尚未被完全定義。

Appcera的首席架構師Ken Robertson表示,叢集管理的定義需要政策來規定誰可以管理叢集,以及何時、何地和需要哪些機制。這些問題可以透過叢集管理工具來定義,但隨之而來的是佈署問題和技術堆積積疊不同方面之間的自動化通訊。

“這涉及大量自動化,不僅是管理個別區塊,還包括整個外觀。”

儘管努力轉向應用程式架構,但組成叢集的機器定義瞭如何管理資源設定。

「很多取決於什麼樣的機器組成了這個叢集環境」,Robertson說。「如果你在AWS、GCE或其他雲環境上執行,你有API來設定更多機器。在某些情況下,比如你設定了具有大量CPU和RAM的機器,但涉及硬體對映,你可能有一些一次只能被一個事物消耗的資源。」

這意味著使用者一次能執行的這類別工作負載數量是有限的。操作者需要了解該資源的限制,並在需要時能夠設定更多資源。但設定中涉及的資源並非無限的。

「如何啟用更多資源,以及在某些情況下,如何取得更多資源,特別是當可能需要幾週的準備時間來取得它們時?」Robertson提出了這個問題。

應對分散式系統的複雜性

分散式系統的複雜性正是問題所在。需要管理不同世代的硬體架構。在叢集管理中,也有對成本管理的興趣。客戶可能希望在服務價格下降時收到通知。

這些輸入會被匯入協調平台,以利用價格優勢。整合將透過第三方服務實作,消除對單一全能介面的需求。

CloudSoft的聯合創始人兼首席技術長Alex Heneveld表示,規模複雜性凸顯了對自主系統的需求。這是幾十年來一直夢想的概念,但隨著根據容器的工作負載,至少現在有了討論點,因為人們無法手動管理大規模架構並修復它們。這就需要自我修復環境,能夠將複雜任務分解為較小的任務,以及通常能夠完成所需工作的子系統。

在自主系統中,當出現問題時會發出感測器訊號。管理平台分析這些感測器訊號。執行器(也被描述為槓桿)存在以進行更改。正是這種感測器提供指標和執行器讓使用者控制事物的組合,構成了系統的封裝。

「系統可以由另一個本身具有感測器和執行器的系統管理」,Heneveld說。「在其中,它進行監控、分析、規劃和執行,以照顧其下的系統。但你可以將其視為組織結構圖或層次結構。我們比一些在這一領域非常嚴格的理論更為寬鬆,但理念是你可以透過組合更簡單的系統來構建非常複雜的系統。如果我們看微服務領域正在發生的事情,我們正在從更簡單的系統構建複雜系統。」

Apache Brooklyn是一個開放原始碼專案,其核心建立在自主系統原則上。它允許使用者解開複雜系統以檢視內部。使用者可以不斷解開系統以更深入地檢視,一直到底層管道(如需要)。

「如果我幸運的話,有人託管我的一些基礎設施,我就不需要看那麼遠」,Heneveld說。「例如,如果我有一個託管容器服務,我對其底層管道不感興趣。但我確實想知道每個容器都在做正確的事情。因此,我們從每個部分獲得的指標對於告知該模型、允許我們維護健康系統變得絕對必要。」

自動化與協調的實踐策略

在過去幾年實施容器協調解決方案的經驗中,我發現成功的策略通常包含以下幾個核心要素:

1. 分層的自動化架構

最有效的容器管理方案採用分層方法,其中:

  • 底層處理基礎設施資源的自動化設定(例如透過Terraform或CloudFormation)
  • 中間層提供容器協調和叢集管理(如Kubernetes或Mesos)
  • 上層處理應用層面的服務發現

橋接實境:容器的協調與程式化管理

在現代技術環境中,虛擬機器(VM)和容器技術共存的世界不是問題,而是充滿新興實踐、技術和解決方案的豐富空間。這種平衡正將開發團隊(Dev)和維運團隊(Ops)比以往往更緊密地結合在一起。隨著這個領域開始變化,對自動化環境中虛擬機器和容器角色的評估趨於成熟,但關於管理虛擬化環境的知識仍有很多需要學習的地方。對許多使用者和供應商來說,這仍是個新領域,存在許多未知因素,這更加強調管理和協調各種元件的需求。

從自動化和協調到排程、叢集管理、服務發現、安全性等,這一切都促使我們重新思考自動化和協調的方式。擁抱這種變化,並學習專注於發展最佳實踐,對整個容器生態系統來說是一個更大的旅程,這個旅程由開放原始碼軟體、連線性需求、充滿熱情的使用者社群以及供應商業模式中的經濟因素驅動。

容器使用的塑造:教育、開放原始碼與標準

IBM雲端開放技術CTO Christopher Ferris談論產品成功的關鍵在於如何圍繞其工具生成並維持開放原始碼生態系統,以及容器生態系統面臨的障礙,包括關於網路和儲存技術功能的反饋。

IBM雲端和開放原始碼標準部門的資深技術人員Doug Davis談論IBM在容器生命週期早期的角色,如何透過專案(如runC、開放容器倡議和雲原生計算基金會)改進核心技術,以及IBM如何幫助客戶評估協調工具。

容器協調的同行觀點調查

作者:LAWRENCE HECHT

在觀看了一年的會議演示之後,人們很容易被容器協調產品的宣傳所麻木。然而,在更廣泛的技術社群中,關於容器協調所涉及的功能仍然存在困惑。The New Stack進行了一項調查,針對容器管理技術的使用者,其中70%的受訪者正在使用容器。我們發現,對於管理和協調容器的含義確實存在不確定性。然而,也有一個正在形成的共識,即排程、叢集管理和服務發現對於在生產環境中使用容器是必要的。

超過40%使用或試用容器的受訪者表示,協調平台是其組織中管理容器的主要方式。然而,正在使用或計劃使用的實際產品受到受訪者容器採用階段的強烈影響。非生產環境使用容器的人更可能參照像Ansible和Chef這樣的設定管理工具作為協調方法。平台即服務(PaaS)解決方案、OpenShift和IaaS或App產品在評估容器的人的路線圖中被更頻繁地提及。

在使用者的計劃中,有各種各樣的公司和服務。目前尚不清楚哪些工具最終會勝出。目前,許多容器協調專用工具,如Kubernetes、Mesos和Docker Swarm,以及容器即服務(CaaS)產品,都確保在其捆綁產品中提供廣泛的開放原始碼工具。然而,供應商應該意識到,大多數使用者並不尋求解決所有需求的單一解決方案—只有29%表示容器協調工具能夠處理非容器化和傳統應用程式很重要。相反,他們最關心的是整合開發人員和IT維運的工具。

樣本與方法論

資料收集方式

調查於2016年2月21日至3月14日透過網路進行。與所有匿名網路調查一樣,結果可能受到自我選擇偏差的影響。所有回覆都經過手動審查,有幾個被丟棄。本章中的資料根據309位受訪者,其中75%完成了整個調查。

The New Stack的讀者被邀請參與調查。該研究也透過社交媒體宣傳。此外,我們收到了54份回覆是由於DevOps Weekly的宣傳,另外42份是由於Mesosphere行銷部門一位高管傳送的電子郵件。在相關時,分析會註明這可能如何影響發現。

研究參與者概況

61%的受訪者是終端使用者,其餘的是容器、PaaS、基礎設施即服務(IaaS)或軟體管理相關的供應商和服務提供商。

為了防止供應商為自己的產品和服務投票,關於正在使用或考慮的工具或產品的問題只向終端使用者提問。此外,這些問題只向164位至少在試用或評估容器的終端使用者提出。

與更廣泛的市場相比,調查更可能與早期採用者交談,59%表示他們在生產環境中使用容器,另外11%以更有限的方式使用容器,例如在開發生命週期的測試部分。令人有些驚訝的是,只有64%的供應商表示他們在生產環境中使用容器。

幾乎一半的終端使用者將自己描述為DevOps,經調查,這並不是因為來自DevOps Weekly訂閱者的回覆。雖然DevOps的增長是真實的,但該角色在本研究中很可能強烈代表,因為容器協調是一個需要應用程式開發和IT維運之間協調的領域。

定義容器協調功能

當我們開始撰寫本章時,對於容器協調的確切定義幾乎沒有共識。因此,我們決定詢問社群的意見,而不是嘗試建立市場的自上而下定義。

有共識認為排程、叢集管理和服務發現是核心功能。五分之四的人表示排程和叢集管理是容器協調相關產品或服務的預期功能。緊隨其後,76%將服務發現與容器協調聯絡起來。監控,特別是設定管理,是與容器協調最不相關的功能。自動擴充套件、負載平衡和網路都是在「其他」框中由多人提供的定義。

幾個變數影響了看法,工作角色對人們如何定義容器協調有顯著影響。特別是,自稱應用程式開發人員的人與排程的關聯度低得多(59%),與監控(64%)和設定管理(64%)的關聯度高得多。他們對監控和設定管理的參與較少可能是他們更頻繁參照這些功能的原因。除了工作角色外,我們還發現具有Mesosphere視角的人—那些因公司員工的促銷電子郵件而參與調查的人—更可能回答排程(93%)和監控(74%)。在這些以Mesosphere為中心的受訪者中,72%表示他們使用Apache Marathon進行排程。

定義容器即服務(CaaS)功能

就像之前的PaaS一樣,對於容器即服務(CaaS)的含義存在相當大的分歧。重要的是要注意,The New Stack詢問了一些但不是所有類別的CaaS功能。我們發現,容器協調是與CaaS最相關的功能,84%的受訪者將其與CaaS聯絡起來。

容器技術正在改變我們思考自動化和協調的方式,從排程到叢集管理再到服務發現,每個元件都扮演著關鍵角色。玄貓觀察到,隨著DevOps文化的深入發展,容器協調工具的選擇越來越依賴於組織的具體需求和成熟度,而非單一的萬能解決方案。成功的關鍵在於找到適合自身技術生態系統的工具組合,同時保持靈活性以適應這個快速發展的領域。

容器服務與協調工具:現代DevOps基礎架構的核心

容器技術已經從實驗性質轉變為企業IT架構的核心元件,隨之而來的是對容器管理與協調工具的需求激增。在這個快速發展的領域,玄貓觀察到各種概念定義仍處於形成階段,特別是「容器協調」和「容器即服務(CaaS)」這兩個關鍵術語。本文將探討產業對這些概念的認知,以及目前企業採用的主流容器管理方案。

容器即服務(CaaS)的功能期望

根據一項針對IT維運、應用開發和DevOps專業人員的調查,大多數受訪者對CaaS有相當廣泛的理解。從調查資料分析可以看出:

  • 容器協調功能被77-87%的受訪者視為CaaS的核心元件,這一點在DevOps和應用開發人員中尤為明顯
  • 佈署與持續交付/整合功能被視為CaaS的重要部分,約61-81%的受訪者持此觀點
  • 映像檔建立容器執行時期功能被包含在CaaS概念中的比例最低,但仍有超過半數的受訪者認為這些是CaaS的一部分

值得注意的是,職務角色對CaaS的理解有顯著影響。相較於DevOps人員,IT維運人員較少將映像檔倉函式庫egistry)視為CaaS的組成部分(61% vs 81%)。這可能是因為IT維運人員對容器技術的接觸較少,對容器生態系統的理解不夠全面。

廠商與終端使用者的認知差異

研究顯示,容器生態系統相關廠商的員工對「容器協調」和「CaaS」的定義比一般使用者更為嚴謹:

  • 廠商較少將叢集管理(Cluster Management)等同於容器協調,兩者差異高達32%
  • 廠商也較少認為映像檔倉函式庫署功能和雲端協調是CaaS的組成部分

這種差異可能源於兩個因素:一是廠商員工因為長期參與產業活動,對這些概念有更精確的理解;二是較狹窄的定義可能更符合他們自家產品的行銷策略。無論如何,這種認知差異都表明,在容器技術的主流化過程中,產業仍需要進一步明確相關概念的定義。

容器管理與協調的主流方法

當被問及主要使用哪種方式管理或協調容器時,調查結果顯示:

  • 45%的受訪者使用專門的協調平台如Kubernetes、Docker Swarm或Mesos
  • 16%的受訪者使用Shell指令碼或客製化工具整合多種工具
  • 13%使用**平台即服務(PaaS)**如OpenShift、Deis
  • 12%使用**容器即服務(CaaS)**如AWS ECS、IBM Bluemix等
  • 7%使用設定管理工具如Chef、Ansible、Puppet

這些資料顯示,專門設計的協調平台明顯領先其他方案,成為容器管理的首選。不過,容器採用的階段也會影響管理方式的選擇:

  • 評估階段的企業更傾向於使用PaaS解決方案
  • 生產環境中的使用者則更可能採用CaaS方案
  • 設定管理工具和Shell指令碼的使用率隨著容器進入生產環境而下降

職務角色對容器管理方式的影響

不同職務對容器管理方式的偏好也存在顯著差異:

  • IT維運人員較少使用協調平台(20%,相較於開發人員的47%)
  • IT維運人員更偏好使用設定管理工具(35%,相較於開發人員的13%)
  • 應用開發人員更傾向於使用Shell指令碼(27%,相較於維運人員的10%)

這種分歧反映了不同角色的工作習慣和技能背景。開發人員更習慣編碼解決問題,而維運人員則傾向於使用他們熟悉的設定管理工具。

主流容器協調工具分析

調查還詢問了受訪者計劃在未來一年內使用的三大產品或服務:

  • Kubernetes以39%的支援率領先,成為最受歡迎的容器協調平台
  • Apache Mesos/Mesosphere DCOS約有33%的受訪者計劃使用
  • Amazon ECS獲得25%的支援
  • Docker Swarm有23%的受訪者計劃採用

不過,這些資料需要謹慎解讀。例如,Kubernetes不是可購買的產品,而是開放原始碼平台;而Amazon ECS和Mesosphere DCOS可以同時與其他工具配合使用。此外,Docker的協調解決方案不僅限於Swarm,還包括Docker Datacenter和Docker Cloud(前身為Tutum)。

容器管理的演進趨勢

從調查資料可以觀察到幾個明顯的趨勢:

  1. 專用協調平台的崛起:隨著容器佈署規模擴大,專門設計的協調平台逐漸成為主流選擇,這反映了企業對穩定、可擴充套件容器管理解決方案的需求。

  2. 從手動到自動化的轉變:隨著容器從開發環境進入生產環境,企業逐漸從Shell指令碼和設定管理工具轉向更自動化的解決方案。

  3. 職能融合的影響:DevOps文化的普及促使容器管理工具需要同時滿足開發和維運的需求,這也解釋了為何協調平台在DevOps角色中更受歡迎。

  4. 市場定義尚未統一:無論是「容器協調」還是「CaaS」,產業內部對這些概念的理解仍存在差異,這表明容器生態系統仍在快速演進中。

在玄貓多年參與容器化專案的經驗中,我觀察到企業往往從簡單的Docker管理開始,隨著佈署規模擴大,逐漸引入Kubernetes等更完善的協調平台。這種演進路徑與調查結果高度吻合。無論選擇哪種容器管理方案,關鍵是要評估它是否能滿足企業特定的擴充套件需求、自動化要求和開發維運流程整合。

容器技術作為現代雲原生架構的基礎,其管理工具的選擇將直接影響企業的技術敏捷性和營運效率。隨著容器採用率的持續提升,我們可以預期容器協調和管理工具將進一步整合,為企業提供更全面、更簡化的容器生命週期管理解決方案。