容器、容器云和容器化PaaS平台之间到底是什么关系?
本文分享自天翼云开发者社区《容器、容器云和容器化PaaS平台之间到底是什么关系?》,作者:s****n
一直都有很多人迷惑于容器应该属于 IaaS 或是 PaaS 层,也搞不清楚容器云到底是该归到哪里,该由哪个团队来建设、哪个团队来维护。K8s 是不是就等同于容器云?所以我们看到概念和定义的混乱,在实施容器云的时候也会有众多的分歧,无所适从。目前又有众多的公司推出容器化 PaaS 的概念,更搞不清楚谁是谁了。那么容器、容器云、容器化 PaaS 以及与 Docker 、 Kubernetes 之间是个什么样的关系?这是需要我们明确并理解的问题。

容器是一种操作系统级虚拟化技术, Docker 是一种容器引擎。使用 Docker 来运行操作容器。但从容器自身来说,其提供的是 IaaS 层能力。Kubernetes 提供了容器调度和管理的能力,加上云计算租户功能,实现容器云平台功能。而基于容器技术所构建的应用开发、应用托管和应用运维平台则可以称为容器化 PaaS 平台,它是一种轻量化 PaaS 实现。结合日志、监控、认证、权限等基础能力则可以构建企业级的平台和可复用服务,采用微服务架构实现企业技术服务中台能力,支撑企业业务敏捷研发和模式转型。
一、 容器
容器是一种轻量虚拟化技术,它不同于 VMware 虚拟化,所以其隔离性相对差、安全性差,但轻量也正是其特点。容器的概念其实也早就有之,只不过实践的选择有差别。早在 2006 年的时候,我当时所在的公司就提出了基于 java 的多 jvm Containers 概念并进行了产品实践,一个 java 容器可以运行多个 jvm ,不过因为 java 自身特性导致的后来转型并不成功,最后不得不放弃了。应用层容器和操作系统级容器的实现还是有很大差别。操作系统级的容器设计明显更合理,更易于实现和推广。
通过标准化镜像封装,从而实现了环境一致性。 容器为了弹性伸缩能力倾向于无状态应用,这样简化了容器设计实现的复杂性。所以基于容器自身的特点,容器适用的场景并不是无限的。当然 kubernetes 从 1.9 版本正式支持有状态应用,增强了容器的场景适应能力,扩展了适用场景。 经常有人拿容器和虚拟机比较,虽然都是虚拟化,但二者差别还是很大的。虚拟机就好比是一个完整的人,而容器类似于妈妈肚子里的胎儿。它需要依赖于母体来生存,所以我们可以看到容器在操作系统中以进程的方式运行。容器的虚拟化损耗约 1% , 而虚拟机的损耗约 20% 左右。但是容器带来了管理和运维的复杂性。Docker 提供了 CLI 和 REST API 方式,都需要很高学习成本,在达到一定数量的容器后用 CLI 来管理和运维将会是噩梦,所以有 Docker Swarm 、 Mesos 、 Kubernetes 等容器调度管理框架的出现,提升管理和运维效率,降低运维难度和工作量。
既然容器也是操作系统级的虚拟化,其可以看作类似于虚拟机的对象,容器本身提供的服务依然是基础设施资源服务,所以容器应该是处于 IaaS 层。而基于容器技术和容器调度管理技术如 kubernetes 实现的容器云平台则封装了容器操作,提供平台能力,所以容器云平台应该属于 PaaS 层。这也是很多人直接把容器云平台称为 PaaS 平台的原因吧。不过确切的说,容器云平台并非真的 PaaS 。目前很多容器云平台所提供的能力无法满足应用开发、应用托管、应用运维的 PaaS 平台能力要求,而通常仅仅实现租户 + 云端的容器调度管理能力,依然有大量的 CLI 运维工作。对使用容器云的人员的学习成本和要求都比较高。
二、 容器云
Kubernetes 并不等于容器云, kubernets 只是一种容器调度管理框架,和 docker swarm 、 mesos 等一样,用于调度、管理容器。比如调度容器到匹配的资源上,管理容器的弹性伸缩、灰度发布、负载路由等。云计算很重要的一个概念是租户。租户租用共享的云计算资源,按需和用量计费,不用则不产生费用。而 kubernetes 中是没有租户的概念的。所以仅有 kubernetes 是不够的, kubernetes 可以看作是容器云平台的内核,我们需要使用 kubernetes 来实现容器云平台,但还需要基于 kubernetes 进行封装,支持租户共享基础设施资源等能力。
租户可以是一个跨平台的概念。在容器云平台建设中,有容器云平台的租户设计是基于 kubernetes 的 namespaces 来划分的,一个租户使用一个 namespaces ,这会带来很大的局限性。虽然租户的定义没有明确标准,但从理论上说租户是高于 kubernetes 的,所以在 kubernetes 内部没有租户的概念,而是用 namespaces 来实现资源隔离。在容器云平台实践中,需要考虑租户的设计,可能是跨越多个 kubernetes 集群的,甚至跨越多个 IaaS 平台用 kubernetes 实现容器调度,也就是可以把容器调度到不同的云平台上运行,比如同时可以把容器调度到腾讯云、华为云、 AWS 云等云平台上(通过云管来实现资源的统一管控,支撑容器云平台的资源调度),从而实现高等级备份和容灾等。这就需要考虑基于 Kubernetes 多集群之上的容器云平台能力的抽象和设计。 容器适用于轻量、弹性、无状态等业务场景,这也决定了在传统行业其应用场景并不广阔。传统行业业务追求稳定性,并不需要频繁的变更和重启。重启可能会带来数据的丢失,也可能造成业务流量处理的波动。
另外需要认识到,生产环境和测试环境的要求是不一样的。测试环境可以敏捷的迭代测试、快速的环境准备、频繁的部署删除,但生产环境往往要求持续稳定的运行。所以容器更多的适合测试环境,以更快的构建测试环境,确保回归测试环境一致性,更快更频繁的构建、发布、部署、测试、反馈,从而提升效率,减少出错频率。这也是我们公司各个团队都乐意转到容器云平台的一个原因。生产环境则要求稳定,应用服务部署之后,不需要频繁的启停,也很少频繁的弹性伸缩,往往需要提前规划好系统容量需求,确保平稳和稳定。
一种技术解决不了所有问题。容器不是万能,它有适合的场景。我们不能削足适履,而是要理解容器的特点,选择合适的业务场景。企业内需要不同技术的组合来满足企业业务需求,而容器适合支撑轻量、弹性、无状态业务应用。所以测试环境我尽可以把 kafka 、 Mysql 、 ES 等快速部署起来用于测试,但这些组件在生产环境就需要物理化部署,而不是容器化部署。测试和生产在性能、稳定性、效率等方面的要求是不一样的,所以不同的场景需要考虑不同的方式。
也有很多人鼓吹容器节省资源,这只是相对的。每个容器都是一个完整的业务应用及依赖包组合,依赖的文件越多,部署容器越多,重复的资源占用就越多。浪费就越多,反而比如一台服务器上直接起若干服务。而且大量的容器如果调度不合理往往会导致资源争抢的出现,应用性能不时受到影响。什么时候容器云会节省资源?在达到一定量后,中大规模应用之后,可以实现资源的分时段使用,比如白天做业务处理,晚上做数据分析、计算、整合、统计等,相当于使资源分片,但这取决于业务的运行资源和时段要求以及容器量,只有达到一定量之后才能更好的规划和分时利用资源,从而达到“节省资源”的目的。但这些对容器云平台的容器调度能力提出了非常高的要求。
三、 容器化PaaS
容器云可以看作是容器化 PaaS 的一个雏形,但并不能真正称为 PaaS 。PaaS 平台类似于操作系统(云操作系统),提供应用开发、托管、运维等能力。特别对传统行业人员来说,需要具备友好的 UI ,使用户能够不需要额外学习就可以方便的使用 PaaS 平台来完成应用开发、托管和运维需求。
容器云或容器化 PaaS 平台属于基础平台,理论上应该由运维团队来搭建。但采用容器云之后, PaaS 运维团队是有别于传统的运维团队,而应该是一种开发型运维团队,重点是运维平台建设、运维工具开发以及稳态业务应用运维。而运维可以分 2-3 个层次:基础设施资源运维、平台和工具运维、业务应用运维。开发团队则专注于业务应用的开发和迭代,业务团队则专注于业务的运营和创新。PaaS 平台则起到一个承上启下的作用,向下使用基础设施资源,向上则支撑业务应用的开发、运维和运营等。这有点类似于 Google SRE ,这也是企业数字化转型 IT 组织转型的重要方面。
容器化 PaaS 平台可以更好的利用容器的特点支撑微服务化业务应用。所以我们在建设容器云平台时就提出了“以应用管理为核心”,支撑微服务化业务应用,这就需要在容器云平台具备服务治理能力。服务治理不是指 SpringCloud ,也不是 dubbo ,微服务开发框架和微服务治理是两个概念。在容器云平台或容器化 PaaS 平台,可以不用 SpringCloud ,不用 dubbo ,同样可以开发微服务,反而会简化微服务的管理和治理。比如说服务注册,使用 SpringCloud 可以要使用 Eureka ,就需要额外的 Eureka 组件,而容器云平台自身是提供服务注册发现机制的,所以没必要非要选择 SpringCloud 等工具。但是这就对容器云平台或容器化 PaaS 提出了比较高的要求,要能实现不同类型微服务的管理和治理。
理解了这一点,在设计实现容器化 PaaS 平台的时候,就不会只考虑 SpringCloud 或 Dubbo ,就可以设计出更通用的 PaaS 平台。 我们把容器化 PaaS 定义为轻量化 PaaS 。所谓轻量化 PaaS ,就是让它来支撑微服务架构业务应用,而不去部署如生产数据库、 Kafka 、 ES 等重型数据库或中间件系统,因为它无论在稳定性、可靠性、性能等方面都不如非容器化部署,运维复杂度高。因此,使用容器云或容器化 PaaS 来支撑微服务架构业务应用,实现敏捷的业务应用服务开发和迭代,快速构建一致性的开发、测试环境,支持弹性伸缩应对突发流量,扩展服务治理增强安全管控,提供统一的日志、监控、审计等企业级能力中心等,从而就可以基于容器化 PaaS 构建企业的可复用中台服务,从而满足企业业务应用的敏捷变化需求和业务模式转型,促进企业数字化转型。 也不少人在提敏态和稳态双态运维,我们觉得核心不是新的运维模式和传统运维模式并行,而是不同的业务场景需求。任何时候都存在敏态和稳态的需求,如果把数据库都容器化部署,这不是敏态,而是自找麻烦。我们前面提到, PoC 和测试环境可以这么干,但生产环境就是不一样的场景需求。无论互联网类业务或者传统业务,生产环境的稳定性都是首要要求。
容器、容器云、容器化 PaaS 对使用者有不同的要求。容器云产品化需要向容器化 PaaS 平台转型,并需要考虑不同业务场景的需求,以更好的实现应用开发、托管和运维能力需求。这也是实现 PaaS 平台的一个相对便捷的途径。
容器、容器云和容器化PaaS平台之间到底是什么关系?的更多相关文章
- Zend与PHP之间到底是什么关系
Zend与PHP之间是什么关系 What is Zend's relationship with PHP? 每次看到PHP虚拟机中出现zend.zendvar之类的都很困惑,特意查了一下... PHP ...
- 灵雀云容器PaaS平台助力知名股份制银行金融科技革新
互联网.科技和金融的碰撞给银行业带来巨大影响.IT技术起初是传统金融提升效率的工具和方法,随着新技术的演进,技术成为驱动变革的核心要素.Fintech金融科技以技术和数据为驱动,用创新的方法改变了金融 ...
- PAAS平台的web应用性能测试与分析
引言 为什么我会写这一篇博客,因为最近很多京东云擎jae的用户反应一个问题就是他们部署在jae上面的应用访问很慢,有极少数应用甚至经常出现504超时现象,当然大家首先想到的是jae性能太差,这也是人之 ...
- PAAS平台的web应用性能測试与分析
引言 为什么我会写这一篇博客,由于近期非常多京东云擎jae的用户反应一个问题就是他们部署在jae上面的应用訪问非常慢,有极少数应用甚至常常出现504超时现象.当然大家首先想到的是jae性能太差,这也是 ...
- 屏幕尺寸,分辨率,像素,PPI之间到底什么关系?
转载自:http://www.jianshu.com/p/c3387bcc4f6e 感谢博主的无私分享. 今天我给大家来讲讲这几个咱们经常打交道的词到底啥意思,以及他们之间到底有什么关系.这篇文章是我 ...
- 我的Android进阶之旅------>(全解析)屏幕尺寸,分辨率,像素,PPI之间到底什么关系?
作者:马忠信,作者授权早读课发表,转载请联系作者. 原文链接:http://www.jianshu.com/p/c3387bcc4f6e# 互联网早读课:http://zaodula.com/arc ...
- (全解析)屏幕尺寸,分辨率,像素,PPI之间到底什么关系?
(全解析)屏幕尺寸,分辨率,像素,PPI之间到底什么关系? 产品经理马忠信关注 22015.08.30 13:59:20字数 2,660阅读 52,661 今天我给大家来讲讲这几个咱们经常打交道的词到 ...
- 洪强宁:宜信PaaS平台基于Calico的容器网络实践
洪强宁:宜信PaaS平台基于Calico的容器网络实践 本文内容来自由七牛云主办的ECUG Con,独家授权InfoQ整理完成 容器云面临的网络挑战 在传统的IDC的架构里面网络是很重要的事情,在 ...
- web容器 web服务器 servlet/jsp容器 之间的区别和关系是什么?
web容器 web服务器 servlet/jsp容器 之间的区别和关系是什么? 这是我在网上找的一些资料:1. Web浏览器除了可以在本地硬盘上打开网页文档外,还可以使用http网络协议从网络上的We ...
- Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->使用spring framework的IoC容器功能----->方法一:使用XML文件定义beans之间的依赖注入关系
XML-based configuration metadata(使用XML文件定义beans之间的依赖注入关系) 第一部分 编程思路概述 step1,在XML文件中定义各个bean之间的依赖关系. ...
随机推荐
- 关于switch的优化:转移表(完结)
用转移表来代替功能实现中的 switch 语句 1. switch 语句应用场景 在许多场景中会用到条件判断,此时简单的条件判断一般通过 if/else 语句实现:如果涉及三条以上的功能分支一般会通过 ...
- Java 10大优点—Part4—Java内存模型
本文由 ImportNew - 靳禹 翻译自 zeroturnaround.如需转载本文,请先参见文章末尾处的转载要求. 在忙着参加在爱沙尼亚进行的 TEDx talk 演讲活动以及在比利时举办的一届 ...
- Redis应用—3.在购物车里的应用
大纲 1.社区电商购物车的读多写多场景分析 2.购物车的复杂缓存与异步落库(Sorted Set + Hash -> hPut + zadd) 3.购物车异步落库与完整加入流程(缓存雪崩 + M ...
- aws命令行cli创建VPC网络、公有子网、私有子网、nat网关+EIP
在AWS部署海外节点, 图简单使用web控制台创建VPC和k8s集群出错(k8s), 使用cli命令行工具创建成功 本实例为复盘, 记录aws命令行工具cli创建VPC网络, a区和b区分别创建公有子 ...
- Spark面试题汇总及答案(推荐收藏)
一.面试题 Spark 通常来说,Spark与MapReduce相比,Spark运行效率更高.请说明效率更高来源于Spark内置的哪些机制? hadoop和spark使用场景? spark如何保证宕机 ...
- https://eggjs.org/zh-cn/basics/env.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E7%8E%AF%E5%A2%83
转载:https://eggjs.org/zh-cn/basics/env.html#自定义环境 运行环境 一个 Web 应用本身应该是无状态的,并拥有根据运行环境设置自身的能力. 指定运行环境 框架 ...
- Web前端常见的英文缩写
PV (Page View)页面浏览量 FED(Front-End Development)前端开发 F2E(Front-End Engineer)前端工程师 WWW(World Wide Web)万 ...
- PHP API接口数据简单快速的加密解密
php7.0版本以上不支持mcrypt_encryp函数进行加密的代码,加密方式改为openssl_encrypt 用自己私人的服务器来测试吧,99买阿里云 openssl_系列支持php5.3以上版 ...
- 百度公共IM系统的Andriod端IM SDK组件架构设计与技术实现
本文由百度技术团队分享,引用自百度Geek说,原题"百度Android IM SDK组件能力建设及应用",本文进行了排版和内容优化. 1.引言 移动互联网时代,随着社交媒体.移动支 ...
- 闲话即时通讯:腾讯的成长史本质就是一部QQ成长史
1.前言 在猴年新春的时候,腾讯当时推出了新春广告片(点击观看视频),作为<弹指间 心无间>的延续.片中通过春节期间发送QQ红包让家人打车回家团聚,让我们感受到了"最温暖的红包, ...