把容器当作迷你虚拟机使用不是云原生!-阿里云开发者社区

开发者社区> 猫饭先生> 正文

把容器当作迷你虚拟机使用不是云原生!

简介: 本文讲的是把容器当作迷你虚拟机使用不是云原生!【编者的话】云服务和SaaS厂商创造了微服务的概念和“云原生”模型,以便在持续开发和运营过程中实现高效扩展。对于Facebook、Google或eBay这类始终在线的全球服务而言,传统的方法已不适用。
+关注继续查看
本文讲的是把容器当作迷你虚拟机使用不是云原生!【编者的话】云服务和SaaS厂商创造了微服务的概念和“云原生”模型,以便在持续开发和运营过程中实现高效扩展。对于Facebook、Google或eBay这类始终在线的全球服务而言,传统的方法已不适用。容器与Docker作为此类微服务的终极打包工具应运而生,而KubernetesDocker SwarmDC/OS这类新的编排平台则负责其部署、调度及生命周期的处理。Serverless及FaaS基本上就是这个模型更加自动化的一种演进。

【深入浅出学习 etcd】etcd为分布式系统提供可靠、高效的配置管理服务,在Docker、Kubernetes、Mesos等平台中扮演了越来越重要的角色。作为2013年开始的项目,它还很年轻,官方文档中缺乏实现上全面、系统的介绍,本课程深入浅出地介绍了etcd的实现,并为运维和二次开发提供了系统的指导和建议。

云原生意味着什么

我们希望交付的是随着时间推移而演进或扩展的弹性应用。实现的方式是将应用打散成多个层级(微服务),每一层都具有自己的弹性扩展能力,然后通过可靠的消息在这些微服务之间进行通信。

如果我们希望能动态地进行扩展、处理故障或修改版本,微服务就不能是有状态的。与传统应用不同,微服务使用的是不可变镜像,并将配置、日志、状态及数据储存在弹性云数据服务(对象、NoSQL/NewSQL、日志/消息流)中。

云数据服务通常是将一组商用服务器(具有本地磁盘)集群起来构建而成。我们要么使用预集成的云提供商数据服务,要么使用开源或商业软件来运行自己的数据服务。

开发人员和企业主立即就能感受到云原生方式的益处:这让他们可以使用一个敏捷的、持续的方法更快地进行应用开发,同时其弹性扩展可满足需求的波动。

为什么容器不是虚拟机

传统基础设施团队与厂商和云用户与提供商的想法不同。他们依然以虚拟机、虚拟网卡和虚拟磁盘(虚拟基础设施,即“私有云”)来看待这个世界,并试图让容器兼容现有的做法。这意味着他们将重心放在重构遗留的或单体的应用,以便其运行于容器中,从中获得的打包自动化好处最少,敏捷、弹性及CI/CD不在其列。他们也可能将那些应用保留在虚拟机中,并将其遗忘。

上周在奥斯汀举行的DockerCon上,我看到一些厂商试图让容器像VMware或OpenStack那样工作。最极端的例子是将SAN或超聚合块存储作为“容器问题”的解决方案。其间,我与三个主要存储厂商的交流大致如此:

我:你们的产品能为容器做什么?

他们:我们负责编排容器块存储卷的创建、配备文件系统、快照、去重等等。

我:但是我为什么需要这个,Docker提供了一个(不可变的、去重的)镜像文件系统,并且持久化数据是可选的,期望的是文件或数据库抽象层(不是虚拟磁盘)吧?

他们:哦,这就是为什么我们复杂的自动化系统要分配并配备块空间、在磁盘卷上创建一个(具有固定容量的)文件系统并将其附加到容器中。

我:但是磁盘卷无法在微服务之间共享(对于弹性而言这是非常基本的),而我希望容器是弹性的而非固定的。我可以使用一个共享文件系统,为什么还要让自己陷入一堆配置磁盘容量和格式化文件系统的麻烦中?难道我不能将共享文件系统挂载到容器中?

他们:是的,正确的解决方案是使用一个集群的/共享的文件系统或对象,不过对我们来说开发过于困难,我们还无法提供。可能未来会有。对NoSQL数据库这类持久化系统,我们确实能提供价值。

我:没错。难道我不能使用CassandraMongoDBElasticsearch自己的方案?它们全都在应用级别上进行分布和复制。它们内置了版本(快照)功能,当然,因为它是分布式的,所以我们无法在存储中一致地创建其快照。我还注意到它们提供了压缩技术,实际上更适用于短期(本地)存储。

他们:哦,这点我们不清楚。当我们与IT人员(不是开发人员)讨论时,我们听到的是他们想将遗留应用和数据库运行在容器中,就像运行虚拟机一样!

……这凸显了围绕容器与现代云技术的混乱状态——开发人员与基础设施团队之间仍然存在着巨大的信息鸿沟。

多走一步,把重点放在云原生上

那么,要如何构建云原生?不要被各种宣传所迷惑,多做思考。有两种方式来解决这个问题:

如果你寻求的最快上线的方法,而不担心性能、技术锁定或长期预算,又或者你的公司比较小,可以使用一个公有云及其原生服务。使用一个容器编排系统,最好是开源的,比如Kubernetes。使用弹性云原生对象存储、数据库及消息系统,将精力放在无状态应用上。你甚至可以使用“serverless”来免除编排和CI/CD工具。

或者,如果你的公司足够大,又或者你关心性能和数据局部性,可以像云提供商而非传统应用那样进行构建。构建基准云原生服务,包括对象存储、日志、监控、身份管理、配置管理、消息、编排等等。使用开源工具或更健壮的商业产品。需要注意的是,为了保证效率和健壮性,对象存储、数据库或集群文件系统这类数据服务最好像公有云那样使用专有服务器,它们具备更高的磁盘或闪存性能。

创建类似公有云的服务之后即可添加无状态应用程序及应用程序生命周期管理工具,它们将通过服务绑定(比如URL和证书)挂接到基础设施服务中。

原文链接:Using Containers As Mini-VMs is NOT Cloud-Native!(翻译:梁晓勇

原文发布时间为:2017-05-23

本文作者:梁晓勇

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:把容器当作迷你虚拟机使用不是云原生!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
云原生必备知识: 容器数据卷
是一个可供一个或多个容器使用的特殊目录。 可以达到以下目的: 1.绕过“拷贝写”系统,以达到本地磁盘 IO 的性能,(比如运行一个容器,在容器中对数据卷修改内容,会直接改变宿主机上的数据卷中的内容,所以是本地磁盘IO的性能,而不是先在容器中写一份,最后还要将容器中的修改的内容拷贝出来进行同步。) 2.绕过“拷贝写”系统,有些文件不需要在 docker commit 打包进镜像文件。 3.在多个容器间共享目录。 4.在宿主和容器间共享目录。 5.在宿主和容器间共享一个文件。
146 0
云原生必备知识: 容器设计模式
即容器中的设计模式,包含迭代器模式和适配器模式。迭代器模式即提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。适配器模式及即适配器模式是23种中设计模式之一,它的主要作用是在新接口和老接口之间进行适配。它非常像我们出国旅行时带的电源转换器,我们国家的电器使用普通的扁平两项或三项插头,而去外国的话,使用的标准就不一样了,比如德国,使用的是德国标准,是两项圆头的插头。如果去德国旅游,那么我们使用的手机充电器插头无法插到德国的插排中去,那就意味着我们无法给手机充电。怎样解决这个问题呢?只要使用一个电源转化器就行了。
216 0
云原生必备知识: 容器镜像
容器运行时所需要的所有的文件集合称之为容器镜像。
236 0
企业使用 SAP Ariba 到底能得到什么?
本文讲的是 :企业使用 SAP Ariba 到底能得到什么?,如果在采购环节成本能够削减1%,就意味着整个企业的利润能够提升10%。企业使用SAP Ariba可节省1%到8%范围的成本,采购部门工作效率提高20%。”---SAP Ariba全球总裁安睿山
2322 0
如何将Weblogic从虚拟机迁移到容器
本文讲的是如何将Weblogic从虚拟机迁移到容器【编者的话】本文描述了传统Web服务器WebLogic从VM迁移至Docker原因,以及运行在Docker上的优点,并给出了迁移部署的思路。
2056 0
云原生必备知识:容器
容器,是一个视图隔离、资源可限制、独立文件系统的进程集合,它将系统的其他资源隔离开来,具有自己独立的资源视图。“视图隔离”,指的是能够看到部分进程、有独立的主机名,“资源可限制”,指的是可以限制内存大小、CPU 使用个数等。
380 0
lambda匿名函数使用
#!/usr/bin/pythonfun=lambda x:x*x-xprint fun(3)
435 0
+关注
350
文章
1300
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载