营销-SEO-头部优化文字

400-928-0260

上海帝联信息科技股份有限公司

帝联动态
首页 > 帝联动态 > 行业动态

Google分布式容器技术初体验

2017-08-11 12:24:18

帝联云平台的研发团队正在尝试将云平台的现有业务进行容器化,以实现弹性云平台,解决目前云平台资源空闲率过高问题。


Kubernetes是Google开源的容器集群管理系统,是一个良好的分布式服务框架,它实现了服务的配置管理,包括服务发现,负载均衡以及服务依赖管理。服务之间的调度及生命周期管理。


由于Kubernetes包含了上述部分特性,因此最近帝联云平台研发团队对Kubernetes进行了一些尝试与体验,我们将通过本文来与大家分享Kubernetes的一些总结。

图片关键词

Kubernetes架构总览


Kubernetes基本概念


Pod(最小调度单元)


kubernetes将应用的具体实例抽象为一个pod,一个pod内可以包含多个容器,pod内的容器共享网络地址等资源。


Replication Controller(管理一组Pod)


Kubernetes 通过RC来控制和监控pod的状态和数量,来实现自动扩容和缩容。


Service(一组提供相同服务的pod的对外访问接口)


Service概念是对一组pod的抽象,通过kube-proxy来做到pod的销毁迁移不会影响到service的服务以及上层调用者,通过service配合dns可以实现上层与底层服务的完全解耦。


Label(标签)


通过Label来管理pod与service之间的关联。


Namespace(命名空间)


通过Namespace来组织kubernetes的各个对象,实现多用户资源隔离。


调度中心Master,主要有四个组件构成:


etcd 作为配置中心和存储中心,保存了所有组件的定义以及状态,Kubernetes的多个组件之间的交互也主要通过etcd来进行。


kube-apiserver是Master对外的API接口,提供安全机制,对etcd中的配置以及数据变化进行了封装。


kube-scheduler 调度器,主要功能是通过监听etcd来感知pod对象变化,然后根据调度算法来分配pod到指定node,成功调度后调用apiserver来将node和pod进行关联绑定。


kube-controller-manager 实现Master的主要功能,管理node,pod,replication,service,namespace等。工作机制是通过对集群内的各种事件进行感知,对不同的事件进行不同的逻辑处理。


节点Agent,主要由两个组件组成:


kubelet 主要包含容器管理,镜像管理,Volume管理等。同时kubelet也是一个api服务,和pod相关的命令操作都是通过调用接口实现的。比如:查看pod日志,在pod上执行命令等。pod的启动以及销毁操作依然是通过监听etcd的变更进行操作的。但kubelet不直接和etcd交互,而是通过apiserver提供的watch机制,应该是出于安全的考虑。kubelet提供插件机制,用于支持Volume和Network的扩展。


kube-proxy 主要用于实现Kubernetes的service机制。提供一部分SDN功能以及集群内部的智能LoadBalancer。目前版本基于iptables来实现流量转发。

 

在Kubernetes上构建云平台页面业务


图片关键词


测试页面业务基于kubernetes的架构图


搭建测试过程中的一些问题


无法控制Service的负载均衡方式。


Kubernetes的Service默认对后端的多个pod进行负载均衡调用,造成不同区域的请求可能会跨区域转发造成性能影响。


多物理节点之间使用flannel组成局域网造成性能损耗。


在跨机房的kubernetes集群中使用flannel组成一个局域网时,存在一些网络消耗。


docker有时无法创建容器,手动也不行。


测试集群进行了一段时间的压测后,发现某些节点的docker无法重现创建容器,重启docker进程后恢复。


docker容器无法访问外网。


基于docker0网桥的实现方式,某些节点上的容器无法访问外网,重启docker进程后恢复

官方提供的service方式无法合理利用多网卡机器。


80端口作为稀缺资源,多网卡机器完全可以指定IP绑定端口来实现多网卡机器运行多个80口服务,实现内存、CPU的资源复用。

 

初探Kubernetes可能能为我们带来的改变


资源的高效利用,通过容器化以及Kubernetes的快速编排的这两者实现的解耦,可以将多个占用不同资源的业务整合到一台物理节点上,实现物理节点资源的最大化利用。


快速扩容缩容,减轻面对CDN突发时的运维压力,Kubernetes的RC的动态伸缩功能实现Pod根据流量来进行动态伸缩,而不再是运维手动扩容和缩容。


故障节点自动迁移,实现故障节点服务自动迁移到其他节点进行恢复。


更完备的CI/CD工具,CI是code-deploy的关键工具,但当前由于受限于部署环境的不一致,CI可做的事情有限,大多数还依赖用户的自定义脚本。


有了Kubernetes这样的标准环境后,以后此类工具可以覆盖测试环境部署,集成测试,上线部署等环节,实现标准化的交付工作流。