基于Docker及Kubernetes技术构建容器云(PaaS)平台概述【编者的话】 热转印带
⽬前很多的容器云平台通过Docker及Kubernetes等技术提供应⽤运⾏平台,从⽽实现运维⾃动化,快速部署应⽤、弹性伸缩和动态调整应⽤环境资源,提⾼研发运营效率。从宏观到微观(从抽象到具体)的思路来理解:云计算→PaaS→ App Engine→XAE[XXX App Engine] (XAE泛指⼀类应⽤运⾏平台,例如GAE、SAE、BAE等)。
本⽂简要介绍了与容器云相关的⼏个重要概念:PaaS、App Engine、Docker、Kubernetes。
1. PaaS概述
1.1. PaaS概念
1. PaaS(Platform as a service),平台即服务,指将软件研发的平台(或业务基础平台)作为⼀种服务,以SaaS的模式提交给⽤户。 2. PaaS是云计算服务的其中⼀种模式,云计算是⼀种按使⽤量付费的模式的服务,类似⼀种租赁服务,服务可以是基础设施计算资源(IaaS),平台
(PaaS),软件(SaaS)。租⽤IT资源的⽅式来实现业务需要,如同⽔⼒、电⼒资源⼀样,计算、存储、⽹络将成为企业IT运⾏的⼀种被使⽤的资源,⽆需⾃⼰建设,可按需获得。
3. PaaS的实质是将互联⽹的资源服务化为可编程接⼝,为第三⽅开发者提供有商业价值的资源和服务平台。简⽽⾔之,IaaS就是卖硬件及计算资源,PaaS
就是卖开发、运⾏环境,SaaS就是卖软件。
1.2. IaaS/PaaS/SaaS说明
类型说明⽐喻例⼦
IaaS:Infrastructure-as-a-Service(基础设施即服务)提供的服务是计算基础设施地⽪,需要⾃
⼰盖房⼦
Amazon EC2(亚马逊
弹性云计算)
PaaS: Platform-as-a-Service(平台即服务)提供的服务是软件研发的平台
或业务基础平台
商品房,需要
⾃⼰装修
GAE(⾕歌开发者平
台)
SaaS: Software-as-a-Service(软件即服务)提供的服务是运⾏在云计算基
础设施上的应⽤程序
酒店套房,可
以直接⼊住
⾕歌的Gmail邮箱
1.3. PaaS的特点(三种层次)
特点说明
平台即服务PaaS提供的服务就是个基础平台,⼀个环境,⽽不是具体的应⽤
平台及服务不仅提供平台,还提供对该平台的技术⽀持、优化等服务
平台级服务“平台级服务”即强⼤稳定的平台和专业的技术⽀持团队,保障应⽤的稳定使⽤
2. App Engine概述
2.1. App Engine概念
性引诱
App Engine是PaaS模式的⼀种实现⽅式,App Engine将应⽤运⾏所需的 IT 资源和基础设施以服务的⽅式提供给⽤户,包括了中间件服务、资源管理服务、弹性调度服务、消息服务等多种服务形式。App Engine的⽬标是对应⽤提供完整⽣命周期(包括设计、开发、测试和部署等阶段)的⽀持,从⽽减少了⽤户在购置和管理应⽤⽣命周期内所必须的软硬件以及部署应⽤和IT 基础设施的成本,同时简化了以上⼯作的复杂度。常见的App Engine有:GAE(Google App Engine),SAE(Sina App Engine),BAE(Baidu App Engine)。
App Engine利⽤虚拟化与⾃动化技术实现快速搭建部署应⽤运⾏环境和动态调整应⽤运⾏时环境资源这两个⽬标。⼀⽅⾯实现即时部署以及快速回收,降低了环境搭建时间,避免了⼿⼯配置错误,快速重复搭建环境,及时回收资源,减少了低利⽤率硬件资源的空置。另⼀⽅⾯,根据应⽤运⾏时的需求对应⽤环境进⾏动态调整,实现了应⽤平台的弹性扩展和⾃优化,减少了⾮⾼峰时硬件资源的空置。
平面音响
简⽽⾔之,App Engine主要⽬标是:Easy to maintain(维护), Easy to scale(扩容), Easy to build(构建)。
2.2. 架构设计
2.3. 组成模块说明
组成模块模块说明
App Router[流量接⼊层]接收⽤户请求,并转发到不同的App Runtime。
App Runtime[应⽤运⾏层]应⽤运⾏环境,为各个应⽤提供基本的运⾏引擎,从⽽让app能够运⾏起来。
Services[基础服务层]各个通⽤基础服务,主要是对主流的服务提供通⽤的接⼊,例如数据库等。
Platform Control[平台控制层]整个平台的控制中⼼,实现业务调度,弹性扩容、资源审计、集管理等相关⼯作。
Manage System[管理界⾯
层]
提供友好可⽤的管理操作界⾯⽅便平台管理员来控制管理整个平台。
Platform Support[平台⽀持层]为应⽤提供相关的⽀持,⽐如应⽤监控、问题定位、分布式⽇志重建、
统计分析等。
Log Center[⽇志中⼼]实时收集相关应⽤及系统的⽇志(⽇志收集),提供实时计算和分析平台(⽇志
处理)。
Code Center[代码中⼼]完成代码存储、部署上线相关的⼯作。
3. 容器云平台技术栈
功能组成部分使⽤⼯具
应⽤载体Docker
编排⼯具Kubernetes
配置管理Etcd
⽹络管理Flannel
快装脚手架
存储管理Ceph
底层实现Linux内核的Namespace[资源隔离]和CGroups[资源控制]
Namespace[资源隔离]
Namespaces机制提供⼀种资源隔离⽅案。PID,IPC,Network等系统资源不再是全局性的,⽽是属于某个特定的Namespace。每个namespace下的资源对于其他namespace下的资源都是透明,不可见的。
CGroups[资源控制]
CGroup(control group)是将任意进程进⾏分组化管理的Linux内核功能。CGroup本⾝是提供将进程进⾏分组化管理的功能和接⼝的基础结构,I/O或内存的分配控制等具体的资源管理功能是通过这个功能来实现的。CGroups可以限制、记录、隔离进程组所使⽤的物理资源(包括:CPU、memory、IO等),为容器实现虚拟化提供了基本保证。CGroups本质是内核附加在程序上的⼀系列钩⼦
(hooks),通过程序运⾏时对资源的调度触发相应的钩⼦以达到资源追踪和限制的⽬的。
4. Docker概述
更多详情请参考:
4.1. Docker介绍
1. Docker - Build, Ship, and Run Any App, Anywhere
2. Docker是⼀种Linux容器⼯具集,它是为“构建(Build)、交付(Ship)和运⾏(Run)”分布式应⽤⽽设计的。
3. Docker相当于把应⽤以及应⽤所依赖的环境完完整整地打成了⼀个包,这个包拿到哪⾥都能原⽣运⾏。因此可以在开发、测试、运维中保证环境的⼀致
性。
4. Docker的本质:Docker=LXC(Namespace+CGroups)+Docker Images,即在Linux内核的Namespace[资源隔离]和CGroups[资源控制]技术的基础上通
4.2. Docker的基本概念
4.2.1. 镜像
Docker 镜像就是⼀个只读的模板,可以把镜像理解成⼀个模⼦(模具),由模⼦(镜像)制作的成品(容器)都是⼀样的(除⾮在⽣成时加额外参数),修改成品(容器)本⾝并不会对模⼦(镜像)产⽣影响(除⾮将成品提交成⼀个模⼦),容器重建时,即由模⼦(镜像)重新制作成⼀个成品(容器),与其他由该模⼦制作成的成品并⽆区别。
例如:⼀个镜像可以包含⼀个完整的 ubuntu 操作系统环境,⾥⾯仅安装了 Apache 或⽤户需要的其它应⽤程序。镜像可以⽤来创建 Docker 容器。Docker 提供了⼀个很简单的机制来创建镜像或者更新现有的镜像,⽤户可以直接从其他⼈那⾥下载⼀个已经做好的镜像来直接使⽤。
4.2.2. 容器
Docker 利⽤容器来运⾏应⽤。容器是从镜像创建的运⾏实例。它可以被启动、开始、停⽌、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是⼀个简易版的 Linux 环境(包括root⽤户权限、进程空间、⽤户空间和⽹络空间等)和运⾏在其中的应⽤程序。
4.2.3. 仓库
仓库是集中存放镜像⽂件的场所。有时候会把仓库和仓库注册服务器(Registry)混为⼀谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中⼜包含了多个镜像,每个镜像有不同的标签(tag)。
4.3. Docker的优势
1. 容器的快速轻量
焊接熔深检测仪
容器的启动,停⽌和销毁都是以秒或毫秒为单位的,并且相⽐传统的虚拟化技术,使⽤容器在CPU、内存,⽹络IO等资源上的性能损耗都有同样⽔平甚⾄更优的表现。
2. ⼀次构建,到处运⾏
当将容器固化成镜像后,就可以⾮常快速地加载到任何环境中部署运⾏。⽽构建出来的镜像打包了应⽤运⾏所需的程序、依赖和运⾏环境,这是⼀个完整可⽤的应⽤集装箱,在任何环境下都能保证环境⼀致性。
3. 完整的⽣态链
容器技术并不是Docker⾸创,但是以往的容器实现只关注于如何运⾏,⽽Docker站在巨⼈的肩膀上进⾏整合和创新,特别是
Docker镜像的设计,完美地解决了容器从构建、交付到运⾏,提供了完整的⽣态链⽀持。
5. Kubernetes概述
更多详情请参考:
5.1. Kubernetes介绍
Kubernetes是Google开源的容器集管理系统。它构建Docker技术之上,为容器化的应⽤提供资源调度、部署运⾏、服务发现、扩容缩容等整⼀套功能,本质上可看作是基于容器技术的Micro-PaaS平台,即第三代PaaS的代表性项⽬。
5.2. Kubernetes的基本概念
5.2.1. Pod
Pod是若⼲个相关容器的组合,是⼀个逻辑概念,Pod包含的容器运⾏在同⼀个宿主机上,这些容器使⽤相同的⽹络命名空间、IP地址和端⼝,相互之间能通过localhost来发现和通信,共享⼀块存储卷空间。在Kubernetes中创建、调度和管理的最⼩单位是Pod。⼀个Pod⼀般只放⼀个业务容器和⼀个⽤于统⼀⽹络管理的⽹络容器。
手机镀膜机
5.2.2. Replication Controller
Replication Controller是⽤来控制管理Pod副本(Replica,或者称实例),Replication Controller确保任何时候Kubernetes集中有指定数量的Pod副本在运⾏,如果少于指定数量的Pod副本,Replication Controller会启动新的Pod副本,反之会杀死多余的以保证数量不变。另外Replication Controller是弹
性伸缩、滚动升级的实现核⼼。
5.2.3. Service
Service是真实应⽤服务的抽象,定义了Pod的逻辑集合和访问这个Pod集合的策略,Service将代理Pod对外表现为⼀个单⼀访问接⼝,外部不需要了解后端Pod如何运⾏,这给扩展或维护带来很⼤的好处,提供了⼀套简化的服务代理和发现机制。
5.2.4. Label
Label是⽤于区分Pod、Service、Replication Controller的Key/Value键值对,实际上Kubernetes中的任意API对象都可以通过Label进⾏标识。每个API对象可以有多个Label,但是每个Label的Key只能对应⼀个Value。Label是Service和Replication Controller运⾏的基础,它们都通过Label来关联Pod,相⽐于强绑定模型,这是⼀种⾮常好的松耦合关系。
5.2.5. Node
Kubernets属于主从的分布式集架构,Kubernets Node(简称为Node,早期版本叫做Minion)运⾏并管理容器。Node作为Kubernetes的操作单元,将⽤来分配给Pod(或者说容器)进⾏绑定,Pod最终运⾏在Node上,Node可以认为是Pod的宿主机。
5.3. Kubernetes架构