亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

容器編排工具與 Kuberneters

1. 什么是容器編排

試想這樣的場景:

我們使用 Docker 運行一個服務應用,當負載增加,單一實例無法滿足需要時,我們就得增加這個實例部署的數量,并配置容器間負載均衡,而所有這些操作都需要我們手動處理,并且這些操作也僅僅被限制在這一臺 Docker 宿主機中,如果宿主機故障,那么整套應用就會崩潰。

為了避免這種情況發生,我們需要耗費大量的精力去依次配置這些容器和主機的監控系統,以便實時掌握宿主機的運行狀況,及時處理出現故障的容器。當運行的容器隨著業務量逐步增加,生產環境中可能會有成千上萬個容器需要被監控和管理,這時就需要容器編排工具出馬了。

使用容器編排工具可以自動化和管理任務,例如:

  • 置備和部署容器;
  • 配置和調度容器;
  • 資源分配;
  • 容器可用性;
  • 根據平衡基礎架構中的工作負載而擴展或刪除容器;
  • 負載平衡和流量路由;
  • 監控容器的健康狀況;
  • 根據運行應用的容器來配置應用;
  • 保持容器間交互的安全。

Tips
編排這一術語來源于音樂領域,根據作曲家的作品,編曲決定音樂作品的某一部分由某種樂器以某種方式在某個時機來演奏,這一過程稱為編排。編排這一術語被借用到了IT領域。容器編排負責容器的啟停調度,同時通過管理容器集群來提升容器使用率。

2. 容器編排工具概覽

目前,主流的容器編排工具有:

  • Docker Compose:單一主機上部署多個容器;
  • Docker Swarm:多臺機器上部署容器。開箱即用,快速部署容器;
  • Mesos:大數據組件部署。雙層調度,任務調度需自己實現;
  • Kubernetes(k8s):社區活躍度高,微服務化,組件豐富。

Docker Compose 已經是老朋友了,它不太適用與多宿主機場景, 下面我們介紹后三個用于集群部署的容器編排工具。

2.1 Docker Swarm

Docker Swarm 是一個由 Docker 開發的調度框架。它的使用方式接近 Docker 本身,加之 Docker Machine 可以快速創建部署 Docker 宿主機,使得 Swarm 整體部署和使用非常簡單,易于上手。

2.1.1 功能特性

  • 集群管理集成進 Docker Engine;

  • 去中心化設計;

  • 聲明式服務模型;

  • 服務擴容縮容;

  • 協調預期狀態與實際狀態的一致性;

  • 多主機網絡;

  • 服務發現;

  • 負載均衡;

  • 安全策略;

  • 滾動更新。

2.2 Mesos

Mesos 是一個開源的集群管理框架,它可以將數據中心放在一臺電腦里運行,從數據中心、操作系統的角度提供資源視圖。對外提供簡單的 API,同時隱藏內部的很多復雜架構。它由 UC Berkeley 的Benjemin Hinderman,Andy Konwinski 和 Matei Zaharia 開發,早于 Docker 產生,Mesos 作為資源管理器,后來在 Twitter 里發展成熟,并很快成為 Apache 基金會的頂級項目。

2.2.1 功能特性

  • 可擴展到 10000 個節點;
  • 使用 ZooKeeper 實現 Master 和 Slave 的容錯;
  • 使用 Linux 容器實現本地任務隔離;
  • 基于多資源(內存,CPU、磁盤、端口)調度;
  • 提供 Java,Python,C++ 等多種語言 API。

2.3 Kubernetes

Kubernetes 是一個最初由 Google 工程師開發和設計的開源容器編排工具。2015 年,Google 將 Kubernetes 項目捐贈給新成立的云原生計算基金會。Kubernetes是目前最流行的開源容器編排解決方案框架,基于 Google 龐大的生態圈及 RedHat(OpenShift)的企業支持。 如果加上 OpenShift(可以看作基于Kubernetes構建的發行版產品),Kubernetes 占有容器調度編排市場的份額高達 9 成,因而Kubernetes 社區也成為了容器編排工具中最大的社區。

2.3.1 功能特性

  • 跨多臺主機進行容器編排;
  • 更加充分地利用硬件,最大程度獲取運行企業應用所需的資源;
  • 有效管控應用部署和更新,并實現自動化操作;
  • 掛載和增加存儲,用于運行有狀態的應用;
  • 快速、按需擴展容器化應用及其資源;
  • 對服務進行聲明式管理,保證所部署的應用始終按照部署的方式運行;
  • 利用自動布局、自動重啟、自動復制以及自動擴展功能,對應用實施狀況檢查和自我修復;
  • 支持集群聯邦功能,用于控制大量節點。

2.3.2 Kubernetes 組件

Kubernetes官網展示了它的基本結構示意圖,如下所示:

Components of Kubernetes

其中:

  • Master 負責管理整個集群。 Master 協調集群中的所有活動,例如調度應用、維護應用的所需狀態、應用擴容以及推出新的更新;
  • Node 是一個虛擬機或者物理機,上面具有用于處理容器操作的容器引擎。它在 Kubernetes 集群中充當工作機器的角色 每個Node都有 Kubelet , 它管理 Node 同時也充當 Node 與 Master 通信的代理;

在 Kubernetes 上部署應用時,Master 啟動應用容器。 Master 就編排容器在群集的 Node 上運行。 Node 使用 Master 暴露的 Kubernetes API 與 Master 通信。終端用戶也可以使用 Kubernetes API 與集群交互。

Tips
Kubernetes 最初只支持 docker 作為運行時,為了能夠讓 Kubernetes 變得更具有可擴展性,在 1.5 版本增加了 容器運行時接口 CRI(the Container Runtime Interface),在隨后的演進中,CRI 被抽出來做成了獨立的項目。Kubelet 作為 CRI 的客戶端,而容器運行時則需要實現 CRI 的服務端。只要某個容器引擎實現了 CRI 約定的接口,就能接入 k8s 作為 Container Runtime。

3. 小結

本節中我們了解了容器編排的概念和工具。
Docker Swarm 的用戶大體局限在個人或小型開發團隊,看重的是部署和使用方便,使用的都是比較基礎的功能;Mesos 得益于它的出身,大數據領域的生態相對健全。

對于通用領域的容器編排項目,Kubernetes 是一個可靠的選擇。得益于龐大的社區支持,插件和文檔 也非常豐富。但對于初學者來說,復雜的配置和部署仍舊是一道難關,后面的章節中,我們來講解如何從 0 搭建一套多節點的 Kubernetes 集群。