A. 容器docker的作用是什么 这四个好处你知道几个
1、作用:提到容器技术,我们就不可避免的会想到docker。Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中。在用Docker的情况下,大家可以直接把项目发布在DocKer容器上面进行测试,当项目需要正式上线的时候,直接可以把做好的DocKer 镜像部署上去就行了,如果测试的好,就不必担心项目上正式版本的时候再出现什么问题。
2、好处:
(1)轻量、消耗少:使用Docker能合并多个服务以降低费用,不多的操作系统内存占用,跨实例共享多个空闲的内存,这些技术让Docker能以更加紧密的资源提供更有效的服务合并。基于LXC轻量级特点,启动快,而且docker能够只加载每个container变化的部分,这样资源占用小,在单机环境下与KVM之类的虚拟化方案相比,能够更加快速和占用更少资源。
(2)高利用率与隔离:容器服务没有管理程序的额外开销,与底层共享操作系统,性能更加优良,系统负载更低,在同等条件下可以运行更多的实例,充分利用系统资源。同时,容器拥有不错的资源隔离与限制能力,可以精确地对应用分配CPU、内存等资源,保证了应用间不会相互影响。
(3)快速部署与微服务:Docker通过创建流程的容器,不必重新启动操作系统,几秒内能关闭,你可以在数据中心创建或销毁资源,不用担心额外消耗。Docker 提供轻量的虚拟化,你能够从Docker获得一个额外抽象层,能够在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用。
(4)标准化环境和控制:基于容器提供的环境一致性和标准化,你可以使用Gt等工具对容器镜像进行版本控制。相比基于代码的版本控制来说,还能够对整个应用运行环境实现版本控制,一旦出现故障可以快速回滚。相比虚拟机镜像,容器压缩和备份速度更快,镜像启动也像启动一个普通进程一样快速。
B. 如何使用OpenStack,Docker和Spark打造一个云服务
蘑菇街基于 OpenStack 和 Docker 的私有云实践
本次主要想分享一下过去一年时间里,我们在建设基于Docker的私有云实践过程中,曾经遇到过的问题,如何解决的经验,还有我们的体会和思考,与大家共勉。
在生产环境中使用Docker有一些经历和经验。私有云项目是2014年圣诞节期间上线的,从无到有,经过了半年多的发展,经历了3次大促,已经逐渐形成了一定的规模。
架构
集群管理
大家知道,Docker自身的集群管理能力在当时条件下还很不成熟,因此我们没有选择刚出现的 Swarm,而是用了业界最成熟的OpenStack,这样能同时管理Docker和KVM。我们把Docker当成虚拟机来跑,是为了能满足业务上对虚拟化的需求。今后的思路是微服务化,把应用进行拆分,变成一个个微服务,实现PaaS基于应用的部署和发布。
通过OpenStack如何管理Docker?我们采用的是OpenStack+nova-docker+Docker的架构模式。nova- docker是StackForge上一个开源项目,它做为nova的一个插件,通过调用Docker的RESTful接口来控制容器的启停等动作。
我们在IaaS基础上自研了编排调度等组件,支持应用的弹性伸缩、灰度升级等功能,并支持一定的调度策略,从而实现了PaaS层的主要功能。
同时,基于Docker和Jenkins实现了持续集成(CI)。Git中的项目如果发生了git push等动作,便会触发Jenkins Job进行自动构建,如果构建成功便会生成Docker Image并push到镜像仓库。基于CI生成的Docker Image,可以通过PaaS的API或界面,进行开发测试环境的实例更新,并最终进行生产环境的实例更新,从而实现持续集成和持续交付。
网络和存储
网络方面,我们没有采用Docker默认提供的NAT网络模式,NAT会造成一定的性能损失。通过OpenStack,我们支持Linux bridge和Open vSwitch,不需要启动iptables,Docker的性能接近物理机的95%。
容器的监控
监控方面,我们自研了container tools,实现了容器load值的计算,替换了原有的top、free、iostat、uptime等命令。这样业务方在容器内使用常用命令时看到的是容器的值,而不是整个物理机的。目前我们正在移植Lxcfs到我们的平台上。
我们还在宿主机上增加了多个阈值监控和报警,比如关键进程监控、日志监控、实时pid数量、网络连接跟踪数、容器oom报警等等。
冗灾和隔离性
冗灾和隔离性方面,我们做了大量的冗灾预案和技术准备。我们能够在不启动docker daemon的情况下,离线恢复Docker中的数据。同时,我们支持Docker的跨物理机冷迁移,支持动态的CPU扩容/缩容,网络IO磁盘IO的限速。
遇到的问题及解决方法
接近一年不到的产品化和实际使用中我们遇到过各种的问题,使用Docker的过程也是不断优化Docker、不断定位问题、解决问题的过程。
我们现在的生产环境用的是CentOS 6.5。曾经有个业务方误以为他用的Docker容器是物理机,在Docker容器里面又装了一个Docker,瞬间导致内核crash,影响了同一台物理机的其他Docker容器。
经过事后分析是2.6.32-431版本的内核对network namespace支持不好引起的,在Docker内创建bridge会导致内核crash。upstream修复了这个bug,从2.6.32-431升级到2.6.32-504后问题解决。
还有一个用户写的程序有bug,创建的线程没有及时回收,容器中产生了大量的线程,最后在宿主机上都无法执行命令或者ssh登陆,报的错是"bash: fork: Cannot allocate memory",但通过free看空闲的内存却是足够的。
经过分析,发现是内核对pid的隔离性支持不完善,pid_max(/proc/sys/kernel/pid_max)是全局共享的。当一个容器中的pid数目达到上限32768,会导致宿主机和其他容器无法创建新的进程。最新的4.3-rc1才支持对每个容器进行pid_max限制。
我们还观察到docker的宿主机内核日志中会产生乱序的问题。经过分析后发现是由于内核中只有一个log_buf缓冲区,所有printk打印的日志先放到这个缓冲区中,docker host以及container上的rsyslogd都会通过syslog从kernel的log_buf缓冲区中取日志,导致日志混乱。通过修改 container里的rsyslog配置,只让宿主机去读kernel日志,就能解决这个问题。
除此之外,我们还解决了device mapper的dm-thin discard导致内核crash等问题。
体会和思考
最后分享一下我们的体会和思考,相比KVM比较成熟的虚拟化技术,容器目前还有很多不完善的地方,除了集群管理、网络和存储,最重要的还是稳定性。影响稳定性的主要还是隔离性的不完善造成的,一个容器内引起的问题可能会影响整个系统。
容器的memcg无法回收slab cache,也不对dirty cache量进行限制,更容易发生OOM问题。还有,procfs上的一些文件接口还无法做到per-container,比如pid_max。
另外一点是对容器下的运维手段和运维经验的冲击。有些系统维护工具,比如ss,free,df等在容器中无法使用了,或者使用的结果跟物理机不一致,因为系统维护工具一般都会访问procfs下的文件,而这些工具或是需要改造,或是需要进行适配。
虽然容器还不完善,但是我们还是十分坚定的看好容器未来的发展。Kubernetes、Mesos、Hyper、CRIU、runC等容器相关的开源软件,都是我们关注的重点。
Q&A
Q:请问容器间的负载均衡是如何做的?
A: 容器间的负载均衡,更多是PaaS和SaaS层面的。我们的P层支持4层和7层的动态路由,通过域名的方式,或者名字服务来暴露出对外的接口。我们能够做到基于容器的灰度升级,和弹性伸缩。
Q:请问你们的OpenStack是运行在CentOS 6.5上的吗?
A: 是的,但是我们针对OpenStack和Docker依赖的包进行了升级。我们维护了内部的yum源。
Q:请问容器IP是静态编排还是动态获取的?
A: 这个跟运维所管理的网络模式有关,我们内部的网络没有DHCP服务,因此对于IaaS层,容器的IP是静态分配的。对于PaaS层来说,如果有DHCP服务,容器的App所暴露出来IP和端口就可以做到动态的。
Q:请问你们当时部署的时候有没有尝试过用Ubuntu,有没有研究过两个系统间的区别,另外请问你们在OpenStack上是怎样对这些虚拟机监控的?
A: 我们没有尝试过Ubuntu,因为公司生产环境上用的是CentOS。我们的中间件团队负责公司机器的监控,我们和监控团队配合,将监控的agent程序部署到宿主机和每个容器里,这样就可以当成虚拟机来进行监控。
当然,容器的数据是需要从cgroups里来取,这部分提取数据的工作,是我们来实现的。
Q:容器间的网络选型有什么建议,据说采用虚拟网卡比物理网卡有不小的性能损失,Docker自带的weaves和ovs能胜任吗?
A: 容器的网络不建议用默认的NAT方式,因为NAT会造成一定的性能损失。之前我的分享中提到过,不需要启动iptables,Docker的性能接近物理机的95%。Docker的weaves底层应该还是采用了网桥或者Open vSwitch。建议可以看一下nova-docker的源码,这样会比较容易理解。
Q:静态IP通过LXC实现的吗?
A: 静态IP的实现是在nova-docker的novadocker/virt/docker/vifs.py中实现的。实现的原理就是通过ip命令添加 veth pair,然后用ip link set/ip netns exec等一系列命令来实现的,设置的原理和weaves类似。
Q:容器内的进程gdb你们怎么弄的,把gdb打包到容器内吗?
A: 容器内的gdb不会有问题的,可以直接yum install gdb。
Q:共享存储能直接mount到容器里吗?
A: 虽然没试过,但这个通过docker -v的方式应该没什么问题。
Q:不启动Docker Daemon的情况下,离线恢复Docker中的数据是咋做到的?
A: 离线恢复的原理是用dmsetup create命令创建一个临时的dm设备,映射到Docker实例所用的dm设备号,通过mount这个临时设备,就可以恢复出原来的数据。
Q:Docker的跨物理机冷迁移,支持动态的CPU扩容/缩容,网络IO磁盘IO的限速,是怎么实现的,能具体说说吗?
A:Docker的冷迁移是通过修改nova-docker,来实现OpenStack迁移的接口,具体来说,就是在两台物理机间通过docker commit,docker push到内部的registry,然后docker pull snapshot来完成的。
动态的CPU扩容/缩容,网络IO磁盘IO的限速主要是通过novadocker来修改cgroups中的cpuset、iops、bps还有TC的参数来实现的。
Q:请问你们未来会不会考虑使用Magnum项目,还是会选择Swarm?
A:这些都是我们备选的方案,可能会考虑Swarm。因为Magnum底层还是调用了Kubernetes这样的集群管理方案,与其用Magnum,不如直接选择Swarm或者是Kubernetes。当然,这只是我个人的看法。
Q:你们的业务是基于同一个镜像么,如果是不同的镜像,那么计算节点如何保证容器能够快速启动?
A:运维会维护一套统一的基础镜像。其他业务的镜像会基于这个镜像来制作。我们在初始化计算节点的时候就会通过docker pull把基础镜像拉到本地,这也是很多公司通用的做法,据我了解,腾讯、360都是类似的做法。
Q:做热迁移,有没有考虑继续使用传统共享存储的来做?
A: 分布式存储和共享存储都在考虑范围内,我们下一步,就计划做容器的热迁移。
Q:请问你们是直接将公网IP绑定到容器吗,还是通过其他方式映射到容器的私有IP,如果是映射如何解决原本二层的VLAN隔离?
A:因为我们是私有云,不涉及floating ip的问题,所以你可以认为是公网IP。VLAN的二层隔离完全可以在交换机上作。我们用Open vSwitch划分不同的VLAN,就实现了Docker容器和物理机的网络隔离。
Q:Device mapper dm-thin discard问题能说的详细些吗?
A:4月份的时候,有两台宿主机经常无故重启。首先想到的是查看/var/log/messages日志,但是在重启时间点附近没有找到与重启相关的信息。而后在/var/crash目录下,找到了内核crash的日志vmcore-dmesg.txt。日志的生成时间与宿主机重启时间一致,可以说明宿主机是发生了kernel crash然后导致的自动重启。“kernel BUG at drivers/md/persistent-data/dm-btree-remove.c:181!”。 从堆栈可以看出在做dm-thin的discard操作(process prepared discard),虽然不知道引起bug的根本原因,但是直接原因是discard操作引发的,可以关闭discard support来规避。
我们将所有的宿主机配置都禁用discard功能后,再没有出现过同样的问题。
在今年CNUTCon的大会上,腾讯和大众点评在分享他们使用Docker的时候也提到了这个crash,他们的解决方法和我们完全一样。
Q:阈值监控和告警那块,有高中低多种级别的告警吗,如果当前出现低级告警,是否会采取一些限制用户接入或者砍掉当前用户正在使用的业务,还是任由事态发展?
A:告警这块,运维有专门的PE负责线上业务的稳定性。当出现告警时,业务方和PE会同时收到告警信息。如果是影响单个虚拟机的,PE会告知业务方,如果严重的,甚至可以及时下掉业务。我们会和PE合作,让业务方及时将业务迁移走。
Q:你们自研的container tools有没有开源,GitHub上有没有你们的代码,如何还没开源,后期有望开源吗,关于监控容器的细粒度,你们是如何考虑的?
A:虽然我们目前还没有开源,单我觉得开源出来的是完全没问题的,请大家等我们的好消息。关于监控容器的细粒度,主要想法是在宿主机层面来监控容器的健康状态,而容器内部的监控,是由业务方来做的。
Q:请问容器的layer有关心过层数么,底层的文件系统是ext4么,有优化策略么?
A:当然有关心,我们通过合并镜像层次来优化docker pull镜像的时间。在docker pull时,每一层校验的耗时很长,通过减小层数,不仅大小变小,docker pull时间也大幅缩短。
Q:容器的memcg无法回收slab cache,也不对dirty cache量进行限制,更容易发生OOM问题。----这个缓存问题你们是怎么处理的?
A:我们根据实际的经验值,把一部分的cache当做used内存来计算,尽量逼近真实的使用值。另外针对容器,内存报警阈值适当调低。同时添加容器OOM的告警。如果升级到CentOS 7,还可以配置kmem.limit_in_bytes来做一定的限制。
Q:能详细介绍下你们容器网络的隔离?
A:访问隔离,目前二层隔离我们主要用VLAN,后面也会考虑VXLAN做隔离。 网络流控,我们是就是使用OVS自带的基于port的QoS,底层用的还是TC,后面还会考虑基于flow的流控。
Q:请问你们这一套都是用的CentOS 6.5吗,这样技术的实现。是运维还是开发参与的多?
A:生产环境上稳定性是第一位的。CentOS 6.5主要是运维负责全公司的统一维护。我们会给运维在大版本升级时提建议。同时做好虚拟化本身的稳定性工作。
Q:请问容器和容器直接是怎么通信的?网络怎么设置?
A:你是指同一台物理机上的吗?我们目前还是通过IP方式来进行通信。具体的网络可以采用网桥模式,或者VLAN模式。我们用Open vSwitch支持VLAN模式,可以做到容器间的隔离或者通信。
Q:你们是使用nova-api的方式集成Dcoker吗,Docker的高级特性是否可以使用,如docker-api,另外为什么不使用Heat集成Docker?
A:我们是用nova-docker这个开源软件实现的,nova-docker是StackForge上一个开源项目,它做为nova的一个插件,替换了已有的libvirt,通过调用Docker的RESTful接口来控制容器的启停等动作。
使用Heat还是NOVA来集成Docker业界确实一直存在争议的,我们更多的是考虑我们自身想解决的问题。Heat本身依赖的关系较为复杂,其实业界用的也并不多,否则社区就不会推出Magnum了。
Q:目前你们有没有容器跨DC的实践或类似的方向?
A:我们已经在多个机房部署了多套集群,每个机房有一套独立的集群,在此之上,我们开发了自己的管理平台,能够实现对多集群的统一管理。同时,我们搭建了Docker Registry V1,内部准备升级到Docker Registry V2,能够实现Docker镜像的跨DC mirror功能。
Q:我现在也在推进Docker的持续集成与集群管理,但发现容器多了管理也是个问题,比如容器的弹性管理与资源监控,Kubernetes、Mesos哪个比较好一些,如果用在业务上,那对外的域名解析如何做呢,因为都是通过宿主机来通信,而它只有一个对外IP?
A: 对于Kubernetes和Mesos我们还在预研阶段,我们目前的P层调度是自研的,我们是通过etcd来维护实例的状态,端口等信息。对于7层的可以通过Nginx来解析,对于4层,需要依赖于naming服务。我们内部有自研的naming服务,因此我们可以解决这些问题。对外虽然只有一个IP,但是暴露的端口是不同的。
Q:你们有考虑使用Hyper Hypernetes吗? 实现容器与宿主机内核隔离同时保证启动速度?
A:Hyper我们一直在关注,Hyper是个很不错的想法,未来也不排除会使用Hyper。其实我们最希望Hyper实现的是热迁移,这是目前Docker还做不到的。
Q:你们宿主机一般用的什么配置?独立主机还是云服务器?
A:我们有自己的机房,用的是独立的服务器,物理机。
Q:容器跨host通信使用哪一种解决方案?
A: 容器跨host就必须使用3层来通信,也就是IP,容器可以有独立的IP,或者宿主机IP+端口映射的方式来实现。我们目前用的比较多的还是独立ip的方式,易于管理。
Q:感觉贵公司对Docker的使用比较像虚拟机,为什么不直接考虑从容器的角度来使用,是历史原因么?
A:我们首先考虑的是用户的接受程度和改造的成本。从用户的角度来说,他并不关心业务是跑在容器里,还是虚拟机里,他更关心的是应用的部署效率,对应用本身的稳定性和性能的影响。从容器的角度,一些业务方已有的应用可能需要比较大的改造。比如日志系统,全链路监控等等。当然,最主要的是对已有运维系统的冲击会比较大。容器的管理对运维来说是个挑战,运维的接受是需要一个过程的。
当然,把Docker当成容器来封装应用,来实现PaaS的部署和动态调度,这是我们的目标,事实上我们也在往这个方向努力。这个也需要业务方把应用进行拆分,实现微服务化,这个需要一个过程。
Q:其实我们也想用容器当虚拟机使用。你们用虚拟机跑什么中间件?我们想解决测试关键对大量相对独立环境WebLogic的矛盾?
A:我们跑的业务有很多,从前台的主站Web,到后端的中间件服务。我们的中间件服务是另外团队自研的产品,实现前后台业务逻辑的分离。
Q:贵公司用OpenStack同时管理Docker和KVM是否有自己开发Web配置界面,还是单纯用API管理?
A:我们有自研的Web管理平台,我们希望通过一个平台管理多个集群,并且对接运维、日志、监控等系统,对外暴露统一的API接口。
Q:上面分享的一个案例中,关于2.6内核namespace的bug,这个低版本的内核可以安装Docker环境吗,Docker目前对procfs的隔离还不完善,你们开发的container tools是基于应用层的还是需要修改内核?
A:安装和使用应该没问题,但如果上生产环境,是需要全面的考虑的,主要还是稳定性和隔离性不够,低版本的内核更容易造成系统 crash或者各种严重的问题,有些其实不是bug,而是功能不完善,比如容器内创建网桥会导致crash,就是network namespace内核支持不完善引起的。
我们开发的container tools是基于应用的,不需要修改内核。
Q:关于冗灾方面有没有更详细的介绍,比如离线状态如何实现数据恢复的?
A:离线状态如何实现恢复数据,这个我在之前已经回答过了,具体来说,是用dmsetup create命令创建一个临时的dm设备,映射到docker实例所用的dm设备号,通过mount这个临时设备,就可以恢复出原来的数据。其他的冗灾方案,因为内容比较多,可以再另外组织一次分享了。你可以关注一下http://mogu.io/,到时候我们会分享出来。
Q:贵公司目前线上容器化的系统,无状态为主还是有状态为主,在场景选择上有什么考虑或难点?
A:互联网公司的应用主要是以无状态的为主。有状态的业务其实从业务层面也可以改造成部分有状态,或者完全不状态的应用。不太明白你说的场景选择,但我们尽量满足业务方的各种需求。
对于一些本身对稳定性要求很高,或对时延IO特别敏感,比如redis业务,无法做到完全隔离或者无状态的,我们不建议他们用容器。
多进程好还是多线程好等等,并不是说因为Spark很火就一定要使用它。在遇到这些问题的时候、图计算,目前我们还在继续这方面的工作:作为当前流行的大数据处理技术? 陈,它能快速创建一个Spark集群供大家使用,我们使用OpenStack? 陈。 问,Hadoop软硬件协同优化,在OpenPOWER架构的服务器上做Spark的性能分析与优化:您在本次演讲中将分享哪些话题。 问。多参与Spark社区的讨论。曾在《程序员》杂志分享过多篇分布式计算、Docker和Spark打造SuperVessel大数据公有云”,给upstrEAM贡献代码都是很好的切入方式、SQL,并拥有八项大数据领域的技术专利,MapRece性能分析与调优工具。例如还有很多公司在用Impala做数据分析:企业想要拥抱Spark技术,对Swift对象存储的性能优化等等。例如与Docker Container更好的集成,大数据云方向的技术负责人,Spark还是有很多工作可以做的?企业如果想快速应用Spark 应该如何去做,具体的技术选型应该根据自己的业务场景,Docker Container因为在提升云的资源利用率和生产效率方面的优势而备受瞩目,高性能FPGA加速器在大数据平台上应用等项目,再去调整相关的参数去优化这些性能瓶颈,一些公司在用Storm和Samaza做流计算: 相比于MapRece在性能上得到了很大提升?
C. 坚持开源开放 青云科技KubeSphere容器生态显现
2018年,青云 科技 孵化并开源KubeSphere容器平台,而经过三年多的时间,KubeSphere已成为CNCF(云原生计算基金会)官方认证的开源容器云平台,国内唯一的K8s发行版,在用户数已超过1万。
KubeSphere不断迭代,赢得了市场的认可,帮助企业节约成本,提高效率,最大限度把一个技术平滑地传递到企业里的各个部门,屏蔽了K8s碎片化。
于爽认为,KubeSphere的成功可以归纳为三个原因:
产品维度,将KubeSphere打造成面向企业级最终用户的产品,在产品设计、体验等方面精雕细琢。例如KubeSphere 3.1.0版本开发了多项主功能——边缘节点管理、计量计费等,而在9月底的KubeSphere 3.2.0里会支持GPU的工作负载和调度,包括监控、日志等。在2021年底的KubeSphere 4.0.0会采用前后端可插拔架构,给基于云原生标准的客户提供一整套辅助工具,让客户可以把自己的业务无缝嵌入到KubeSphere的管理体系中。
此外,青云 科技 也在打造新一代的信创云原生基础设施,基于国产芯片实现“一云多芯”,帮助客户完成信创的落地。同时,青云 科技 也发布了KubeSphere KF3000容器一体机。
开源,KubeSphere从一开始就是走全球开源的路线,得到了大量社区用户的拥趸,社区用户就像是一个大的漏斗,最终会产生优质的商业客户。借助商业客户付费,社区可以提供更高质量的服务,这是相辅相成的,是良性循环。
目前,KubeSphere在开源社区中独立IP下载已经接近2万,行业覆盖银行、保险、在线教育、制造业、物流、交通等。其中便包含了微众银行、中通物流、津燃华润、中移金科、新浪、本来生活、绿米Aqara、米文动力、红亚 科技 、遥望网络等众多行业企业。
KubeSphere站在开源项目的角度进行思考,把文档、设计理念无限开放给社区用户,耐心地与用户沟通,了解需求。中通物流、红亚 科技 等企业在社区贡献方面可圈可点。
合作伙伴,KubeSphere产品的开放性,吸引更多的合作伙伴加入到生态中,例如AWS QuickStart(AWS展现合作伙伴能力的平台)上架了KubeSphere,跟其自身的EKS服务整合打包成一个解决方案。得到AWS的认可,说明KubeSphere产品本身,包括社区、市场、全球知名度做得相对比较好。
目前,KubeSphere已经完成生态家族的演进,包括KSV虚拟机管理、Porter硬负载均衡、OpenPitrix跨平台云原生应用管理、KubeEye集群巡检、KubeKey交付引擎、OpenFunction FaaS框架、KubeOcean轻量化集群管理等,支撑整个KubeSphere的生态。
D. 容器云技术的优势是什么
容器包含了应用和所需的依赖,但不需要独占资源,没有一个虚拟系统,而是和宿主机共享硬件资源和操作系统,和其他容器共享内核,从而实现资源的动态分配。多个容器在同一个宿主机操作系统中的用户空间以独立的进程运行。因此,容器相比虚拟机要轻量许多,在一个主机上可以同时启动近百个容器,一个应用要在数量上横向扩展非常便捷,而虚拟机则几乎不可能启动同样多的数量。对于重启操作,容器近似于重启一个进程,而虚拟机则相当于重启操作系统。
用很火的集装箱比喻形容就是,“货物”(应用)在“汽车”,“火车”,“轮船”(私有云、公有云等服务)之间迁移交换时,只需要迁移符合标准规格和装卸方式的“集装箱”(docker container),削减了耗时费力的人工“装卸”(上线、下线应用),带来的是巨大的时间人力成本节约,这使未来仅有少数几个运维人员运维超大规模装载线上应用的容器集群成本可能。
看到这里,有没有觉得非常眼熟?近几年大热的物联网平台,宣传的不也就是这些点吗?
物联网平台商往往会这么告诉你:在我们的平台上提供了多种多样的开发工具,你可以使用拖拽式的手法开发程序,完全不用操心底层的操作系统和所依赖的环境,只需专注于客户的需求和应用程序本身。。.。。.
就像OpenStack、Cloudstack这样的技术是解决IaaS层的问题,容器技术的诞生其实主要解决了PaaS层的技术实现。
现在最常用的开源云平台架构Kubernetes、Cloud Foundary还是Serverless,其背后驱动都是容器技术。而市面上多达上百家的物联网平台,几乎都是PaaS平台。
E. 华为拥抱OpenStack、力推企业云
华为要做公有云?
2015年4~5月间,华为要做公有云的传闻令国内的云厂商颇为惊讶,消息一度令媒体兴奋了好一阵时间。7月30日,华为在北京正式对外宣布其云服务战略,只不过“公有云”的名字再没有被提及。这是自2010年华为首次发布 云计算 战略以来的另一个重要节点。
在7月30日的发布会上,华为轮值CEO徐直军表示:“云服务正在成为企业IT的新模式,这已经成为产业界的共识。为了满足企业市场客户与合作伙伴在网络时代的新需求,华为决定推出企业云服务,这是华为ICT产品和解决方案的自然延伸。”目前华为在全球已部署了255个云数据中心,云计算虚拟机超过70万个。此外,华为在全球拥有5个云计算研发中心,相关的研发人员超10000人。
9月18日,一年一度的华为云计算大会(HCC2015)在上海世博中心开幕。美国《连线》杂志的Kevin Kelly在主题演讲中表示,云就是未来。他预言,2020年,将有60%的应用运营在云上,全球现有的9000多家云计算公司已经为人类提供了各种各样的产品和服务。
徐直军指出,企业的IT 架构 要云化不是一件容易的事情,需要全生态链的共同努力。公有云显然并不是华为的优先选择,与运营商合作才是最好的方式。华为IT产品线总裁郑叶来则进一步阐述了华为云计算的概念,即虚拟化纪元是Cloud 1.0的特征,以资源为核心则是Cloud 2.0的表现,以及以应用为核心的Cloud 3.0将是未来云计算的趋势。
全面拥抱 OpenStack
在本年度的华为云计算大会(HCC2015)上,华为发布了基于OpenStack的云 操作系统 FusionSphere 6.0,任何基于社区版本的第三方应用无需改动都能运行在FusionSphere上。在笔者看来,FusionSphere 6.0在网络部分对 SDN 技术的集成管理是值得关注的部分。此外,基于OpenStack的跨数据中心云灾备解决方案也一并推出。
华为云计算首席架构师顾炯炯在接受InfoQ采访时表示,目前全球有300多家厂商参与OpenStack贡献,华为从G版本开始参与社区,在最新L版本(受访时)中的综合贡献排名第六,而三年前华为的排名只不过是第二十名。FusionSphere坚持开放原则,即拥抱开源、高于开源、回馈开源。在19日的开源与云应用主题论坛上,顾炯炯详细介绍了华为的公有云架构设计,听众云集以至于笔者未能挤进会场只好站在门外听完顾大师的演讲。顾炯炯在演讲中透露,除了全面拥抱OpenStack,华为FusionSphere还基于开源的Cloud Foundry集成了DevOps技术支持。作为华为三大软件之一,FusionSphere实现了与华为硬件的解耦,并通过了全球300多家主流硬件厂商的兼容验证。
在开源社区版本的基础上,华为FusionSphere系统做了如下产品化增强:
HA framework:解决OpenStack管理进程存在单实例单点故障的问题。支持OpenStack的服务多实例负荷分担方式部署,单个物理服务故障的时候不影响OpenStack功能的使用。
Auto Deployment:数据中心内的所有物理服务器都可以被自动化的安装并纳入云资源池管理。安装服务通过PXE方式将Hypervisor、OpenStack等必须的云平台软件包按照配置部署到对应的物理服务器中。实现整个云平台的快速安装和快速扩容。
Smooth upgrade:提供采用UI界面的升级工具实现全系统的平滑升级。升级过程中通过将虚拟机从被升级节点迁移到其它节点的方式保证虚拟机业务不中断。
Log & Monitor:提供全系统的操作日志记录与性能监控功能。监控全系统的物理服务器性能数据和虚拟机的性能数据。
API proxy:通过API proxy实现OpenStack内部管理网络与外部网络的隔离,提升openStack服务的网络安全性。
Backup:提供全系统的管理数据备份功能。包括OpenStack的所有管理数据的备份和FusionMananger管理数据的备份功能。
除了在OpenStac外围做了产品化增强,华为还在OpenStack和KVM里面针对NFV做了功能增强,如资源调度功能、性能优化、高可用HA。
网络、存储以及容器
网络与存储目前仍然是云计算最赚钱的业务,2015年6月,IDC报告显示华为存储全球收入增长率连续七个季度第一。在今年的华为云计算大会(HCC2015)上,华为联合QLogic基于25Gb以太网技术联合发布了横向扩展文件存储系统。通过收购博通的NS2技术,QLogic在以太网市场的占有率达到了26%之多。华为存储产品线副总裁肖苡在接受媒体采访时认为,未来高端存储介质将走向SSD,海量数据必然会影响企业数据存储的架构,数据中心横向扩展将面临更大的挑战。数据中心建设对以太网技术的要求也从10Gb这个量级提高到100Gb的量级。QLogic亚太区资深首席产品经理陈介颂在演讲中表示,25Gb技术将使带宽和性能提升2.5倍,同时端口成本降低50%,通过线性扩展系统整体带宽可达400GB/s,这对高负载I/O的用户来说是一个令人眼前一亮的提升。此外,采用RoCE协议也大大降低了CPU负载和网络延时。当然,这些高性能需要华为硬件设备的支撑。
华为企业核心网解决方案总经理杨军在接受媒体采访时表示,企业云通信在快速增长,占比将从2015年的20%增长到2019年的50%,市场规模超过200亿元。华为企业云通信支持SaaS和PaaS两个层面的服务,企业可以在公有云或者自己的私有云上部署。作为较早支持NFV的厂商,华为凭借长期以来运营商市场的经验,可以通过定制化解决系统对接、集成和升级等等问题。华为企业BG UC&C MKT与解决方案销售部部长林明则指出,随着互联网服务的边界越来越模糊,未来云通信的发展将基于统一的基础,通信的可靠性、稳定性需求会越来越高,针对横向扩展的问题,目前的SDK是一个过渡方案。华为做的事情总结起来有两点,即向上开放API,向下开放SDK。
当笔者问到对容器技术的支持时,华为云计算首席架构师顾炯炯表示,随着IT业务越来越互联网化,应用弹性问题其实并没有非常好的被解决。华为会考虑将 Docker 与OpenStack相结合,华为有一个开源项目作为Docker调度与编排的引擎,可以实现在基础设施层面对容器管理的自动化。这跟OpenStack基础设施云服务形成一个优势互补整体解决方案。因此,容器与 微服务 将在未来一段时间呈现并存的关系。当笔者追问华为容器云服务的进展时,顾大师表示今年年底华为将发布一个在线 测试 版的容器服务。
F. 什么是 docker 容器技术
Docker是什么?
简单得来说,Docker是一个由GO语言写的程序运行的“容器”(Linux containers, LXCs); 目前云服务的基石是操作系统级别的隔离,在同一台物理服务器上虚拟出多个主机。Docker则实现了一种应用程序级别的隔离; 它改变我们基本的开发、操作单元,由直接操作虚拟主机(VM),转换到操作程序运行的“容器”上来。
Docker是为开发者和系统管理员设计的,用来发布和运行分布式应用程序的一个开放性平台。由两部分组成:
Docker Engine: 一个便携式、轻量级的运行环境和包管理器。(注* 单OS vs 单线程,是不是跟NodeJS特别像?)
Docker Hub: 为创建自动化工作流和分享应用创建的云服务组成。(注* 云端镜像/包管理 vs npm包管理,是不是跟npm特别像?)
从2013年3月20日,第一个版本的Docker正式发布到 2014年6月Docker 1.0 正式发布,经历了15个月。 虽然发展历程很短,但Docker正在有越来越流行的趋势。
其实Container技术并非Docker的创新,HeroKu, NodeJitsu 等云服务商都采用了类似这种轻量级的虚拟化技术,但Docker是第一个将这这种Container技术大规模开源并被社区广泛接受的。
好的部分
Docker相对于VM虚拟机的优势十分明显,那就是轻量和高性能和便捷性, 以下部分摘自:KVM and Docker LXC Benchmarking with OpenStack
快
运行时的性能可以获取极大提升(经典的案例是提升97%)
管理操作(启动,停止,开始,重启等等) 都是以秒或毫秒为单位的。
敏捷
像虚拟机一样敏捷,而且会更便宜,在bare metal(裸机)上布署像点个按钮一样简单。
灵活
将应用和系统“容器化”,不添加额外的操作系统,
轻量
你会拥有足够的“操作系统”,仅需添加或减小镜像即可。在一台服务器上可以布署100~1000个Containers容器。
便宜
开源的,免费的,低成本的。由现代Linux内核支持并驱动。注* 轻量的Container必定可以在一个物理机上开启更多“容器”,注定比VMs要便宜。
生态系统
正在越来越受欢迎,只需要看一看Google的趋势就知道了,docker or LXC.
还有不计其数的社区和第三方应用。
云支持
不计其数的云服务提供创建和管理Linux容器框架。
G. 小程序容器有开源的吗
有。
NAMI——面向前端开发人员的后端逻辑容器。NAMI提供了一个小程序服务端所需所有服务的支持,包括但不仅限于处理request请求、接收和处理websocket、与微信服务端交互并维护access_token、处理微信服务端登录鉴权、发送模板消息、接收微信支付事件,等等。
FinClip——领先的小程序容器平台,混合应用必备SDk。FinClip基于自研、领先的小程序容器技术,让任何企业的APP均获得嵌入该容器而瞬间运行小程序的能力,轻松实现移动应用的动态发布,与业务内容的跨端投放