细数阿里云在使用 Docker 过程中踩过的那些坑

昨天下午道哥在微信上丢给我一条新闻,看看,我们阿里云支持 Docker 企业版了。我打开一看,果然,阿里云发布了飞天敏捷版,开始支持企业级的 Docker 容器。

美国中部时间4月19日,阿里云在容器技术大会 DockerCon 2017上正式推出了 Apsara Stack Agility,也就是飞天的敏捷版。Docker 公司首席执行官 Ben Golub 在大会上宣布了 Apsara Stack Agility 的正式发布,这也是国内第一个支持 Docker 官方企业版(Enterprise Edition,EE)的容器类产品,可以部署在企业自有数据中心环境内,特别适用于企业专有云及混合云场景。

Ben 在演讲中表示,阿里巴巴电商平台已经全面容器化,能够部署和管控超过几十万容器规模,在双11狂欢节稳定支撑了每秒175000次的订单交易。阿里云不但是 Docker 的首家业务合作伙伴,同时也在为 Docker 带来大规模容器应用的实践经验。深受开发人员喜爱的 Docker Hub 服务将于近期在国内推出。

Docker 及其创始人有着一个峰回路转的故事。Docker 是一种容器技术,但是容器技术由来已久,比如 Linux Containers,历史悠久,爷爷辈的技术,但是真正让容器进入人们视野的,是 Docker。



2010年,几个年轻人在旧金山成立了一家做 PaaS 平台的公司,起名为「dotCloud」。dotCloud 主要是基于 PaaS 平台为开发者或开发商提供技术服务。什么是 PaaS 呢?PaaS 的全称是 Platform as a Service,也就是平台即服务,无论你选择什么技术栈,PaaS 都会为你提供相关的配套设置,包括语言环境、运行环境、存储和各种基础服务。

dotCloud 花费了大量时间把手工工作和重复劳动抽象成组件和服务,并放到了云端,另外,它还提供了各种监控、告警和控制功能,方便开发者管理和监控自己的产品。PaaS 的概念虽好,但是由于认知、理念和技术的局限性,早期市场的接受度并不高,规模也不够大。虽然 dotCloud 在2011年初拿到了1000万美元的融资,但依然举步维艰。

在这种情况下,dotCloud 的创始人 Solomon Hykes 做了一件漫不经心的小事,他把 dotCloud 的核心容器引擎开源了。这个基于 Linux Container 技术的核心管理引擎一经开源立刻得到了「业界」的热烈追捧,容器管理引擎大大降低了容器技术的使用门槛,轻量级虚拟化,可移植,语言无关,写了程序扔上去做成镜像可以随处部署和运行,开发、测试和生产环境彻底统一了,还能进行资源管控和虚拟化。程序员们流着口水惊呼,太方便了,太方便了。引擎的名字叫做 Docker,以 Go 语言写成。

这个结果大大出乎 dotCloud 创始人的意外,从此以后,他们开始专心研发 Docker 产品和维护相关社区,2013年10月 dotCloud 公司更名为 Docker 股份有限公司,从此王子和公主过上了幸福而快乐的生活。



Docker 的技术特点现在大家都很清楚了,比如它能够以容器的方式自动部署任何应用;容器是一系列进程的集合;基于 namespaces 和 cgroups 实现容器资源的隔离和限制;基于 copy-on-write 技术创建文件系统,分层、快速、占用空间少;提供交互式 shell 和 remote api 等等。但是,与任何一门新兴技术的兴起一样,Docker 一路走来,给工程师和技术尝鲜者挖坑无数,有进程管理的问题,资源隔离的问题,内存泄露问题,包依赖问题,网络问题等等。

基于这些考量,我很想知道阿里云在这方面到底遇到了那些坑,解决了什么样的技术问题。于是有了我和阿里云容器服务负责人易立的一段对话:

阿里在使用 Docker 技术的时候碰到过那些坑,解决了哪些业务问题,对 Docker 做了什么改进呢?

Docker 的版本迭代速度很快,在快速发展的同时,必然会给使用者带来很多挑战,比如:

  • Docker Engine 和 Swarm 在可伸缩性上的问题。在早期版本中,集群规模比较大的情况下 Swarm 调度会变很慢,CPU 利用率非常高,同时 Docker Engine 中 libnetwork 对 etcd 的压力会非常大,也存在死锁的风险。我们对此做了大量改进,若干个 PR 已经被合并到 Docker 主干,大大提升了 Docker 集群的伸缩性。
  • 阿里云服务的集成和优化。在云端 Docker 环境的部署和线下有一些不同之处。比如,我们为阿里云 VPC 提供了符合 CNM 网络规范的容器网络驱动,其带宽和时延都优于原生的 overlay 网络,可以方便地实现混合云环境中容器的互联互通。为了便于 K8S/Mesos 用户在阿里云部署,我们也将其贡献给了开源的 Flannel 项目。
  • 内核兼容性。长时间压测容器还是会遇到各种奇怪的问题。阿里云容器服务为用户提供经过兼容性测试的 OS 和 Kernel 版本。由于社区的努力,目前主流操作系统 CentOS 7.3和 Ubuntu 16.04/14.04的最新版本内核对容器兼容性的支持也越来越好。
  • Docker Hub 访问是国内开发者普遍的痛,阿里云提供了免费的加速器服务和镜像仓库服务,可以帮助用户方便地拉取和构建镜像。另外也为 Docker 社区贡献了 Docker Registry 的阿里云 OSS 存储后端,支持海量数据的低成本镜像存储,同时修复不少 Registry 相关的性能和兼容性问题,这些也都回馈给社区了。

使用阿里云提供的 Docker 服务和自建 Docker 环境有什么不同?

Docker Engine 在单机上使用很方便,但要部署出一个可用于生产的集群,有很多问题需要考虑。跟手工部署 Docker Engine 和 Swarm 相比,使用阿里云容器服务有下列优势:

  • 一键部署安全的集群。阿里云容器服务帮助用户自动完成 ECS 创建、安全组配置、Docker Engine 和 Swarm 部署等繁琐工作。更加重要的是集群自带 SSL 证书,且支持证书下载、吊销等。
  • 针对阿里云能力进行了优化和集成,内置了容器在云上最佳部署和运维实践:比如支持阿里云 VPC/经典网络/SLB 负载均衡;集成日志服务 SLS、云监控;支持阿里云 OSS,NAS 的共享数据存储卷和云盘等等。
  • 容器服务在兼容原生 Docker 编排技术的同时进行了扩展。
  • 支持GPU/CPU混合的资源调度,可以轻松部署深度学习应用。
  • 提供离线应用、定时任务等扩展的调度能力,适应不同应用需求。
  • 支持蓝绿发布等多种发布方式,可以更快、更安全地发布应用。
  • 容器启动顺序依赖困扰了很多用户,我们结合容器的健康检查,提供了优雅的依赖检测方案。

共用 Linux Kernel,让 Docker 安全性先天不足,阿里是怎么解决的?

安全性是一个系统性问题,这里只针对 runtime 安全说一下。

  • 一方面,我们可以借助于虚拟化的隔离能力来达到更强的隔离。比如,在阿里云容器服务中,集群里所有 ECS 节点都是同一个用户的,不会和其他用户共享资源,这样避免了用户间的资源争抢和安全问题。
  • 另一方面,在针对需要采用容器进行多租户支持的场景中,比如我们对容器 User Namespaces 进行了映射,对操作系统配置了 security profile 和内核加固,同时对容器使用的存储,网络资源进行了额外限制。这些可以解决限定场景下的安全和资源隔离问题。


提升容器的资源隔离性和安全性,还有很多的路要走。也在和其他团队配合,在Linux 内核层面进行探索。任何一项新技术的应用、推广和普及都需要大量的实践和改进,一个技术或者环境,能够在你自己的笔记本上跑起来和投入成千上万台集群机器中完全是两个概念。我在锤子科技和极客邦科技的研发和生产环境里都用到了 Docker 技术,但数据体量和实践让我们很难进行类似的改进,因为你正常使用就没问题啊,只有数据量足够大,机器足够多的时候,很多瓶颈,比如扩展性、安全性、兼容性和长期的可用性才会出现挑战,如果是提供给别人的商用系统,要求就更多了。

飞天敏捷版充分体现了云 + 容器的独特价值。不仅大大了降低容器服务的操作难度,移植性也很强,能在不同环境中进行应用部署。有了它,客户可以在一组主机上通过 Docker 容器来进行分布式应用的部署、更新和弹性伸缩,轻松实现混合云方案。当业务出现峰值流量时,快速将本地数据中心应用扩展到云端,利用云资源更好的进行灾备、应对峰值流量。


易立对我说,「除了产品技术层面的合作,阿里云还将加大在社区的投入,并通过一系列技术活动提升中国 Docker 技术和应用的水平。」 

我曾经写过一句话,大数据量胜于优秀算法,如果数据足够多,可能产生出意想不到的应用。无论算法好坏,更多的数据总是能够带来更好的效果。目前这些数据和机器节点都在中国的大型互联网公司里。

算法再好,没有量,也是无源之水,无本之木。从这个角度看,大型互联网公司更有责任去推进技术社区的发展,基于数据优势对开源社区做出更多贡献。当然,极客邦科技也会在其中发挥重要的作用。


来源:MacTalk 作者:池建强

原文链接

时间: 2024-09-19 05:08:17

细数阿里云在使用 Docker 过程中踩过的那些坑的相关文章

“抢滩”日本市场 细数阿里云国际化道路与战略

在日本市场开服至今不足4个月,但阿里云已经交出了一份理想的答卷:目前运行于阿里云平台上的企业中,日本人投资的企业已经占到了一半. 3月16日,负责海外业务市场的阿里云副总裁孙炯在东京举办的媒体沟通会上向来自中国和日本两地的记者表示,阿里云进入日本市场的过程中,克服了合规与安全要求的挑战,克服了文化差异与商业习惯不同的挑战,克服了品牌知名度不足的挑战,克服了币种汇率的转换与时差等因素的挑战--通过各种了解.比较,从不信到信任,越来越多的用户最终拥抱上了阿里云. 最紧张的时候,阿里云300多位工程师

细数阿里云服务器的十二种典型应用场景

如今,阿里云的产品可谓是多种多样,纷繁复杂.面对各种各样的技术和产品,ECS.RDS.OSS-等等一系列的东西,很容易让人找不到头绪,尤其是刚刚开始接触网站建设的朋友.阿里云湖北授权服务中心武汉捷讯结合阿里云官网的资料,针对建站相关的内容为大家整理一些阿里云典型的应用场景,以及每一种应用场景主要涉及的技术,给大家提供一个参考.相信看完本文,大家都能清楚的知道自己要实现的应用大概会需要用到什么样的服务和产品.   典型应用一些典型应用中可能涉及到的产品和概念   (一)一站式建站   阿里云提供域

【阿里云资讯】Docker首个国内合作商,阿里云何以认定容器技术将成主流?

阿里成Docker首个国内合作商 10月13日,在2016杭州·云栖大会上,全球知名的容器技术公司Docker与阿里云宣布达成战略合作,双方将在容器服务领域进行紧密合作,阿里云称其将为客户提供更加先进的云上应用管理服务.双方称在开源容器技术以及其发展方向共同努力,为客户提供本地化Docker的企业级支持和咨询服务. Docker自问世三年来,社区不断壮大,项目升温之迅猛在开源社区中并不多见,并受到IT业内的广泛关注.不过,Docker在国内真正的大规模应用仍然不多,目前国内Docker的使用状况

DockerCon 2016 深度解读:在阿里云上体验Docker 1.12内置的编排能力

昨天才从DockerCon大会归来,阿里云容器服务团队将为大家奉献一系列深入学习的文章来帮助大家了解Docker 1.12的最新动态. 第一部分:在阿里云上体验Docker 1.12内置的编排能力 (本文) 第二部分:在阿里云上体验Docker 1.12的路由能力和容器应用分发部署 在DockerCon第一天的Keynote里面,Docker CTO Solomon Hykes宣布Docker将提供内置的编排(Orchestration)能力,从而能使得Docker Engine原生支持集群管理

在阿里云上体验Docker 1.12的路由能力和容器应用分发部署

阿里云容器服务团队将为大家奉献一系列深入学习的文章来帮助大家了解Docker 1.12的最新动态. 第一部分:在阿里云上体验Docker 1.12内置的编排能力 第二部分:在阿里云上体验Docker 1.12的路由能力和容器应用分发部署 (本文) 简述 Docker 1.12除了提供内置的编排能力,也提供了服务路由支持 routing mesh,和新的多容器应用分发和部署机制. 这里我们先介绍两个概念 分布式应用打包 (Distributed Application Bundle,简称DAB):

阿里云上搭建Docker Swarm模式集群最佳实践

Docker技术体系和生态在2016年得到飞速发展.成熟,在2016中国容器技术调研报告中也发现了国内绝大部分用户都在关注 Docker,80%的用户都会考虑使用容器技术.那如何能快速的在阿里云上搭建Docker集群呢?本文将讲解如何利用资源编排快速搭建Docker Swarm 模式集群,本例子中将安装Docker1.12,在Docker1.12中提供了Swarm模式,将一组Docker Engine构成一个集群统一管理.调度. 集群架构图如下: 如果已有VPC网络和NAT网关,可以跳过第一步,

在阿里云上进行Docker集群的自动弹性伸缩

简介 在刚刚结束的云栖大会上,阿里云容器服务演示了容器的自动弹性伸缩,能够从容应对互联网应用的峰值流量.关于阿里云上容器的自动弹性伸缩,可以参考文章在阿里云上进行Docker应用的自动弹性伸缩. 同时在流量变大的时候自动进行容器的弹性伸缩,要求容器集群有很好的容量规划,必须有多余的集群资源以支持弹性扩容.但问题是当流量变大,容器扩容导致集群资源不够的时候怎么办呢,是否需要手工进行容器集群的扩容?实际阿里云容器服务不仅支持容器级别的自动弹性伸缩,也支持集群节点级别的自动弹性伸缩.从而真正做到从容应

阿里云易立:Docker落地应采用演化方式,而非革命手段

阿里巴巴在线技术峰会专题,立即参与报名:https://yq.aliyun.com/activity/97 7月19日晚8点,阿里云资深专家易立将分享<云上应用Docker化持续交付与微服务实践>.为了让大家更好的了解Docker目前发展状况,我们对易立进行了采访,下面是采访整理. 2013 Docker出世:让人眼前一亮 2013年末,当时我是IBM PureApplication System的架构师,该系统的PaaS引擎是基于虚拟机技术的,我希望能利用容器技术来加速软件的部署和简化运维.

希望高手教我在阿里云ECS的Server08R2系统中安装虚拟机

问题描述 希望高手教我在阿里云ECS的Server08R2系统中安装虚拟机.QQ:344151365