首页 存档 技术 查看内容

案例分析|基于Kubernetes构建容器云平台

2018-3-30 13:00 |来自: 互联网 537 0

摘要: 本文是根据时速云联合创始人兼CTO王磊在11月7日在麦思博(msup)有限公司主办的into100沙龙第13期《基于 Kubernetes 构建容器云平台》演讲中的分享内容整理而成,转发请注明出处。 关于into100沙龙:into100沙龙是TO ...

本文是根据时速云联合创始人兼CTO王磊在11月7日在麦思博(msup)有限公司主办的into100沙龙第13期《基于 Kubernetes 构建容器云平台》演讲中的分享内容整理而成,转发请注明出处。

关于into100沙龙:into100沙龙是TOP100Summit全球软件案例研究峰会的一个下属品牌,从2015年1月起,每月在北京、上海、深圳等地巡回举办的技术沙龙。活动旨在交流软件研发及互联网技术的实战经验,分享TOP100峰会那些优秀的案例实践,通过平台结识更多友人,挖掘并传播业界最具价值的技术实践。

作者简介

王磊
时速云
联合创始人
兼CTO


活动:into100沙龙

演讲主题:基于 Kubernetes 构建容器云平台

时间:2015年11月7日

地点:当当网5会议室

摘要

(1)Kubernetes的一些基本的概念和设计理念。
(2)Kubernetes相关的特征,包括网络、存储,还有DNS等等特性,怎么来帮助搭建容器云平台。

(3)我们在构建时速云容器云平台时的相关技术运用,以及在公有云上提供容器服务的经验分享。


正文

1
1、Kubernetes的理念及优势
1、Kubernetes的理念

1)Mesos是一个分布式,可伸缩的资源管理框架,它本身对上层框架怎么去进行任务指派是不负责的,只对上层框架提供resource offering,它也被称作分布式系统的内核。所以Mesos要管理Docker容器的话需要配合 Marathon 等上层框架来进行管理、调度。
(2)如果你要管理的不仅仅是容器,有大数据分析,有定时任务,目前选择Mesos可能更适合,并结合其他开源组件,可以简化、加快所需系统的开发过程。
(3)如果用Kubernetes的话,其实它也可以跟Mesos集成,但是两者有很多地方重合的地方,而且都比较复杂,需要很强的技术才能支撑起来。

2、Kubernetes的优势

开始之初即为容器设计,并可以支持Docker、rkt 等多种容器引擎,对容器的支持也更友好;来自Google内部Borg系统的理念,有10多年的大规模容器使用、管理经验;轻量级、插件式的架构设计,灵活、易扩展;活跃的开发社区,commit数量在github上排名第2,500多个代码贡献者。


2、Kubernetes的一些主要特性


3、Kubernetes的主要架构

在Kubernetes的设计中没有单机版本,只有集群模式。在这种master-slave 的集群设计中,所有状态信息存储在一个高可用、分布式的存储后端,目前用etcd实现;master 可以使用多节点方式实现高可用;在每个节点上主要由kubelet 来管理,包括和Docker 通信、监控容器等;为了解决有状态容器的问题,同样支持各种存储方式,作为容器数据的持久化支持。

river后面可以看到。

4、Kubernetes的相关概念

1、Pod
2、RC(ReplicationController)
3、service
4、label

如图所示,我们在每个服务上定义一个label,在请求到某个服务时,会通过匹配 label 分配到后端对应的服务节点,并进行负载均衡。在Docker,现在也是用这种新的概念,就是Docker在服务发现和负载均衡方面,也采取了这上面的很多概念。

方面,也采取了这上面的很多概念。
5、主要特性解析
1、网络

Kubernetes本身不提供任何底层网络相关的支持,它只对第三方网络解决方案提出具体的要求,只要满足这些要求的网络解决方案都可以作为Kubernetes的支撑网络。而且未来Kubernetes也不会网络有任何实现。

注意事项:内网会给每个Pod动态分配IP地址,地址可能会因Pod为的重建而变动,通过service环境变量或者dns方式的方式解决,随着集群规模的扩大,注意调整service-cluster-iip-range网段设置。

2、资源管理
这里面只列了resource limits的资源控制,在Kubernetes里还有一个request,就是需要的最小的资源是多少,limits指的是上限。现在Kubernetes里资源管控也相对比较简单,就是计算节点上分配的所有Pod,看节点的剩余资源能否满足新的请求。
3、存储
存储,大家也知道Docker在前面一些版本上对存储的支持比较有限。Kubernetes的存储设计主要解决两个问题,首先,Pod重启以后,可能分配到任何一个节点,怎么把匹配的数据随着Pod一起迁移过去;其次,对紧耦合的容器,如何在同一个Pod上进行数据共享。上图介绍了目前Kubernetes 能够支持的存储类型,还是相当丰富的,而且同一个Pod里可以同时使用不同类型的存储。
4、服务发现和负载均衡
5、Rolling upgrade
6、监控

Kubernetes的监控现在还不成熟,官方推荐使用 heapster,influexdb 的组合作为解决方案。但是heapster有很多性能问题,需要自己做一些修改才能用于生产环境。

要求。
6、云服务平台
1、平台定位

提供对应用开发、运维的整个生命周期的管理。

2、平台构成

如果代码没有托管在第三方平台的话,可以把编译好的war包或者二进制文件通过tce 客户端直接进行镜像构建;然后通过控制台可以设置成公有或者私有,同样也可以对镜像进行评论;接着可以把镜像直接部署到系统集群,或者自己的私有集群中;最后通过平台进行日志管理,各种资源的监控,对应用进行运维,而不需要关心底层的资源问题。

7、网络内网域名别名

内部服务通信,使用内网域名别名。通过内网DNS的方式,避免Pod重启、迁移,ip地址发生变化后,关联服务无法连接的问题。通过内网域名也可以非常方便的进行服务编排。


8、服务编排
目前支持两种Level:same node和cross node。它们之间的区别如下图。


9、存储数据存储与备份


10、私有主机集群管理

平台可以支持将用户自己的物理机或者虚拟机,以及阿里云、AWS、青云、UCloud等平台的云主机,组成容器部署集群

首先用户需要在平台上创建自己的集群管理节点,这个是我们负责管理的。然后在需要添加的机器上运行一条命令,就可以把该机器加到自己的集群当中;如果用户需要批量添加云主机,只需要绑定用户凭证,就可以将IaaS云平台的主机批量加入集群。

我们也在深度使用自己的平台,包括开发和测试环境,我们都会跑在自己的公有云平台上;官方的博客、社区、文档、周报等等都是部署在平台上。同样开启了持续集成功能,比如改完代码提交,会触发自动构建镜像,然后Push我们的镜像仓库里,如果需要升级,只需要点击一个重启部署,服务就自动升级了;如果不想服务间断,我们也提供灰度升级的功能。


11、经验分享

1、gcr.io 上的镜像各种被墙,碰到很多问题,也不是很明显,在各个论坛、社区里也看到很多人提这个问题。现在我们把这些镜像移到了我们自己的镜像服务器上,为开发者提供高速镜像下载服务,只需要从我们的镜像服务器下载,然后在本地改一下tag 就行。

2、kube-proxy性能问题,如果服务数量多了以后,延时就会非常高,所以目前我们替换掉了kube-proxy。

3、ETCD性能,在新版本上已经解决了,原来是不会利用多核的特性,老版本上我们是自己重新编译ETCD解决的。

4、在主机集群管理的时候,它有一个hyperkube的组件,其中缺少 cadvisor监控,需要自己重新编译才能解决。

5、拉取私有镜像,Kubernetes拉取私有镜像的时候,目前有两种方式:如果你有一个特权帐号,可以在节点上dockerlogin。第二种,也是Kubernetes官方推荐的,在每个namespace上创建secret 对象授权。


12、用户习惯培养
这是在公有云上的一些感受:
1、是否把容器打造成虚拟机?

我觉得还是有希望把Docker打造成虚拟机的,在Google内部据说把虚拟机都是放到容器里跑的。但是现在想打造成虚拟机的话,一些技术还不太成熟,一个是容器的隔离性和安全性还都不完善;另外它的数据持久化还不成熟。

我们引导用户的时候,并不想把它介绍成虚拟机,而是利用它快速启动,标准化,做迁移比较容易等等来解释。但是现在很多容器平台,用户确实是拿它当虚拟机用的,有一次分享中一个朋友介绍,他以前是做IaaS,考虑是不是改做容器方向,后来跟做容器的朋友聊完以后,说既然大家都在把容器当虚拟机用,那做IaaS挺好的,这个也是IaaS擅长的领域,容器公司是在帮IaaS做宣传了。

2、怎么跟用户推荐

有很多用户,原来是用虚拟空间的,虽然便宜,但是经常宕机,而且一个用户的服务很可能影响其他人的,因为隔离性不够,这时容器平台稳定、高隔离的优势就显现出来了。而如果买IaaS 平台的一台机器,如果机器 down了,你的服务估计要过很久才能恢复,如果要做高可用,你需要买至少2台,还需要自己做负载均衡、容灾等相关配置管理。在容器云平台上,可以保证你的服务在节点down掉的情况下,很快在其他可用节点上恢复,保证服务的高可用,而且可以秒级轻松对服务进行扩展。

3、如何帮助用户过渡到容器云平台?

需要在各种用户需求和容器的特性之间进行取舍,不推荐直接修改容器内部,但是支持操作数据卷中的数据,可以直接上传、下载数据,为了方便调试,也提供Web Terminal进入容器内部,帮助用户慢慢的去理解、适应容器云平台。

如上图,帮用户创建 lnmp、lamp 等等基于镜像的开发环境,将运行时和代码分离,保证用户代码安全的情况下,做到开发环境的高可用,以及在开发团队之间的高一致性,并轻松实现一键升级。

我们也会利用Pod或者Stack级别的编排帮助用户。比如要在已有镜像上加一个服务,一般要重新构建镜像才能启动多个服务,而通过Pod编排,可以把紧耦合的服务部署到同一个节点,而且可以共享存储,端口空间等Stack编排可以帮助用户跨节点部署多个服务,并且保证服务之间的关联。


13、整个平台监控和报警的机制

关文章:

Docker与十二因子

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除


路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部