支撑大规模公有云的Kubernetes改进与优化 (1)

Kubernetes是设计用来实施私有容器云的,然而容器作为公有云,同样需要一个管理平台,在Swarm,Mesos,Kubernetes中,基于Kubernetes已经逐渐成为容器编排的最热最主流的平台,网易基于Kubernetes实现了自己的容器公有云,在这个过程中,需要对Kubernetes进行一定的改进与优化。

架构如下:

网易开发了自己的一个容器服务平台,将OpenStack的IaaS层和Kubernetes容器层深度融合起来,从而实现一个完整的公有云体系。从图中可以看出,容器服务平台会调度OpenStack的计算服务Nova来创建KVM虚拟机,然后调用Cinder进行云盘的创建于挂载,调用Neturon进行网络的创建与连接,然后调用Kubernetes进行容器创建,还可以调用NLB挂载负载均衡器。

一、OpenStack架构很复杂

在容器平台之前,网易的IaaS层采用的是OpenStack架构。大家都说OpenStack太复杂了,如下图是OpenStack的一个架构图。

OpenStack主要包括以下的模块:

  • 安全认证模块keystone
  • 计算虚拟化模块Nova
  • 存储虚拟化模块Cinder
  • 网络虚拟化模块Neutron
  • 镜像管理模块Glance
  • 对象存储模块Swift

其中每一个模块都包含很多的子模块,大部分包括api模块,调度模块,以及具体干活的模块。

二、OpenStack创建虚拟机的流程很复杂

OpenStack创建一个虚拟机的流程非常复杂,这里简单概括一下其中的要点。

第一:AAA,也即我们常说的Authentication,Authorization,Account。

所谓的Authentication认证,就是验证我是不是我,Authorization鉴权就是审核,虽然我是我,但是我都没有这个权利做这个事情。

Authentication一般有两种方式,一个是对称加密的方式,也即用一个Token,客户端和服务端都用这个Token进行加密和解密,一个是非对称加密的方式,也即使用PKI,使用certificate的方式。

AWS也是有这两种方式。

另外Authorization,则常用的是Role based access control。

有用户,角色,租户的概念。

例如AWS里面有

第二: nova-api接受请求

在这里可以干两件事情,rate limit,调用我不能太频繁,quota,控制每个租户最多能够创建多少资源。

第三:nova-scheduler进行调度

调度分两个过程,一个是Filtering,先将不符合要求的主机过滤掉,一个是weighting,剩下的根据主机的使用情况进行打分排名,选择一台机器。

第四:nova-compute真正干活的人接收到请求,调用libvirt创建虚拟机

第五:libvirt是真正的创建虚拟机的工具,先要下载虚拟机镜像

第六:libvirt开始定义KVM的启动参数

第七:libvirt开始给KVM创建网络设备

第八:libvirt启动KVM,这里一般会用到Cgroup对KVM的资源使用进行控制

第九:调用Cinder为虚拟机创建存储,后端一般用Ceph

想了解Kubernetes的人是不是看到这里已经烦了,不是讲kubernetes么?怎么讲了这么多OpenStack?

那就再来看张图,这个是aws创建虚拟机的知识图谱,是不是很多类似的概念?

很多学技术的发现技术发展实在太快,从虚拟化,到OpenStack,到Docker,到Kubernetes等,怎么学的过来,其实深入了解会发现,基础的技术非常像,包括接下来解析的Kubernetes。

三、Kubernetes的架构相对简单

很多人喜欢Docker,以及Docker平台,就在于Docker非常简单,没有OpenStack这么复杂的概念,很容易就能启动一个nginx的demo。

而作为容器管理平台,Kubernetes的架构也是比较简单的。

客户请求进来的时候,先进入api层,相当于nova-api,首先先要进行认证和鉴权(Authentication和Authorization),相当于keystone做的事情。

然后创建的对象会保存在etcd里面,如果是OpenStack则在数据库里面。

接着进行Scheduler,将对象调度到一台机器,相当于nova-scheduler要干的事情。

然后每台机器上的kubelet是真正干活的,发现自己被调度到了,需要在自己的机器上创建容器,相当于nova-compute。

kubelet创建容器的时候,先要下载容器镜像,nova-compute也要下载虚拟机的镜像。

nova-compute要调用docker的接口创建容器,相当于nova-compute调用的libvirt创建KVM,docker真正的隔离使用的是cgroup,KVM也要用cgroup,docker还用到了namespace,KVM的网络配置也会用到namespace。

docker创建好了,需要给docker配置网络,配置存储,libvirt也干了这些事情。

四、kubernetes创建pod和service的过程

  • 客户端调用api接口创建pod。
  • api-server将pod创建一个对象,保存在etcd里面。
  • scheduler不断通过api-server查看哪些pod需要调度,然后进行调度,将调度结果返回给api-server
  • api-server将scheduler的调度结果写入etcd中。
  • kubelet不断查看有没有能够调度到自己机器上的pod,有的话调用docker的接口创建容器。

  • 客户端调用api接口创建服务。
  • api-server创建service对象写入etcd。
  • controller不断扫描service对应的pod。
  • controller调用api-server创建对应的访问端点endpoint。
  • api-server将endpoint对象写入etcd。
  • proxy不断发现有没有可以放在自己上面的转发规则,如果有则创建socket监听端口,并且创建相应的iptables规则。

五、kubernetes没有什么?

Kubernetes看起来比OpenStack简单很多,其实缺少了很多的功能。

  • 没有完善租户管理模块,租户隔离性不好,是否需要一个类似keystone的服务?
  • 是不是需要镜像的管理,难道不需要一个类似glance的服务?
  • 镜像存储在哪里,是否需要一个对象存储的服务,类似swift?
  • kubernetes本身不管网络,需要通过插件进行,网络和SDN谁来管理?
  • kubernetes本身不管存储,需要通过插件进行,大部分的存储方案还是通过Ceph搞定。

然而,如果要做一个公有云,至少要搞定上面的部分,如果把这些都加上去,相当于基于kubernetes重造一个OpenStack了,为什么要重复造轮子呢?所以我们选择OpenStack和kubernetes深入融合的解决方案。

今天飞机晚点了,本来一天一篇的,应该昨天写完的只好凌晨完成。

接下来会解析OpenStack和kubernetes融合的方案。

其实作为公有云还有更多的问题:

  • 网络二次虚拟化的问题
  • 公网和浮动IP的问题
  • 一个Kubernetes集群还是多个Kubernetes集群?
  • Kubernetes集群如果做到很大规模?
  • 等等等等

也会在接下来这个系列的文章中详细阐述

时间: 2024-10-27 18:32:25

支撑大规模公有云的Kubernetes改进与优化 (1)的相关文章

二进制安装kubernetes v1.11.2 (公有云虚机)

kubernetes搭建在公有云,集群vip可以用使用LB实现,注意下面几点 1.创建LB,监听端口指向api-server的监听端口,假设是6443 2.关闭LB的健康检查 3.修改/home/k8s/.kube/config 中的集群地址为 https://master_vip:6443 否则会出现 error: the server doesn't have a resource type "all" 原文地址:https://www.cnblogs.com/aast/p/102

全球公有云介绍

时至今日,云计算已经不再只是个概念.全球各企业都在逐步尝试或已经部分和全面的使用公有云来建立他们的IT系统.特别是互联网公司,如Netflix,他的所有IT系统都构建在AWS上.在中国,各级政府和企业都在积极将应用搬迁到云上.可以说如果现在还有哪个企业的CIO对云计算知之甚少,或从未考虑过企业应用的云化,那他一定是out of date的. 可能很多人只是听说过云计算,对于公有云提供商,可能也只听过AWS(Amazon web services)或者阿里云.其实还有很多其他公有云提供商,今天我就

乱象?真象!——中国公有云服务市场大起底

1月30日,亚马逊宣布从2015财年第一个财季开始,把云计算业务部门--亚马逊AWS的财务业绩单独列出.亚马逊AWS作为全球公有云服务的标杆之一,其业务一直在发展壮大.虽然从全球范围来看,公有云服务在快速落地,但毕竟还处于发展的初级阶段,即使像微软.Google这样的公有云服务的领先者,迄今为止也从未在其财报中单独披露过各自云计算的业绩. 2013底,亚马逊AWS正式进入中国.当时,已经有人喊出中国公有云服务市场"狼来了".前不久,Oracle也露了口风,要将公有云服务全面落地中国.国

公有云不可能统一天下

于英涛:公有云绝无可能一统天下! 科技杂谈 01月31日 10:36 分类 :互联网 阅读:552 公有云的目标是"大集中化",但IT平台却即将进入新的"分散化"时代. 云计算已经成为IT发展的一个新常态.无论是何种机构(包括政府和企业),在谈到自己的IT建设时,云计算基本上都摆在了第一位. 但在云计算领域里,一直有两种观点激烈交锋. 一种观点来自于公有云服务商,他们认为公有云将成为未来IT的统治者,几乎所有机构的IT环境都可以,也都应该放到公有云上而无需自建. 另

公有云与私有云优劣势调研

原文:http://www.hengtianyun.com/download-show-id-170.html 云的概念由来已久.追溯最早的理念,是为了将计算能力从技术限制中解除,希望可以集合大规模计算机的计算能力.而不是受限于物理机的性能瓶颈.后来伴随着硬件技术的发展,软件架构的改善,人们发现云可以应用于很多其它的业务场景,带来很多其它的优点,云的概念也逐渐变得具体和丰富. 如今提到云,人们都会想到一系列的优点.如配置灵活,成本减少.高可靠性,弹性扩展.业界已有的案例都充分证实了云的优点.市场

Gartner 发布容器公有云竞争格局报告 | 云原生生态周报 Vol. 44

作者 | 王思宇.陈洁 业界要闻 Gartner 容器报告:阿里云与 AWS 并列第一,领先微软.谷歌 近日,国际知名调研机构 Gartner 发布 2020 年容器公有云竞争格局报告,阿里云再度成为国内唯一入选厂商.Gartner 报告显示,阿里云容器服务在中国市场表现强劲,产品形态丰富,与 AWS 并列第一,领先 Google.微软.IBM 和 Oracle 四家厂商.<br /> MicroK8s v1.18 发布 3 月 27 日,Ubuntu 发布 MicroK8s v1.18 版本

[Docker]公有云容器服务进入2.0时代

公有云容器服务进入2.0时代 近来Google.Amazon接连发布基于容器(其实主要是Docker)的新业务. 2014.11.05 Google发布Google Container engine 2014.11.13 Amazon发布AWS Container Service 估计很快我们也将看到Azure的新容器服务发布了. 如果我们把之前IaaS公有云提供商的产品看做容器服务1.0, 这轮新发布的产品相当于2.0升级版. 在1.0中,各厂商引入API.CLI方式向用户提供在虚拟机中创建容

这家五年的创业公司,总结了公有云的十四条生意经

根据最新的IDC全球半年度公有云服务开支指南的显示,2017年全球公有云服务及基础设施开支将达到1225亿美元,相比2016年增长24.4%.在2015年到2020年预测期间,公有云整体开支将实现21.5%的复合年增长率(CAGR),几乎是整体IT开支增幅的7倍.IDC预测,到2020年公有云开支将达到2034亿美元. 无论对于全球还是中国市场来说,公有云技术虽然从诞生开始到现在已经进入第十个年头,但公有云产业才刚刚开始.美国学者乔·韦曼(Joe Weinman)曾在2014年出版过一本<云经济

运营商发展公有云的五种模式--【软件和信息服务】2015.04

这两年公有云发展的如火如荼,运营商受到OTT的打压,自然也不甘落后.虽然发展公有云的形式各异,但运营商发展公有云有五种常见模式. 1)自研模式 自研模式是最高大上的模式,也是所有开源组织最热衷的模式,既然云操作系统.云安全.SDN.NFV等都提供了开源选择,运营商作为高大上的用户,当然很多人想到就是自研.比如现今如日中天的OpenStack.Xen等都为运营商开发自己的云平台提供了很好的基础,Google.阿里云等都为运营商树立了很好的榜样.并且也确实有运营商基于这种模式在运行,包括Verizo