返回顶部
首页 > 资讯 > 精选 >阿里如何做到在线业务百分百容器化
  • 731
分享到

阿里如何做到在线业务百分百容器化

2023-06-03 18:06:39 731人浏览 安东尼
摘要

本文将介绍如何打造百万级的容器技术。众所周知,阿里巴巴在 “双11” 活动之前上线了数以百万计的容器,面对如此大的规模,阿里巴巴的容器技术到底有哪些功能特性来帮助它快速落地?我将从场景痛点与解决方案的角度同大家分享。如今,容器和 kuber

本文将介绍如何打造百万级的容器技术。众所周知,阿里巴巴在 “双11” 活动之前上线了数以百万计的容器,面对如此大的规模,阿里巴巴的容器技术到底有哪些功能特性来帮助它快速落地?我将从场景痛点与解决方案的角度同大家分享。

如今,容器和 kubernetes 的概念炒得很火,但是我相信,还有部分企业在内部并没有把自己的业务进行容器化,那根据咱们大会现场的反馈结果也是如此。这就说明在容器化的过程中,不管技术如何落地,我们对环境有一些什么样的要求,总有一些需要解决的问题。接下来,让我们一起来看一下,阿里是如何做到在线业务百分之百容器化的。

首先我们了解一下在线业务是什么?比如说大家在淘宝、闲鱼上买东西,或利用支付宝支付一些费用,而这些业务都需要提供实时服务。诸如此类的业务在阿里中十分广泛。其中还包括像视频(优酷)、搜索、阿里专有云也都具备容器能力。

阿里如何做到在线业务百分百容器化

PouchContainer 简介

首先为大家介绍一些 PouchContainer 的历史。阿里从 2011 年开始打造容器技术,但是这个容器技术并没有像后来的 Docker 那么流行。主要是什么原因呢?主要是我们服务于内部,只是打造一个容器环境,提高集团资源利用率,但是并没有抽象出来现在社区的镜像技术。

大家可以认为镜像技术是容器技术爆发的关键点之一,因为它给我们的业务带来了持续交付能力,可以让我们的业务、应用做到增量增发。2011 年,阿里是基于 LXC 的 CGroup 以及 Namespace 技术来实现。那时我们已经具备做容器的技术,当时采用 LXC 技术,并很快将当时的容器技术推到线上运行。

2015 年,我们发现外部的 Docker 发展越来越火,于是我们将 Docker 的镜像技术推到集团内部。将 LXC 与 Docker 两者集成,再加上必要的技术演进,就形成了现在的 PouchContainer。2017 年的“双十一”,PouchContainer 宣布开源。现在包括阿里内部 PouchContainer 任何一个特性与任何一行代码的增删改查,大家都可以在 GitHub 上看到。

说一下阿里容器技术在演进过程中考虑了哪些内容,这可能和社区当中的容器技术又不一样。比如说 Docker,它倡导的理念是 one process one container(在容器中永远只运行一个应用),但在企业里面的应用架构是这样吗?可能很多都不是。有很多业务在开发过程中就是为了依赖于一些其他的系统应用。

比如说我们有很多应用很难做到和底层基础设施的解绑,这些应用会使用底层的一些 systemd 和 crond 等去交付,它的日志当中可能天生就要去和 syslog 去做交付。甚至为了运维人员的便利,我们需要在这个运行环境当中自行支持一个 sshD。而 Docker 的理念并不是特别合适这样的需求,这就需要容器技术来满足。

我们必须先满足开发者的要求,再满足运维人员要求,只有这样我们提供的新技术才会对现有的技术架构没有侵入性。一旦新技术没有侵入性,那它的推广往往会比较透明且速度较快,企业内推行阻力也会比较小。

但如果说一个基础设施技术,在提供业务方服务时,对业务方有诸多要求,那这样推广往往会面对很多阻力。那我们为什么要做这样?我们为什么要做 PouchContainer (富容器),就是因为我们不能对开发和运维造成任何的侵入性,不能去侵入他们的流程,我们必须提供一个对他们完全透明的技术,这样就能在很短的时间内迅速容器化所有的业务。这也是我们存在一个比较大的价值。

PouchContainer 架构

这是一张 PouchContainer 的知识架构图:

阿里如何做到在线业务百分百容器化

现在我就此图为大家进行解读:如果我们横向在中间“切一刀”,就会发现部署编排里的一些概念,比如说 Kubernetes,比如说我们的 CRI、Pod 都是编排的一些概念,我们的 PouchContainer 可以非常方便地支持 Kubernetes,而且我们增强了 Kubernetes 体验,在本末我将会跟大家展开来说。下一层是 container api。对于 container API,大家可以看到一个 container manager 的管控域,包括网络、存储。上下是两层 ,分别是编排和容器域。

如果此图纵向“切四刀”,大家会比较好理解,左边是我们的调度域和 Kubernetes;第二层是我们的引擎;第三层是我们的 Runtime 层,包括我们的 runc、runlxc 还有 katacontainer。最右边是容器的运行载体:Pod ,container 或者说 katacontainer。

PouchContainer  技术特性

富容器

从功能角度来讲,PouchContainer 帮大家解决了现实场景中的什么问题?第一点,富容器将业务运维域所看到的所有内容都放到一个容器中。为什么要这样做?当我们提供一个容器技术时,我们不希望对应用开发和运维有任何影响,否则在企业中就会很难推广。在运维团队方面,运维团队都会维稳,他们往往不希望你入太多的变量。比如说,运维同学可能会非常依赖于自己使用的那套工具,一旦这套工具在我们新技术面前变得不可用了,在面对新技术时他们会说“不”。

富容器技术,就是将运维需要的所有内容打包到这个镜像中去。在应用运行过程中,这些运维组件继续发挥作用。只有这样之后,富容器技术才能更好地适配应用。可以说,富容器技术是阿里巴巴集团内部真正快速做到百分之一百容器化的一个重要前提。如果说,各位同学觉得在企业中推动容器技术比较慢或者阻碍较大,不妨试用一下富容器技术将流程化简。

从技术架构角度来看,我们的富容器到底有哪些优势?第一,我们容器内部会有一个  systemd,很像虚拟机。这个 systemd 起到什么作用呢?systemd 主要是来做好容器内部的更细致化管理。比如说僵尸进程,利用它就很好管理,而 Docker 可能并不能做到这方面的一些工作。同时他也有能力去管控容器内部更多的一些系统服务,包括像 syslogd、SSHD 等。这样就可以保证运维,而不需要对这个系统做任何修改。

第二,富容器对容器的管控层做了更多细致化要求,比如说我们的 prestart hook、post stop hook。为了满足运维人员的一些需求,我们在做一些初始化管控时,会在它启动前要做一些前置工作,或者说在停止后做一些后置工作。

富容器的价值分为两点:

  • 富容器完全兼容容器镜像。兼容容器镜像后,对大家的业务交付效率没有任何影响;

  • 富容器兼容了我们的运维体系,充分保障运维体系原有和现有的运维能力,对现有的运维体系没有任何侵入性。

增强的隔离性

接下来与大家分享关于 PouchContainer 的隔离性。隔离性方面的问题我会从切身体验的方向出发:

第一个,资源可见性隔离。如果你是一个深度容器使用者,应该会在生产环境中使用容器。如果你用的是 JAVA 应用感触应该更深一些。如果在一台拥有 10G 内存的宿主机上创建容器,给它设置 1 个 G 的内存,你在容器中的 /proc/meminfo 会显示宿主机的 10G 内存,而并不是你设定的 1 个 G。这样的显示会导致什么影响呢?

在很多情况下,应用启动往往并不是只要把二进制文件启动起来就行。比如,JAVA 应用,它往往会去判断宿主机的 /proc/meminfo 中的一些资源,再去动态分配 JVM 堆栈大小。如果容器中的 JAVA 应用通过这种方式去启动,那么你设置的任何资源限制都无济于事。这样也有可能导致 JAVA 应用的 OOM 异常。这种情况下,我们通过 LXCFS 技术来通用化解决这个问题,对于我们的应用,开发和运维都不需要做任何改动。

阿里如何做到在线业务百分百容器化

其实它做的事情也比较简单,只要我们对一个容器做一个资源限制,在 CGroup filesystem 当中,就会有这样一个数值,这是 memory.limit_in_bytes 下面的一个文件。这样的一个虚拟文件,其实 LXCFS 可以把它动态读出,然后再去生成一个虚拟文件,再将这个文件挂载到真实的容器中的相应位置。在容器启动过程中,他得到的值就是它真正限制的值。

现在资源可见性的隔离就解决了,而 JAVA 的应用也不会有 OOM 异常。那么问题来了,我们为什么要做这样一个东西?电商应用很多都是 JAVA 应用,DiskQuota 主要用来做容器的磁盘限额。

在容器公有服务中,我想简单给大家介绍几个问题:

第一,如果我们不是通过 block 来做管理容器存储,而是通过一些纯粹的文件系统,文件系统视角可以隔离但是无法做到磁盘 quota。也就是说两个容器如果共用一个文件系统,虽然我看不见你,但是我可以用我的文件系统磁盘导致你无法使用。这也是一种互相干扰的情况。

第二,inode索引节点)。也就是我在我这个容器里面拼命创建小文件,我没有占磁盘空间,在我拼命创建小文件时,另外一个容器就完全无法运行(一些基本命令无法执行),这都是隔离方面的一些问题。在 PouchContainer 中不少应用在运行时也会遇到这种情况。一个应用程序写不好,它就有可能通过一个循环来写文件,导致磁盘写爆。那我们怎么来解决这个问题呢?我们通过 DiskQuota 来做这件事情。

容器公有服务就说到这里。我们接着说增强隔离性的第二个问题。

第二个,隔离特性是 hypervisor-based container。部分同学有这样的疑问, PouchContainer 是否可以支持一些老内核?在这方面我们也做了一些工作,我们可以在 PouchContainer 创建的 runV 虚拟机中运行一个老内核。这么做会有什么效果呢?

如此我们存量的业务全部可以拥抱 Kubernetes 。企业当中一定会有很多基于 2.6.32  内核的应用。这些应用至今都跟 Docker 和 Kubernetes 一点关系都没有,为什么会出现这种现象?

因为那些技术都对内核有要求,即新技术对内核有要求,而依赖于低版本内核的应用完全无法使用新技术。对于企业而言,到底想不想上 Kubernetes 呢?肯定是想上的。又该如何上呢?有没有一种能力能够把我们 Host OS 全都升级,升级到 3.10 或者 3.19、4.4、4.9 这样的一些内核。但为什么现在还没有人去尝试呢?

因为运维团队无法承担升级后对上层业务造成的一些影响。但是有一种方式,如果说我们这种 runV 虚拟机中运行的是老内核,而我们在 host 上可以运行升级后的内核,那我们完全有能力把数据中心物理机的内核完全升级。

因为宿主机内核跟我们的业务已经不耦合了,这样就可以完全升级。但是我们的 runV 虚拟机中运行的还是老内核,应用还在 runV 虚拟机中。这样就完全可以让整个数据中心的基础技术架构升级。在传统行业中我相信这样的操作很有杀伤力。因为大家都在考虑怎么解决这个存量异构操作系统的问题。

如果你的内核无法升级,那你就无法去迎接一些新的技术,数字化转型进程也会比较慢。

P2P 镜像分发

阿里如何做到在线业务百分百容器化

这个是阿里巴巴的镜像分发技术,我们认为镜像分发是一个非常大的专题。你知道容器镜像的平均大小是多少吗?有没有哪个企业的平均镜像大小都小于 500M?实际这种情况很少,这就说明镜像很大。那镜像很大时会出现什么样的问题?比如说在阿里的一些大促,例如双十一,我们需要把镜像大量的分发到各个机器上,其中分发效率是我们需要考虑的一个关键。

如果不考虑这个问题,你会发现 1000 台机器上都在向一个 reGIStry 发送下载镜像请求,那这个 registry 可能就会出现问题。我们从问题入手,需要做的是 DraGonfly(P2P的智能文件分发系统),它有这方面的一些特性,主要是来解决一些分发瓶颈。现在开源的 Dragonfly 也有我们的一些用户,包括像 Lazada 的公司。

它主要的一些功能特性主要是盯住了云原生应用的分发方面,在分发方面有三个维度:

  • 分发的效率;

  • 分发的流控;

  • 分发的安全

容器的原地升级功能

这是针对有状态应用做的一个功能,PouchContainer 在容器引擎层面提供了一个  Upgrade  接口,用于实现容器的原地升级功能。在 CNCF 倡导的理念中很多 container 都是 stateless 也就是无状态的。但是企业中真的有那么多无状态的应用吗?可能未必,现实情况是有相当一部分还是有状态的。

那这些有状态的业务我们应该怎么去升级,怎么去更新呢?在更新的过程当中,能不能把之前的那些状态给继A承下来呢?这个是我们需要考虑的。在升级过程中 ,我们做了容器的 Upgrade 这样一个操作。其实据我所知,国内的互联网公司中应用的架构走的比较靠前,但是大部分公司仍然利用一些有状态容器,其实他们各自都实现了这样一个功能。

究竟应该如何实现容器的原地升级呢?其实很简单,所有有状态的东西保留不变,升级要升级的东西即可

那究竟什么东西是要升级的呢?从技术的角度来讲,我们一般认为镜像是需要升级的。在运行的过程中我们把一个容器真正停掉,然后在组建这个文件系统过程中把原来老的镜像给撤掉,把新的镜像填进来;然后再去启动原有的 command,这样能保证完全做到原地升级。目前,我们正把这一功能集成进我们自身的调度系统中,包括我们内部的 Sigma 也是依赖于这样的一个功能来做业务升级的。

原生支持 Kubernetes

这里介绍下 PouchContainer 原生支持 Kubernetes。说到原生支持 Kubernetes,我们主要是实现了 CRI 容器运行时接口。大家今天听到了很多遍 CRI(Container Runtime Interface)它主要是用来解耦 Kubernetes 对于底层 container Runtime 的依赖。那我们为什么要去实践 CRI 呢?

原因很简单:因为我们要把 PouchContainer 这么多生产级别的功能,全都透传到 Kubernetes 体系当中去。大家知道 Kubernetes 支持 LXCFS,那它支持我们这个升级吗?肯定是不支持的。既然不被 Kubernetes 支持,那 Kubernetes 可以直接在阿里巴巴内部落地吗?往往很难,我们必须要把 Runtime 的这些增强透传到我们 Kubernetes 当中去,之后才能让容器技术更好的落地。

结语

以上就是阿里巴巴在容器领域的实践,欢迎后续大家一起交流

原文链接:https://mp.weixin.qq.com/s/cBJT1C3YzXCsXwORQs1ovw

--结束END--

本文标题: 阿里如何做到在线业务百分百容器化

本文链接: https://lsjlt.com/news/235337.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 阿里如何做到在线业务百分百容器化
    本文将介绍如何打造百万级的容器技术。众所周知,阿里巴巴在 “双11” 活动之前上线了数以百万计的容器,面对如此大的规模,阿里巴巴的容器技术到底有哪些功能特性来帮助它快速落地?我将从场景痛点与解决方案的角度同大家分享。如今,容器和 Kuber...
    99+
    2023-06-03
  • 如何申请和管理阿里百川容器引擎TAE
    本篇内容介绍了“如何申请和管理阿里百川容器引擎TAE”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、阿里百川TAE申请使用1、阿里百川官网...
    99+
    2023-06-10
  • 开通阿里云服务器百度文库,提升在线办公效率
    # 随着互联网技术的飞速发展,越来越多的企业开始选择使用云计算服务来提升其在线办公效率。本文将详细介绍如何通过开通阿里云服务器来实现这一目标,同时还将分享一些关于百度文库的实用技巧。详细说明:首先,我们需要了解什么是阿里云服务器。阿里云服务...
    99+
    2024-01-26
    在线 阿里 文库
  • 阿里云MC百人服务器如何选择和配置?
    阿里云MC百人服务器是一种针对Minecraft游戏的高性能服务器解决方案,旨在提供稳定、安全的游戏环境。本文将介绍如何选择和配置阿里云MC百人服务器,以满足不同规模的游戏需求。选择服务器配置首先,根据游戏需求选择合适的服务器配置是非常重...
    99+
    2024-01-01
    阿里 如何选择 百人
  • 如何在阿里云上租用服务器并做分录
    随着互联网的发展,许多公司和个人都开始使用云服务器,以节省成本,提高效率。阿里云作为中国最大的云计算服务提供商之一,提供了一系列的服务器产品和服务。本篇文章将详细介绍如何在阿里云上租用服务器,并做相关的财务分录。 一、租用阿里云服务器的步骤...
    99+
    2023-11-09
    阿里 并做 分录
  • 如何连接阿里云服务器到网线?
    阿里云服务器是一种强大的云计算服务,为企业和个人提供了高效的计算能力和存储资源。但是,要想让服务器与网络进行有效的连接,我们需要一些基本的知识和技能。本文将详细介绍如何连接阿里云服务器到网线。 首先,我们需要准备一根网线。网线的一端连接到服...
    99+
    2023-11-14
    阿里 网线 服务器
  • 阿里云服务器如何进行分割业务
    随着业务的不断发展和壮大,企业往往需要对服务器进行分割,以提高效率和性能。阿里云服务器作为国内领先的云计算服务提供商,提供了一系列方便快捷的服务器分割工具和技术,帮助企业轻松应对业务分割需求。本文将详细介绍阿里云服务器如何进行分割业务。 一...
    99+
    2023-11-13
    阿里 服务器 业务
  • 阿里云服务器在线扩容如何提高服务器性能和安全性
    阿里云服务器在线扩容是一种方便、快速地提升服务器性能和安全性的方式。本文将详细阐述如何通过阿里云服务器在线扩容来优化服务器配置、提升数据处理速度、保障服务器安全。 随着云计算技术的发展,越来越多的企业开始将业务部署在云服务器上。然而,随着业...
    99+
    2023-11-05
    在线 服务器 阿里
  • 阿里云服务器如何赚钱及实现商业化
    随着云计算技术的发展,阿里云服务器已经成为了许多企业的重要组成部分。然而,除了为用户提供服务,阿里云服务器如何赚钱呢?本文将深入探讨阿里云服务器的盈利模式以及如何实现商业化。 阿里云服务器作为阿里云的核心业务之一,其盈利模式主要包括云计算服...
    99+
    2023-11-10
    阿里 如何赚钱 服务器
  • 如何在阿里云上初始化服务器
    阿里云是一个专业的云计算服务平台,它提供了丰富的云产品和解决方案,帮助企业快速构建和管理业务。在使用阿里云的过程中,如何初始化服务器是一项基本的操作,下面我们就来详细介绍一下如何在阿里云上初始化服务器。 一、什么是阿里云初始化服务器?阿里云...
    99+
    2023-12-12
    阿里 初始化 服务器
  • 阿里云网站服务器安全如何确保您的在线业务的安全性
    本文将详细介绍如何在阿里云上建立和维护一个安全的网站服务器,以确保您的在线业务免受黑客攻击和其他威胁。我们将讨论各种安全措施,包括设置防火墙、使用SSL证书、定期备份数据以及实施安全策略。 一、设置防火墙防火墙是保护网站服务器的第一道防线,...
    99+
    2024-01-26
    在线 您的 阿里
  • 如何在阿里云中找到服务器名称?
    阿里云是中国最大的云计算服务提供商之一,为用户提供各类云计算服务,如云服务器、数据库、存储、安全等。在使用阿里云的服务时,您可能会需要知道服务器的名称。本文将详细介绍如何在阿里云中找到服务器名称。 在阿里云中,服务器名称通常在服务器列表中显...
    99+
    2023-11-01
    阿里 云中 名称
  • 如何在阿里云服务器上设置在线听歌曲
    在阿里云服务器上设置在线听歌曲是一项非常有趣且实用的功能,可以帮助你在远程办公或学习时享受音乐带来的愉悦。本文将详细介绍如何在阿里云服务器上设置在线听歌曲。 步骤一:安装音乐播放软件首先,你需要在阿里云服务器上安装一个音乐播放软件。目前,市...
    99+
    2023-10-30
    在线 阿里 器上
  • 如何在阿里云服务器上修改内存容量
    本文将介绍如何在阿里云服务器上修改内存容量,以满足不同业务需求。 在阿里云服务器上,修改内存容量是一项重要的任务。通过修改内存容量,可以提高服务器的性能和稳定性,从而更好地支持业务需求。下面将详细介绍如何在阿里云服务器上修改内存容量。首先,...
    99+
    2023-12-29
    阿里 内存容量 器上
  • 如何在阿里云服务器上增加磁盘容量
    阿里云服务器是一种强大的云计算服务,为用户提供了可靠、安全和高性能的计算资源。当您需要扩展服务器的存储空间时,可以使用阿里云提供的磁盘扩容功能来增加磁盘容量。本文将详细介绍如何在阿里云服务器上增加磁盘容量,并提供一些示例来帮助您更好地理解...
    99+
    2024-01-16
    阿里 磁盘 器上
  • 如何在阿里云内网专线服务器上设置
    阿里云内网专线服务器是企业内部使用的一种专用网络服务,通过设置可以在阿里云上实现企业内部的网络通信。本文将详细介绍如何在阿里云内网专线服务器上设置。 一、如何开通阿里云内网专线服务器登录阿里云管理控制台。在控制台中,选择“网络与安全”-“内...
    99+
    2023-11-14
    阿里 内网 专线
  • 如何在阿里云上找到轻量应用服务器
    阿里云作为国内领先的云计算服务提供商,提供了多种类型的服务器供用户选择。其中,轻量应用服务器是一种专门为小型应用和网站设计的服务器产品。本文将介绍如何在阿里云上找到轻量应用服务器,并提供一些使用轻量应用服务器的常见示例。1. 登录阿里云控...
    99+
    2024-01-20
    阿里 服务器 如何在
  • 如何在阿里云服务器上切换到root用户
    阿里云服务器是一种具有高性能、高可用性的云计算平台,可以帮助企业和个人快速构建、部署和管理应用和服务。在使用阿里云服务器的过程中,我们可能需要切换到root用户进行一些高级的操作。本文将详细介绍如何在阿里云服务器上切换到root用户。 一、...
    99+
    2023-11-12
    阿里 切换到 器上
  • 阿里云虚拟主机带数据库如何高效管理您的在线业务
    阿里云虚拟主机带数据库是一种集服务器主机、数据库和应用程序于一体的云计算服务。它能够帮助您高效地管理您的在线业务,提供稳定、可靠、安全的运行环境。在本文中,我们将详细探讨如何使用阿里云虚拟主机带数据库来实现高效管理。 一、阿里云虚拟主机带数...
    99+
    2023-11-19
    在线 您的 高效
  • 如何在阿里云上添加IP地址到Web服务器
    在阿里云上使用Web服务器,我们需要添加IP地址以便访问我们的网站。本文将详细介绍如何在阿里云上添加IP地址到Web服务器。 一、打开阿里云控制台首先,我们需要在阿里云控制台上打开我们的Web服务器。在阿里云的控制台首页,找到并点击“计算”...
    99+
    2023-11-02
    阿里 地址 服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作