平台架构

介绍 Cloudpods 平台的软件架构设计

应用架构

下图显示Cloudpods的应用架构,Cloudpods统一管理多云基础设施。

向下:主要实现多云环境下计算、网络、存储等IaaS资源的统一管理。对于本地IDC的未云化资源,主要是裸机,KVM虚拟机(Libvirt),VMware ESXi虚拟机(vSphere),通过内置的私有云方案实现云化管理。对于私有云和公有云资源,则通过API实现统一管理。

向上:多云管理平台一方面通过虚拟机、裸机等形式为传统应用提供完整操作系统运行时环境,另一方面则给Kubernetes提供多云运行环境,统一管理多云Kubernetes。在Kubernetes之上则提供云原生应用的容器运行时环境。同时,基于Kubernetes和开源组件提供PaaS中间件服务。

系统架构

下图显示Cloudpods的系统架构,分为接入层,控制层和资源层三个主要部分。

接入层

接入层实现Cloudpods平台的访问功能,允许用户通过如下3种方式访问云管平台的功能:

API访问:通过REST API访问云管平台功能,用户可以直接通过http接口访问云管平台的REST API,也可以使用云管平台提供的SDK。目前SDK支持Java,Python和Golang等三种语言。

命令行访问:通过云管平台提供的climc命令行工具访问云管平台功能,允许用户通过脚本调用climc,实现一些自动化运维功能。Climc使用Golang语言,基于云管平台的Golang SDK开发。

Web控制台访问:通过Web UI访问云管平台的功能。允许用户通过主流web浏览器访问云管平台。Web控制台提供管理员使用的管理后台以及普通用户使用的普通功能页面,能够提供大部分的管理和使用功能。Web控制台基于Vue 2.0 JavaScript SPA框架实现。其中,API网关提供Web控制台对各个服务的统一REST API访问接口。实现Web控制台的登录验证,session 控制,以及对后端各个服务的API调用。API网关由Golang完全自主开发,完全无状态架构,具备水平扩展能力。

控制层

控制层实现Cloudpods的管理和控制功能。主要由Region控制器, 认证服务,镜像服务,计费计量,以及H5控制台等服务组件构成。

Region控制器是整个Cloudpods的控制中枢,负责机房网络,宿主机,网络,存储,虚拟机等各类资源的元数据信息管理,以及对虚拟机,裸机等的自动化管理操作认证的调度,协调管理。云控制器内置基于REST API接口的分布式异步任务管理框架,实现对在计算节点进行的开关机,创建删除等耗时操作任务的管理协调工作。云控制器完全自主开发,1.x版本基于Python Tornado框架开发,2.x版本开始基于Golang语言开发。云控制器采用无状态架构,可以水平扩展,通过水平拆分实现高可用。另外,Region控制器还附带了调度器组件。 调度器负责资源调度功能,是平台中资源获取决策的唯一执行者,根据用户对资源的要求,给出资源的最优提供者。调度器支持批量调度,调度性能优异,可扩展性好。调度器完全自主开发,基于Golang语言开发。

认证服务提供Cloudpods的账户管理和认证体系,并提供基于项目的多租户支持,同时提供服务目录功能。认证服务支持多种认证源,允许和企业的LDAP/AD对接,允许用户以企业统一的账户体系登入系统。认证服务2.10之前版本基于OpenStack Keystone Pika版本,开发语言为Python。在开源版本基础上,我们修正了BUG,并做了若干改进。2.10之后版本采用golang语言开发。Keystone采用无状态架构,支持水平扩展,可以水平拆分实现服务高可用。

镜像服务提供Cloudpods各种主机资源的操作系统镜像的管理功能。提供镜像存储,元数据管理等功能。镜像服务1.x版本基于OpenStack Glance Folsom版本改进而来,开发语言为Python。在开源版本基础上,我们修正了BUG,并做了若干改进。2.x版本采用golang语言开发。Glance采用无状态架构,支持水平扩展,可以水平拆分实现服务高可用。

资源层

资源层实现对KVM虚拟机,裸机,VMWare虚拟机等计算资源的管理和控制功能,以及对阿里云,Azure,腾讯云,AWS等公有云资源的管理。

组件概览

Cloudpods目前支持在 CentOS 7 (x86_64 或 arm64) 和 Debian 10 (x86_64 或 arm64) 上运行,待部署组件/服务如下:

服务组件用途安装方式运行方式
mariadb关系型数据库rpmsystemd
docker容器运行时rpmsystemd
kubelet管理 kubernetes podrpmsystemd
ansibleserveransible脚本管理和执行服务k8s deploymentcontainer
apigatewayweb前端的API网关k8s deploymentcontainer
baremetal-agent管理物理机k8s deploymentcontainer
cloudevent云上日志和裸金属日志收集服务k8s deploymentcontainer
cloudid公有云SAML SSO服务k8s deploymentcontainer
cloudmon公有云监控指标采集服务k8s deploymentcontainer
devtool运维工具服务k8s deploymentcontainer
esxi-agentVMware ESXi管理服务代理k8s deploymentcontainer
etcd基础服务,存储服务间推送消息,分布式锁等等信息k8s deploymentcontainer
glance镜像存储k8s deploymentcontainer
host管理虚拟机k8s daemonsetcontainer
sdnagent管理虚拟机流表规则,实现网络安全组和限速等功能k8s daemonsetcontainer
ovn-controller实现ovn数据库到每台宿主机OVS的流表同步k8s daemonsetcontainer
host-deployer虚拟机部署服务,负责挂载虚拟机镜像,进行识别和修改k8s daemonsetcontainer
host-image虚拟机本地磁盘数据传输服务k8s daemonsetcontainer
influxdb监控数据库k8s deploymentcontainer
keystone认证服务, 提供用户认证,服务间的API认证k8s deploymentcontainer
kubeserver容器管理服务,管理多个k8s容器集群,基于主机创建k8s集群k8s deploymentcontainer
logger操作日志服务,存储所有服务的操作日志k8s deploymentcontainer
monitor监控服务,提供监控API,提供报警服务k8s deploymentcontainer
notify消息通知服务,负责短信,邮件,以及IM的消息发送k8s deploymentcontainer
onecloud-service-operator编排服务控制器k8s deploymentcontainer
ovn-northOVN虚拟网络的数据维护服务,OVN标准组件k8s deploymentcontainer
region云控制器,控制服务k8s deploymentcontainer
region-dns主机自定义域名服务k8s deploymentcontainer
s3gateway对象存储统一网关,实现对所有对象存储的统一访问k8s deploymentcontainer
scheduler虚拟机调度服务k8s deploymentcontainer
telegraf监控代理,采集每个节点的监控数据,并存储到influxdbk8s daemonsetcontainer
vpcagentVPC代理网关,实现云平台和OVN的信息同步k8s deploymentcontainer
web前端服务,是一个nginx容器,内置web前端js代码k8s deploymentcontainer
webconsole云主机和容器的web终端服务k8s deploymentcontainer
yunionconf前端个性化配置信息的存储和管理k8s deploymentcontainer
onecloud-operator整个Cloudpods服务的K8s Operator,负责服务组件的部署管理k8s deploymentcontainer
climc命令行工具rpmshell
ocadm部署服务管理工具rpmshell

其中 host 和 baremetal-agent 可以根据需求选择性部署:

  • 管理 kvm 虚拟机: 部署 host 服务
  • 管理物理机: 部署 baremetal-agent 服务