1.前言
Mirantis 公司在2014年9月14日宣布收購 TCPCloud,然后宣布在2017年第一季度會推出全新的私有雲產品。從那時候開始,我就一直滿懷期待。終於,今年4月19日,Mirantis 宣布推出全新的 MCP 1.0。本文根據公開的文檔,試着對該產品做些分析和總結,並且展望一下其未來。因為只是看文檔和視頻,並沒有進行實際部署和操作,因此,可能有一些錯誤。本文會持續進行更新。
2. MCP 1.0 概況
2.1 MCP 1.0 的組成

MCP 1.0 主要包括三大部分:
- DriveTrain:即部署和變更系統,用於整個平台的部署(Day 1)和部署后的變更(Day 2)。
- 雲系統:包括支持物理機和虛機的 OpenStack,支持容器的 Kubernetes,分布式塊和對象存儲 Ceph,面向 OpenStack 集群的SDN OpenContrail,面向 Kubernetes 的 SDN Calico。
- StackLight:即日志、監控和告警系統,為雲平台提供運維支持。
2.2 設計出發點
Mirantis 設計 MCP 1.0 的出發點包括但不限於:
- 基礎架構的消費模式是由公有雲定義的,它的主要特征包括 API 驅動(API driven)、持續交付(continuously delivered)和托管模式(managed)。因此,MCP 1.0 就由之前的以安裝為中心的架構(installer-centric architecture)變為以運維為中心的架構(operations-centric architecture)。
- 面向各種工作負載的統一雲平台,包括為遷移到雲上的傳統應用(cloud hosted)提供虛機和裸機;為已經為雲做過優化的應用(cloud optimized)提供虛機;為雲原生應用(cloud native)提供虛機和容器。

- 變更不再以6到12個月為周期,而是以周為周期進行小迭代(minor increments)而持續發生。
3. MCP 1.0 具體
下面具體分析 MCP 1.0 中的具體組件。
3.1 DriveTrain
3.1.1 概況
(1)理念:Infrasture-as-code 基礎架構即代碼,將基礎架構代碼化。
(2)目標:支持 Day 1 定制化安裝和 Day 2 部署后配置,包括功能和架構變更。
(3)方法:采用 CI/CD 工具和流程,實現 DevOps 模式。
(4)支持:當前支持 OpenStack 集群和 Kubernets 集群,將來會增加更多集群支持。
(5)界面:DriveTrain 的界面集成在 DevOps 界面中。
3.1.2 組件
DriveTrain 是 DevOps 形式的雲平台部署和配置系統。它主要包括以下生命周期管理工具:
- SaltStack + Reclass:SlatStack 類似Puppet 和 Chef,提供配置管理和 MCP 集群的部署和變更;Reclass 結合 SaltStack 使用。
- Gerrit:提供 Git 庫和代碼檢視管理系統,保存源代碼、SaltStack 程序(formulas)、Reclass 模型(models)。
- Jenkins:job 自動化工具。它檢測提交到 Gerrit 的針對 MCP 集群配置的變化,然后通過執行一系列 jobs,將相應的 SaltStack 程序和Reclass 模型應用到 MCP 集群。
- MCP Registry:保存 MCP 集群所需的軟件庫,比如 Docker 鏡像、Debian 包等。
3.1.3 部署
要部署DriveTrain,至少需要3個虛機。它的組件運行在由 Docker Swarm 管理的容器之中。

- 使用三節點 Docker Swarm 部署模式,每個 DriveTrain 組件運行在 Docker Swarm 容器中,確保提供高可用的服務。(mysql 如何運行在容器中,沒有具體說明)
- 使用 GlusterFS 共享文件系統作為共享存儲
- 使用 Keepalived 對各個 service 提供 HA VIP
- 使用 nginx 提供公網訪問能力
3.1.4 CI/CD 流程

- 當運維人員要進行 MCP 部署或者變更時,他首先在 Gerrit 中提交 SaltStack 程序 或者 Reclass 模型的代碼檢視申請。
- 代碼檢視結束后,根據配置的不同(有沒有staging環境),觸發Jenkins 相應的變更 job。
- Jenkins job 從 Jenkins 中獲取SaltStack 程序 或者 Reclass 模型的代碼,以及從 MCP 庫中獲取二進制文件。
- SaltStack 將更改應用到 MCP 集群
3.1.5 簡單分析
與Mirantis之前的 Fuel 做比較,
- Fuel 使用 Puppet 來做配置管理,現在改為使用 SlatStack,應該是吸收了 TCPCloud 的成果。在 Github 上有看到有大量的 TCPCloud 寫的 Slat 程序,比如 https://github.com/tcpcloud。
- Fuel 主要是在 Day 1 部署,而 DriveTrain 則 Day 1 部署和 Day 2 變更並重。當然,現在的 Day 2 變更主要還只是做一些小的變更,比如安全補丁之類的。但是,長期看,兩者都是必須的。
- 客戶有了 DriveTrain 並接受了培訓之后,就可以自動地進行變更了,這為 Mirantis 推行新的 build-operate-transfer 交付模式提供了產品基礎。
3.2 MCP 集群
MCP 1.0 支持 OpenStack 集群和 Kubernetes 集群。
3.2.1 OpenStack 集群
一個部署實例:

MCP OpenStack 集群的特點:
- 采用 DriveTrain 進行部署和變更
- 使用 StackLight 作為 LMA(Logging, Metering, Alerting) 系統
- 每個組件使用多個分布在不同物理服務器上的虛機來實現高可用
- SDN 支持 OpenContrail 或者 Neutron OVS,前者是推薦配置
- 推薦采用 Ceph 做塊和對象存儲。
- 支持多種 OpenStack 服務,支持物理機和虛機:
3.2.2 Kubernetes 集群
MCP 1.0 支持單獨部署一個 K8S 集群,也支持在 OpenStack 集群旁邊部署一個 K8S 集群。一個部署示例如下:

特點:
- K8S 集群和 OpenStack 集群目前沒有關聯。
- 采用 Calico 作為SDN。使用 OpenContrail 處於 technical preview 狀態,也就是測試可用,但生產別用。
- 采用 Ceph 提供卷。
- 采用 DriveTrain 進行集群部署和變更。
- 典型地,K8S 集群會部署在裸金屬服務器上。MCP 采用基於 Ironic 的 MaaS 組件來准備物理環境。
3.2.3 簡單分析
- MCP 中的 OpenStack 和 K8S 集群目前是獨立的,兩者之間沒有關聯
- OpenStack 和 K8S 集群使用同一的部署和配置工具 DriveTrain,以及 LMA 工具 StackLight。
- Mirantis 強調 100% 開源。
3.3 StackLight
MCP StackLight 是 Mirantis 的日志(收集、分析、可視化)、監控(包括設備,服務,和租戶資源等)和告警系統。

3.3.1 功能匯總

3.3.2 總體架構

3.3.2 日志(logging)
(1)日志收集目標包括:

(2)特點
- 采用 Heka 作為日志收集器。它被安裝在MCP集群的每個節點上,負責收集這些節點上的日志。
- 采用 ElasticSearch 作為日志存儲
- 使用 Kabana 作可視化

3.3.3 監控 (Metering)
特點:
- 包括雲物理環境監控和租戶環境監控。
- 租戶資源監控基於 Ceilometer。它將監控指標數據保存在 InfluxDB 中,將資源數據保存在 Elasticsearch 中。
- 采用 InfluxDB 時間序列數據庫保存監控數據
- 采用 Grafana 作為可視化

3.3.4 告警(Altering)
特點:
- 采用 Sensu 和 Uchiwa,支持集群
- 支持通過標准協議將告警導向第三方系統

3.4 DevOps Portal
MCP 1.0 還提供了處於技術預覽狀態的 DevOps 界面。它是 MCP 管理員的主要入口。它的主要內容有:
- 通過各種圖標和狀態等展示雲環境的各種信息
- 提供鏈接到其它工具的鏈接,包括 Grafana,Kibana 和 Rundeck等。
3.4.1 架構

3.4.2 Cloud Intelligence Service (CIS,雲智能服務)
CIS 包括一系列用於收集系統信息的收集器(collectors),包括 OpenStack 集群和MaaS 等等。CIS 保存這些信息,跟蹤它們的變化,並進行分類。CIS 會查詢各種服務的API,並且連接到特定的數據庫去加速數據收集。盡管 CIS 的搜索功能很強大,但是它不能修改任何資源。
Runbooks 每隔5分鍾會運行這些收集器去收集各種信息,並保存到 ElasticSearch 中。
3.4.3 Cloud Health Service 服務(CHS,雲狀態服務)
CHS 也包括一組收集器,它們通過各種資源的通知來提供雲的狀態概要,包括網絡、存儲、計算節點等。這些結果會被展示在 DevOps 界面中。
Runbook 會執行 FCI,API 測試,並將數據保存在 LMA 中。DevOps 界面查詢 LMA,創建雲狀態的各種圖表。雲管理員監控這些圖表。
3.4.4 Runbook 后端和UI
Runbooks Auotmation 是一個自動化服務。用戶可以在其UI中創建工作流任務,這些任務會被定時或者周期性執行。其它 OSS 組件會使用 Runbooks 服務來自動化執行這些任務,比如創建備份、監控數據查詢、生成報表、雲維護等等。Runbooks 是有 Rundeck 工具提供的,它使得用戶可以方便地添加 Rundeck 任務,並將它們嵌入工作流。 Jenkins 和 SaltStack 主要用於部署和生命周期管理,Rundeck 則會幫助用戶執行每天的運維和維護任務。
3.4.5 Capacity Management Serice (CMS, 容量管理服務)
CMS 服務利用LMA 和 CIS 產生的數據,提供多個界面來顯示雲中的資源使用情況。它的內容包括:
- 按照可用區(AZ)分組的計算節點的 CPU 和內存利用率
- 在用內存容量
- 在用存儲容量
- 計算節點總數
它的部分界面會集成到Horizon 中:

3.5 多集群支持
3.5.1 DriveTrain 能支持多集群
一套包含 SlatStack 和 Reclass 的 DriveTrain 環境能支持多集群的配置:

- 一個 Service class 定義MCP 集群中的一個組件(component),比如 RabbitMQ,MySql 等。Service class 定義為 SlatStack 程序。
- 一個 System class 定義 MCP 集群中的一個節點(node),比如控制節點和計算節點,以及部署在節點上的 service。
- 一個 Cluster class 定義一個 MCP 集群,比如一個 demo OpenStack 集群,一個生產 K8S 集群等。一個 cluster class 組合多個 system classes。
通過 DriveTrain 的 CI/CD 流程,管理員就可以定義、部署、維護多個 MCP 雲環境。
3.5.2 StackLight 能支持多集群

4. 總結和展望
4.1 總結
根據上面的信息,對 Mirantis MCP 1.0 做個簡單的總結:
- 產品化思路非常直接:將合適用戶工作負載的雲環境(當前是OpenStack環境和K8S環境)通過好用的部署和變更工具(DriveTrain)和 LMA 系統(StackLight)提供給用戶,使得這個產品既能解決業務需要,又好用。
- OpenStack 地位確定:由神化(無所不能)回到人間(支持物理機和虛機),在整個 Mirantis 私有雲產品中的分量由之前的 100% 下降到當前的 60%,將來應該會進一步下降。
- OpenStack 功能得到聚焦:MCP 1.0 使用 Salt 而不是 OpenStack 自帶的 Magnum 項目來編排 K8S 集群,顯示出 Mirantis 有將 OpenStack 功能收縮到核心組件的趨勢,這應該和 Mirantis 減少 OpenStack 研發人員同時TCPCloud 團隊有非常強大的 SaltStack 能力有一定關系。
- K8S 地位清晰:即定位在 CAAS 平台。它既不能取代OpenStack,也不是 PAAS,而是在其該在的 CAAS 位置。
- 強調 Day 2 (部署后運維),推行 CI/CD 模式的自動化運維平台。
- 強調 LMA (日志-監控-告警),並強調事前分析告警。
4.2 展望
如本文標題,MCP 1.0 只是 Mirantis 新私有雲產品的第一個版本,還處於 OpenStack 和 K8S 整合的第一步。不負責任地預測,將來 MCP 會:
(1)通過 OpenContrail 將 K8S 和 OpenStack 做進一步的整合,打通 物理機-虛機-容器 的網絡。這方面之前 TCPCloud 已經有了很多的嘗試,相信將來會進一步利用起來。
這是 TCPCloud 之前放的一篇文章:

這是 Mirantis 在今年波士頓OpenStack 峰會上的展示,它將大數據不同的組件作為不同的工作負載運行在不同的環境中,在使用 OpenContrail 作為統一的 SDN:

(2)進一步拓寬雲產品棧,OpenStack 的分量會進一步下降,也許會到 30% 左右。
通過 DriveTrain 和 StackLight 支持更多的雲產品,比如大數據、AI 等雲技術棧。相信 Mirantis 也不會限於 OpenStack 和 K8S,而是會選擇更多的開源雲產品。我們也許會看到 Mirantis 參與到更多的開源雲項目中。

(3)用戶體驗(UI)的進一步優化,包括 DriveTrain UI, StackLight UI,DevOps 界面等的增強,以及多個界面之間的整合。
(4)DriveTrain 功能的進一步豐富。當前它更多的只能支持 Day 1 部署,將來會在 Day 2 部署后變更方面做增強,使它真正成為 DevOps 樣式的完整的系統。
參考鏈接
