点击关注 InfoQ,置顶公众号

接收程序员的 8 点技术早餐

作者|孙宏亮

编辑|小智

PouchContainer 是什么?

近年来,随着以 Docker 等容器技术的持续走热,企业纷纷开始在内部进行尝试,尝试探索并建立一个广泛并通用的 PaaS 平台,整体提升内部应用开发和运维的水平,快速实现企业的数字化转型。阿里巴巴作为一家技术驱动的商业公司,早在 2011 年即开始实践容器技术,帮助集团完成应用容器化、提升 DevOps 能力、应用统一调度等目标。七年来,阿里巴巴在“如何高效可靠地为业务团队提供容器技术”方面,可谓历尽坎坷,也可谓凤凰涅槃。去年的云栖大会上,PouchContainer 第一次与行业见面,引发了不小的轰动。随后的开源建设,进一步帮助 PouchContainer 打磨自身技术,从而使其有能力如“水电煤”般普惠至行业千万家。

PouchContainer 的定位是“高效的企业级富容器技术”。容器技术虽然已经成为企业数据中心的标配技术,然而事实上其仍未到达在企业中迅速铺开的阶段。PouchContainer 可以通过提供高效可靠的容器技术,实现“企业存量应用的快速容器化”以及“提供安全隔离性强的环境”,从而解决企业痛点。

PouchContainer 的架构可以参见下图:

PouchContainer 版本发布

PouchContainer 自开源以来,即以开放的态度,与行业生态共建项目。开源至今,PouchContainer 吸引了容器生态多位开发者的开源参与, 开发者有来自科研机构,如浙江大学、华中科技大学以及上海交通大学,同时贡献中也有来自互联网公司的,如美团、滴滴、端点科技、谐云科技、才云等。目前 Pouch 的开源数据如下:

  • 项目 GitHub 地址: https://github.com/alibaba/pouch;

  • star 数超过 2200+;

  • 开源贡献者有 41 位;

  • 项目 commit 数达 1020;

  • fork 数接近 400;

  • maintainer 数量发展到 8 位;

一直以来,PouchContainer 将质量保障放在极其重要的位置,因此版本数的发布兼顾着“社区的体验”以及“质量的保障”。开源至今,项目共发布了 0.1.0,0.2.0 和 0.2.1 三个版本,其中 0.2.1 版本则实现了对多个企业级场景的支持,完全满足企业“快速存量应用容器化”以及“安全可靠强隔离”的场景要求。

PouchContainer 的企业级特性

开源将容器技术以及编排管理技术(如 Docker 与 Kubernetes 等),迅速在工业界宣传开,有初步形成事实标准的意味。然而,有过尝试与实践的企业,想必深有体会:开源容器技术在企业落地过程中,往往仅适用于企业增量业务,面对帮助企业存量业务如何拥抱新技术方面时,一直很难找到一座合理的桥梁。PouchContainer 作为从阿里巴巴走出来的开源容器技术,曾走过双 11 在线业务 100% 的容器化,覆盖中间件、蚂蚁金融、阿里云专有云等大量的业务场景,其中的企业级特性将是 Pouch 面世最大的价值。

富容器技术

传统容器技术“单进程”模式,对传统开发模型、运维都存在不小的挑战。

PouchContainer 0.2.1 版本中,“富容器”技术,则是天生设计来解决“开发运维侵入性”的问题。

“单进程”模式的容器技术,虽然轻松地解决了增量业务的交付问题,不过却交给企业信息化决策者一个现实的问题,“维持现状,苦撑存量业务?”,还是“侵入业务开发和运维,采纳新技术?” 相信大家不难看出,这里的技术并没有提供最优解,但凡对传统的开发运维存在侵入,技术的普及都会存在较大的阻力,因此企业架构在漫长的演进过程中,大部分的存量业务都没有变化,遑论老业务诞生新价值。

虚拟机虽然在容器技术的冲击下,略显疲态,不过该模式下应用的开发方式以及运维习惯,可以说为业务的生命周期管理做到了保驾护航。如果一款容器技术可以既有容器的优势、又兼容虚拟机时代的应用开发运维模式呢?PouchContainer 的富容器技术即解决此难题:

  • init 进程:容器内提供完整的 init 守护进程,实现容器内部环境的管理(容器内多进程的管理、僵尸进程回收等),目前有三种 init 进程选项(/sbin/init, systemd 和 dumb-init);

  • prestart hook:init 进程协助下,完成容器应用启动前的钩子脚本,完成运维环境初始化、自定义预处理等管控需求。

容器技术没有权利定义业务开发运维模式,而 PouchContainer 的富容器技术,则为行业容器技术做了至关重要的补充。另外,富容器技术并不是 PouchContainer 的默认模式,“单进程”容器模式依然被友好支持,用户完全可以按需灵活选择模式。

基于 Hypervisor 的容器技术

因内核无法隔离,传统容器技术至今无法实现多租户。

隔离性是云计算技术必须正视的一个技术难题。隔离性强,意味着技术具备了企业级的初步条件;反之则几乎没有可能在业务线上铺开。哪怕是阿里巴巴这样的技术公司,实践容器技术伊始,安全问题都无法幸免。众所周知,行业中的容器方案大多基于 Linux 内核提供的 cgroup 和 namespace 来实现隔离,然后这样的轻量级方案存在弊端:

  • 共享内核安全存疑:容器间,容器与宿主机之间,共享同一个内核,内核隐患牵一发而动全身;

  • 资源隔离维度欠缺:cgroup 和 namespace 的隔离维度无法模拟虚拟机,如网络、磁盘、CPU 和内存的高级属性等;

  • 内核参数配置困难:特殊场景下,有些依赖内核参数的容器需要配置内核参数,而共享内核导致容器修改内核影响整台机器。

介于此,PouchContainer 在设计之初就朝着兼容容器、结合 Hypervisor 的方向发展。实现方案方面,PouchContainer 第一个支持了 runV(当前 KataContainer 项目的前身)。达到的效果是:同一个容器引擎上,用户有能力同时部署“容器”和“虚拟机”,帮助企业级完成两种运维载体的统一化管理,将企业级信息化管理化繁为简。PouchContainer 支持两种计算载体的示意图如下:

两者统一化管理的命令行操作如下(其中 runtime 运行时标注为 runv 的表示虚拟机,而 runc 代表 Linux 容器):

$ pouch ps Name ID Status Image Runtime hypervisor 95c8d5 created docker.io/library/busybox:latest runv 4945c0 4945c0 stopped docker.io/library/busybox:latest runc 1dad17 1dad17 stopped docker.io/library/busybox:latest runv

容器资源视角隔离

依然是隔离性问题,Linux 容器所依赖的 cgroup 和 namespace 技术,实际上并没有很好地做到容器的资源视角隔离。具体举例而言,就是给一个运行在 2GB 内核机器上的容器限制了 200MB 的内存,在容器内执行 free 命令,依然可以看到 2GB 内存。同样的资源维度,还有 CPU、blkio、uptime 等。

阿里巴巴由于业务复杂,应用栈种类多,在容器技术发展初期就遇到了“容器资源视角隔离弱”的难题。当时,大量的企业级 Java 应用在容器中运行的时候,经常遇到以下三类问题:

  • Java 应用启动时用到的运行脚本,大部分通过查看主机内存来动态分配 JVM 的起始堆栈大小,因此容器模式下完全失效,毕竟容器分配到的实际内存要更小;

  • Java 应用中众多中间件库包 library,通过查看主机内存来动态分配运行程序的堆栈大小,容器模式下同理出现异常;

  • 为充分利用多核机器,应用可以判断机器 CPU 核数来动态创建线程数,容器模式下容器内进程 cpuset 的限制有可能小于宿主机,从而能导致容器应用的运行存在异常。

传统企业中存量应用很大部分是使用 Java 编写,或者会遇到上述情况。PouchContainer 在 0.1.0 版本即支持了 LXCFS,帮助容器实现查看的资源完全是精准的分配值。PouchContainer 通过 LXCFS 将宿主机上有关容器 cgroup 文件系统中的资源限制值,通过 FUSE 文件系统的方式生成虚拟文件,并挂在到对应的容器内部,完成真是资源信息的传递。PouchContainer 原生支持 LXCFS,仅需指定--enableLxcfs即可完成。如下图,不指定--enableLxcfs则容器free命令看到宿主机所有的 2GB 内存,若指定则看到容器总内存为受到限制的 200MB:

$ pouch run -m 200m registry.hub.docker.com/library/ubuntu:16.04 free -h total used free shared buff/cache available Mem: 2.0G 103M 1.2G 3.3M 684M 1.7G Swap: 2.0G 0B 2.0G $ $ pouch run -m 200m --enableLxcfs registry.hub.docker.com/library/ubuntu:16.04 free -h total used free shared buff/cache available Mem: 200M 876K 199M 3.3M 12K 199M Swap: 2.0G 0B 2.0G

容器的数据卷隔离

上一点提到 Linux 容器无法做到资源视角隔离,不过在文件系统视角隔离方面,它还做好视角隔离的。然而,这就是满足企业级需求了吗?很遗憾,答案是否定的,原因在于:Linux 容器无法帮助企业级容器应用做好数据卷磁盘隔离。举例而言,用户为应用创建一个容器,并绑定一个数据卷 volume,那么原则上容器的 rootfs 并没有受到磁盘的限额,用户应用完全有可能通过不断写文件,使得容器消耗完宿主机所有的存储空间;这样的情况同样适用于容器的数据卷 Volume。因此,不完善的容器数据卷隔离,是容器服务 SLA 保障的重大挑战。

刚发布的 0.2.1 版本中,PouchContainer 原生为容器 rootfs 以及数据卷 volume 实现了磁盘限额,实现方式为支持了 Linux 内核的特性 group quota 和 project quota。用户可以在启动 Pouch 守护进程时,配置 quota 驱动的类型,创建容器以及 Volume 时,均可以通过传递参数完成磁盘 quota 的设置。

PouchContainer 的未来规划

高效的企业级富容器技术,是 PouchContainer 的定位。如今的 0.2.1 版本向社区、向企业传递了这样的信号:PouchContainer 发展的差异化定位,志在解决企业存量应用容器化缓慢的行业现状,为企业的数据化转型保驾护航,做好扎实的第一步。

未来,PouchContainer 的发展会秉持务实,拥抱创新。PouchContainer 不仅会在功能特性上继续贴近企业级的业务需求,在性能可靠性上为企业规避风险,同时在下一代创新容器方面做更多探索。更多内容,敬请期待。

作者介绍

孙宏亮,阿里巴巴技术专家,毕业于浙江大学,目前在阿里巴巴负责容器项目 Pouch 的开源建设。数年来一直从事云计算领域,是国内第一批研究和实践容器技术的工程师,在国内起到极为重要的容器技术布道作用。拥有著作《Docker 源码分析》,个人崇尚开源精神,同时是 Docker Swarm 项目的全球 Maintainer。

今日荐文

点击下方图片即可阅读

阿里巴巴正式开源其自研容器技术 Pouch

阿里巴巴PouchContainer发布0.2.1版本,剑指企业级相关推荐

  1. PouchContainer 发布 0.3.0 版本,支持 Kubernetes 拥抱 CNCF 生态

    划重点 PouchContainer 是一款轻量级.开源的富容器技术,拥有快速高效.隔离性强.可移植性高.资源占用少等特性,可以帮助企业快速实现存量业务容器化,同时提高超大规模下数据中心的物理资源利用 ...

  2. 以太坊Solidity发布0.8.3版本

    官方消息,以太坊Solidity发布0.8.3版本.官方表示,一个错误修复版本,修复了优化器如何处理Keccak256操作码的一个重要错误.此外,它还包括对优化器的两个改进. 文章链接:https:/ ...

  3. 开源项目管理工具禅道ZenTaoPMS发布0.6 beta版本

    Author: 王春生 各位朋友们,我非常自豪的向大家宣布,开源项目管理工具禅道(ZenTaoPMS)于3月10日发布0.6beta版本.该版本为一功能改进版本,建议禅道的用户尽快升级到0.6版. 一 ...

  4. 如果微软狠心鸿蒙系统,微软将发布新的操作系统,剑指华为鸿蒙系统,谁能更胜一筹?...

    随着可折叠手机,双屏PC的涌市场入,微软也意识到--是时候开发一个新的Windows操作系统了.Windows的这个新版本被称为Windows Core OS预计将于明年上半年发布,据微软官方消息,这 ...

  5. 剑指企业级云原生,阿里云 CNFS 如何破局容器持久化存储困境

    简介: 云原生趋势下,应用容器化比例正在快速增长,Kubernetes 也已成为云原生时代新的基础设施. 据 Forrester 预测,到 2022 年, 全球企业及组织在生产环境运行容器化应用.观察 ...

  6. Checkra1n越狱更新0.12.4版本,支持iOS14.7.1越狱

    checkra1n越狱团队更新发布0.12.4版本. 新版本支持iOS 14.7.1越狱(5S~X)(A7~A11) Bug修复: 修复了A9X设备IOS14.5在0.12.3上越狱不跑代码问题 工具 ...

  7. 【leetcode】 剑指 Offer学习计划(java版本含注释)(上)

    目录 前言 第一天(栈与队列) 剑指 Offer 09. 用两个栈实现队列(简单) 剑指 Offer 30. 包含min函数的栈(简单) 第二天(链表) 剑指 Offer 06. 从尾到头打印链表(简 ...

  8. JavaScript-牛客网-剑指offer(1-10)题解

    牛客网-剑指Offer题解-js版本 剑指offer第1-10题解答(js) 1.二维数组中查找 2.替换空格 3.从尾到头打印链表 4.重建二叉树 5.用两个栈实现一个队列 6.旋转数组中的最小数字 ...

  9. 《剑指offer》75题 C++详细题解

    目录 简单: 剑指 Offer 03. 数组中重复的数字 map: unordered_map: 原地交换 剑指 Offer 05. 替换空格 剑指 Offer 06. 从尾到头打印链表 出栈入栈 双 ...

最新文章

  1. WIN10系统上,新建AliOS Things项目
  2. linux内核头文件 cdev.h 解析
  3. uni-app请求图片的路径是反斜杠如何解决
  4. createsolidcaret 后 很快就不闪烁了_为什么LED灯会越用越暗?为什么会闪烁?
  5. 因让员工加班 去哪儿网被处罚3250元!网友:是不是少了个“万”?
  6. threejs 物体根据相机位置显示_认识Threejs
  7. MATLAB-S函数
  8. 关于UploadValues ,太可恶了
  9. $ORACLE_HOME变量值末尾多“/”惹的祸
  10. 转:解决vs2015生成软件在XP中运行时提示“不是有效的WIN32应用程序”
  11. AI芯片最重要的是什么?Arm中国:背后的软件生态
  12. AdapterView学习总结
  13. 实用前端可视化工具库
  14. 利用电脑学象棋的一点想法
  15. 网页删除mysql数据库_网站数据库被删除了
  16. 05.SQL Server(高级查询)
  17. vue-pdf+element实现全屏窗口pdf分页预览,pdf打印实现和解决打印乱码
  18. 整理:状态机的C语言编程
  19. 激光测距望远镜方案介绍
  20. 怎么对接个人收款支付接口(扫码支付)

热门文章

  1. DS18B20温度转化
  2. NAT(Network Address Translator,网络地址转换)
  3. 使用canal 监听mysql binlog获取增量数据
  4. 切尔诺夫脸用matlab,切尔诺夫脸谱图表现中国各省生活质量_武斌.pdf
  5. 达摩院成立XG实验室,阿里官宣进军5G
  6. 什么是图形加速卡(一)
  7. 图扑软件数字孪生 3D 风电场,智慧风电之海上风电
  8. java excel 导入 关闭,excel关联别的表格数据库-java实现excel表导入,有的字段数据库中没有,需要关......
  9. ECG ×AI: 机器/深度学习的ECG应用入门(3)
  10. 号外! 中国移动开始养猪了!