在Hadoop上运行Docker容器的六大陷阱


关于译者Ghostcloud:
Ghostcloud(中文名:精灵云)是成都精灵云科技有限公司旗下的基于Docker的PaaS/CaaS平台品牌。公司成立于2015年,核心团队由来自EMC、Veritas、华为、IBM、Microsoft的核心技术主管和架构师组成。精灵云作为国内首批从事容器虚拟化研发的企业,为企业级行业客户提供针对互联网化、私有云管理平台、大数据业务基础架构的平台服务,在国内Docker社区贡献排名前三。主创团队曾参与Beego开源项目研发,并主导发布《Docker容器实战:原理、架构与应用》一书。Ghostcloud因容器技术而生,致力于为多个领域的“互联网+”转型企业提供服务,是一流的企业级容器云服务专家。

【3 天烧脑式 Docker 训练营 | 上海站】随着Docker技术被越来越多的人所认可,其应用的范围也越来越广泛。本次培训我们理论结合实践,从Docker应该场景、持续部署与交付、如何提升测试效率、存储、网络、监控、安全等角度进行。
2.png


尽管在Hadoop上集成了容器负载的潜在价值,目前任职于Cloudera的Daniel Templeton仍然建议在部署Docker容器之前,等待Hadoop 3.0版本引入安全问题和其他问题的注意事项。在上周于迈阿密召开的北美Apache大会上,Daniel在演讲中表示:“它的潜在价值确实很大,但Hadoop3.0发布前,它仍然解决不了你的问题。容器很酷,但你确实还无法使用它。”

作为Cloudera 的YARN项目中的一名软件工程师,Templeton曾深入了解过由Hadoop Linux Container Executor提供的Docker支持(下载),也曾经探讨过何时会出现更好的选择。他曾在探讨中坚持地认为是Docker应用在Hadoop之上,而不是Hadoop应用在Docker上。

“如果你也有一个Hadoop集群,你会和我一样,想在Docker容器里执行工作负载的。”

虽然Hadoop的YARN调度引擎目前支持Docker作为已提交应用的执行引擎,但当你在现有版本的Hadoop中执行它的时候,还是需要提前了解那些“坑”。

陷阱一:Docker容器中必须开放应用权限
目前,当你在运行Docker容器时,需要指定一个用户运行它。如果你指定的是用户ID而不是用户名,假如这个用户ID不存在,它也会自动为你创建用户。这种重新映射在遇到大量image的时候是无法正常工作的,也就意味着用户必须事先指定,如若不然,你将无法访问任何内容,也不能启动脚本和记录日志,将完全处于宕掉的状态。
这个问题目前还没有一个很好的解决办法,如果你有好的想法,欢迎到YARN-4266上参与讨论(https://issues.apache.org/jira/browse/YARN-4266)。
图片描述
图自Daniel Templeton的演讲内容

陷阱二:Docker容器和运行环境之间不独立
可移植性是Docker容器最主要的特性之一,但运行于Hadoop的时候Docker的可移植性却不怎么好。当你想访问HDFS或者当你需要反译令牌,又或者当你需要像MapReduce这样的框架,亦或你想做Spark的时候,你必须得拥有image中的代码文件才可以实现。因此Hadoop的版本必须升级。

升级Hadoop版本的补丁程序可以在YARN-5534上下载(下载地址:https://issues.apache.org/jira/browse/YARN-5534)。该补丁程序允许安装被列为白名单的存储卷,且开放管理员权限。当你拥有管理员权限,不仅这些目录可以被允许安装到Docker容器中,而且可以指定要挂载的目录。但需要注意的是,千万不要挂载任何可能会搞砸的东西。

陷阱三:image太大就会报错
当执行程序的时候,docker_run将隐含地从repo中拉出图像,虽然Spark和MapReduce都有10分钟的超时时间,但如果图像太大,网络下载时间超过了10分钟,程序就会报错。假如持续地重新提交程序,导致的最终结果将会是程序处在某个已经尝试过的节点上并运行。目前针对这种图像报错,YARN上对图像缓存暂无有效的解决方法。

陷阱四:不支持安全回收
Docker会将访问了client_config中安全备份的.docker / config.json文件进行存储备份,这个应该众所周知。这意味着当你访问安全备份时,无论从哪个节点管理器登录,你都会受到用户主目录中.docker / config.json文件的约束。恐怕这种限制没人能接受。

陷阱五:网络只有最基本的支持
众所周知,当应用Kubernetes、Mesos这类容器管理工具的时候,网络很容易就得到实现,CNS也能得到处理。但YARN却提供不了这样的网络管理服务。YARN没有内置的端口映射的概念,网络也没有真正的自动化管理。相反,如果你想请求访问网络,你只能通过所有节点管理器上的Docker来显式创建网络。

陷阱六:具备较大的安全隐患
Docker在Hadoop上运行是有安全隐患的。为什么这么说?Docker中的一个特权容器可以窥探底层操作系统,访问斜线进程和设备。假如是以root权限运行在容器当中,那么在底层操作系统中很有机会执行非常可怕的操作。当这种情况发生的时候,YARN目前是无法指定到用户的。虽然可以通过将其关闭或限制到某一特定用户组的做法来控制它,但这个安全隐患的问题必须得到重视。

14V2623LSJ0-12S7.jpg


Hadoop 3.0
虽然Hadoop2.8中存在Docker的修复程序,但仍然不够用。在本次更新版本中,Hadoop3.0新增功能点:
•支持本地化的文件目录作为卷进行安装;
•支持cgroups;
•支持不同的网络选项;
•支持文档;

据悉Hadoop3.0将很可能在年底发布,其主要功能Hbase擦除编码将得到改进,并将为用户提供1.5倍的存储空间。这意味着可以节省用户一半的硬盘成本,并对YARN和MapReduce的用户产生巨大的影响。

目前Hadoop3.0的项目一直与雅虎,Twitter和微软等主要用户合作,确保与现有系统的兼容性,并且不会出现任何痛苦的滚动升级。

原文:https://thenewstack.io/docker- ... ugly/

推荐阅读:

【译闻】容器的管理,也是一门艺术
IT专家们谈OpenStack和K8s的未来
Docker容器云在金融行业的应用
自研容器调度引擎Newben会成为“中国的K8s”?

0 个评论

要回复文章请先登录注册