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 流程

  1. 当运维人员要进行 MCP 部署或者变更时,他首先在 Gerrit 中提交 SaltStack 程序 或者 Reclass 模型的代码检视申请。
  2. 代码检视结束后,根据配置的不同(有没有staging环境),触发Jenkins 相应的变更 job。
  3. Jenkins job 从 Jenkins 中获取SaltStack 程序 或者 Reclass 模型的代码,以及从  MCP 库中获取二进制文件。
  4. 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 已经有了很多的尝试,相信将来会进一步利用起来。

(2)进一步拓宽云产品栈,OpenStack 的分量会进一步下降,也许会到 30% 左右。

通过 DriveTrain 和 StackLight 支持更多的云产品,比如大数据、AI 等云技术栈。相信 Mirantis 也不会限于 OpenStack 和  K8S,而是会选择更多的开源云产品。我们也许会看到 Mirantis 参与到更多的开源云项目中。

(3)用户体验(UI)的进一步优化,包括 DriveTrain UI, StackLight UI,DevOps 界面等的增强,以及多个界面之间的整合。

(4)DriveTrain 功能的进一步丰富。当前它更多的只能支持 Day 1 部署,将来会在 Day 2 部署后变更方面做增强,使它真正成为 DevOps 样式的完整的系统。

参考链接

Mirantis MCP 1.0:OpenStack 和 Kubernetes 整合的第一步的更多相关文章

  1. SSM框架整合系列——第一步

    环境: JDK8 idea2018.2 maven3.5 spring和springMVC是天然集成,所以只需要解决mybatis和spring的整合问题,重点整合mybatis和spring的两个东 ...

  2. VSTS跟Kubernetes整合进行CI/CD

    利用VSTS跟Kubernetes整合进行CI/CD   为什么VSTS要搭配Kubernetes? 通常我们在开发管理软件项目的时候都会碰到一个很头痛的问题,就是开发.测试.生产环境不一致,导致开发 ...

  3. Spring3.0 与 MyBatis框架 整合小实例

    本文将在Eclipse开发环境下,采用Spring MVC + Spring + MyBatis + Maven + Log4J 框架搭建一个Java web 项目. 1. 环境准备: 1.1 创建数 ...

  4. 《4》CentOS7.0+OpenStack+kvm云平台部署—配置Nova

    感谢朋友支持本博客,欢迎共同探讨交流,因为能力和时间有限,错误之处在所难免,欢迎指正! 假设转载.请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...

  5. OpenStack VS Kubernetes,谁是你心中的王者?

      当下云计算的领域里热度最高的两个项目,无疑是OpenStack和Kubernetes.如果云计算是一个风起云涌的江湖,毫不夸张的说OpenStack和Kubernetes就是江湖里的泰山北斗.Op ...

  6. springboot升级2.0 fastjson报错? 2.0以上应该怎么整合fastjson?

    SpringBoot2.0如何集成fastjson?在网上查了一堆资料,但是各文章的说法不一,有些还是错的,可能只是简单测试一下就认为ok了,最后有没生效都不知道.恰逢公司项目需要将JackSon换成 ...

  7. SpringBoot第十一集:整合Swagger3.0与RESTful接口整合返回值(2020最新最易懂)

    SpringBoot第十一集:整合Swagger3.0与RESTful接口整合返回值(2020最新最易懂) 一,整合Swagger3.0 随着Spring Boot.Spring Cloud等微服务的 ...

  8. [EntLib]微软企业库5.0 学习之路——第一步、基本入门

    话说在大学的时候帮老师做项目的时候就已经接触过企业库了但是当初一直没明白为什么要用这个,只觉得好麻烦啊,竟然有那么多的乱七八糟的配置(原来我不知道有配置工具可以进行配置,请原谅我的小白). 直到去年在 ...

  9. Openstack(企业私有云)万里长征第一步——安装

    一.前言 单位新进了十几台服务器,建了一个高标准的一体化机房,状似刘姥姥进大观园的我,从机房规划到企业私有云搭建一一重头学来,除了机房泥墙其他基本都涉猎到了. 从企业私有云这个名字就能看出这是多么复杂 ...

随机推荐

  1. 基于EM的多直线拟合

    作者:桂. 时间:2017-03-22  06:13:50 链接:http://www.cnblogs.com/xingshansi/p/6597796.html 声明:欢迎被转载,不过记得注明出处哦 ...

  2. Kruskal算法的实现

    #include "stdio.h" #include "stdlib.h" struct edge { int m; int n; int d; }a[]; ...

  3. MVC学习笔记1-MVC家族间的区别

    ASP.NET下的MVC从原始的1.0走到2.0,再到3.0,现在走到4.0,也许明年5.0就问世了,先不管那些,那说说这些MVC在ASP.NET是如何变化发展的.对于.net编程人员来说可能会很熟悉 ...

  4. java中的i++和++i区别

    public class Main { public static void main(String[] args) { int i = 0; i = i++; System.out.println( ...

  5. 请不要把‘通知的观察者注册’放在-viewWillAppear:中

    接手项目二次开发的吐槽: 接手别人的代码的悲哀之一就是,我反复的把流程走了一遍又一遍,却始终无法发现原来是这个问题. 之前这个人把通知的观察者注册放在了-viewWillAppear:中,导致,我发送 ...

  6. oracle的insert的时候&符号如何插入(转义)

    chr(38)替换& insert   into   table   values( 'http://localhost:8080/index.action?username=138& ...

  7. 1.自定义控制器切换<一>

    一.自定义控制器切换:在同一个控制器上,展示不同的控制器,类似于tabbar一样 二.怎么做?(问题解决步骤) 1.创建若干控制器:OneViewController TwoViewControlle ...

  8. MAT(Memory Analyzer Tool)使用心得

    起因:最近在跟踪产品的性能问题,期间主要问题体现在JVM的内存回收问题,使用MAT工具进行JVM内存分析(也可对android 的应用内存分析) 问题描述: 1.部分后端服务在运行一段时间后会突然年老 ...

  9. Java中log4j的使用

    前言 距离上一篇文章又过去好长时间了,这段时间一直忙于工作,已经从net彻底转向Java了.工作也慢慢的步入正轨了,自己独自完成了一个小项目,不过工作中遇到了一些问题,还是得到了同学和同事的帮助.本来 ...

  10. Python学习_argsparse

    # -*- coding: utf-8 -*- import argparse args = "-f hello.txt -n 1 2 3 -x 100 -y b -z a -q hello ...