编辑推荐: |
文章从几个角度介绍基于K8S与Docker构建轻量级平台,包括为什么基于K8S去做轻量级的平台,框架介绍相关内容。
本文来自于博客园,由火龙果软件Alice编辑推荐。 |
|
几个角度介绍一下PaaS平台,基于K8S与Docker构建轻量级平台叫做ECP,就是弹性计算平台。我们知道刚才马俊讲的CMP,更多是在IaaS这一层面的,IaaS这一层面很多工作在主机、存储、网络上。到PaaS这一层面,大家对PaaS的理解可能会有很多的差异,比如说互联网基于它的API能力开放的应用开发框架理解为PaaS,还有像运营商开放的能力可以是定为PaaS,开发环境也是PaaS。不管是哪一个方向,大家在PaaS通用上都是说提供了一种环境,这种环境可以支撑应用快速去做开发、部署与运行,同时支撑应用更好做弹性更灵活的调整。
建设目标上这四个角度(参见ppt截图),是大家都认同的。第一个系统高可用,用了PaaS平台之后,不在关心底下的IaaS资源了。不要关心虚拟机HA、DRS等,你只需要关注这个平台是不是可靠。第二个资源共享的调度,像互联网公司,更多是打造消息中间件和应用软件可弹性的中间件环境,这套中间件环境支撑它的应用做弹性拓展。第三个层面就是DevOps,研发测试到运维一体化,最后是自动化运维,基本上做一个轻量级的PaaS平台,基于这个目标去做的。
我们为什么基于K8S去做轻量级的平台。实际上K8S提供了一套应用发布运行的标准弹性的框架。我们知道一个应用很多情况下可以基于负载均衡加上后端的几个计算节点构建。比如说我们一个Web应用,前端是负载均衡+Web服务器,后端是负载均衡+数据库服务器,实际上都是类似于这样一种框架。前端有负载均衡,后端有计算节点,这是典型云应用的框架,实际上K8S主要提供这样一套机制,保证应用去做快速的发布和服务的快速发现。部署这样一个负载均衡,加上几个后端节点应用,我们要创建出这样一个负载均衡,同时要决定后端这几个计算节点在服务器节点上怎么做分布和调度,K8S最核心的管理叫做服务管理,一个service,怎么运行到K8S集群里面,出现问题如何进行重启。一个应用有两个service,一个是Web的service,一个是数据库的service,这两个应用如何发现对方,比如Web怎么发现的数据库。
相对于其他的管理平台,K8S我们看到它的体系比较完整统一,开发语言也比较统一。大家在K8S的官网和社区上可以看到很多这样的文章,我不再详细介绍了。
K8S提供了一种框架,可以在上面部署服务、服务发现、节点与容器调度,为什么我们还要基于K8S再去打造一个新平台。有几个原因:第一个K8S本身的UI不是很友好,不符合国内使用情况。第二个我们用K8S的时候,它有一个service的概念,这个service是一个负载均衡入口加上几个pod的概念。可以通过service找到后面挂了几个
pod,你从这个pod反向找service就找不到了。我们想要做这样一个平台,可以支持应用管理,一组应用包括多组service,比如一个网站应用包括web
service与数据库service。第三个原因是到了PAAS,是一个云的概念,要求多租户,目前K8S对租户的支持也不是很好。还有其他的比如基础设施的管理、日志与监控等。
所以我们基于K8S为核心,在外围构建服务,包括主机管理,网络管理、应用管理,服务管理、监控管理、日志、用户UI,所有这些都是我们在K8S周边封装的。这些服务每一个都可以做成一个镜像,所以这些镜像在K8S部署的时候用pod的形式起动起来,这样只需要UI抽取相关的服务以API的形式获取相关功能,可以形成一套PaaS平台,用户可以基于PaaS平台构建自己的应用的能力。
每个框架展开一下细化介绍,第一个是apiserver,这是K8S核心模块。apiserver是K8S集群所有操作的入口,这个API提供增删查改盯,提供监控Watch接口。apiserver实际上在K8S本身是二进制文件运行的,可以用一个二进制命令运行起来,apiserver底下本身是无状态化的运行程序,所有存储在ETCD,运行这个apiserver的时候,指定ETCD。
ECP核心的模块,第一个主机管理,我们知道K8S里面有Cluster的概念,我们具体实现的时候,对每一个Cluster定义成Datacenter(数据中心),数据中心里面再去分集群,集群里面再去分资源池,这是跟K8S的一些区别,所以我们标签上做了一些改造,把Cluster同步替换成了Datacenter,同时加两个标签,一个是资源池一个是集群。
第二个核心模块是网络模块,也是基础设施管理的一部分,我们有两种解决方案,第一个是calico,第二个解决方案是基于Neutron做了新的一套SDN解决方案,它的灵活性比较高。
有了主机管理我们很方便把一个容器分配到上面,这个容器有了运行的主机,有了运行IP缺什么?缺存储。存储我们基于Web的存储和本地存储做容器存储分配。有两个角色,一个是管理员角色,配置存储,真正用户使用的时候,创建一个PVC,一个PV使用的申请。
有了存储、网络、主机的管理,一个容器创建时有了运行环境,但这个容器属于某个应用, K8S本身支持service,这个service后面挂几个pod(容器)。但一个应用是由多个服务组成的。
主机、存储、网络、应用管理,实际上最终目的都是为了支撑应用,如果做成企业级的平台,还需要监控。监控我们通过CAdvisor收集数据,数据进入cellometer进行测试呈现,历史数据的存放与分析,放在Hbase里面去。
再说一下镜像,有一个重要部分是与用户管理进行协同。 用户管理用Keystone实现,我们用户登录系统时获取token,在访问具体服务时,主机管理、应用管理、镜像管理提供对应的token。访问一个
service,然后和keystone做一个认证,是不是真的已经获得授权。
接着是CI/CD与DevOps,主要是从研发、测试、到部署的一体化流程。
Master是无状态的架构,状态数据存放在ETCD,同时基于ETCD的raft算法进行主master选举。apiserver是K8S的核心,基于VIP与多个节点实现,实现了类似于集群,它出现了流量会切入到它这个上面,也是无状态的。
Q&A环节
Q:基于K8S做的应用平台很多,我们的优势在哪儿?
A:坦白讲,大家看功能,底层的功能这一块,没有任何一个人敢说我有100%的优势。但我们的优势在于PaaS平台上构建集群的优势,比如说高性能计算集群,还有机器学习集群,K8S在1.6之前GPU支持上比较差,但是我们1.6之前就已经完成了GPU的调度,同时与人工智能的客户做了多轮的尝试。Q:系统平台跑在虚拟机还是物理机上?
A:物理机居多。
|