阿里云容器如何实现 1000Pod/min 一键启动

简介: 随着云原生和容器编排技术的发展,阿里云容器服务 Kubernetes 版受到越来越多用户的青睐,但同时也存在非常多的问题,例如弹性、安全、稳定、运维等。面对这些问题,阿里云是如何思考的呢?在 QCon 全球软件开发大会(2021)北京站上,阿里云高级技术专家王志凌分享了阿里云在 Serverless 容器场景下的探索和实践。我们整理了他的演讲,以期帮你更好地使用容器服务。(下文以王志凌老师第一人称叙述)

嘉宾| 王凌志

随着云原生和容器编排技术的发展,阿里云容器服务 Kubernetes 版受到越来越多用户的青睐,但同时也存在非常多的问题,例如弹性、安全、稳定、运维等。面对这些问题,阿里云是如何思考的呢?在 QCon 全球软件开发大会(2021)北京站上,阿里云高级技术专家王志凌分享了阿里云在 Serverless 容器场景下的探索和实践。我们整理了他的演讲,以期帮你更好地使用容器服务。(下文以王志凌老师第一人称叙述)

容器用户的痛点与挑战

云上的容器企业用户可分为四类:共振型、毛刺型、混部型、平稳型, 如下图所示:

image.png

共振型各业务间存在关联,流量增长后各业务对资源的诉求同时增长,需要极致的弹性能力,如微博热点话题、电商大促、泛互联网行业流量高峰等。

毛刺型需短时间内创建海量资源,运行后释放所创资源,需极致的库存和弹性能力,常见于离线型业务,如大数据计算任务、Job 任务、AI 仿真任务等。

混部型拥有多个业务,不同业务不同时间段对算力要求不同,优先级不同,存在多部门业务资源争抢问题 ,如白天为在线服务高峰期,晚上为离线 Job 型业务高峰。此外,多家企业部署在同一个 Kubernetes 上还存在容器逃逸的数据安全和攻击应对问题。

平稳型业务此处暂不赘述。

综上所述,云上容器用户的痛点我们整体上可以归纳为五类:弹性能力不足;成本和资源无法平衡;安全性不足;容灾、稳定性能力不足;性能或异构管理复杂度过高。这些痛点阿里云是如何解决的呢?

阿里云 Serverless 容器实例技术内幕

如下图右侧所示:容器实例的资源形态(以阿里云为例)即为一个 Elastic Container Instance 中包含一个 Pod,Pod 中包含多个容器。

image.png

容器实例在和 Kubernetes 结合时,可实现完整的资源供给,在普通 Kubernetes 中,可实现 Node 资源的弹性扩充。

下图为两个容器实例的例子:

image.png

左图为容器实例单实例模拟实验。一条命令即可起一个单容器实例。如图中为 eci run 5 兆带宽的 nginx,一条命令后便起了一个拥有 5 兆公网带宽可使用 eci 进入的 nginx 实例。其操作和传统 Docker 大同小异。

右图为容器实例本地集成的例子。如图所示,在笔记本上安装 mini Kubernetes,同时安装 Virtual Node 将资源调度指定到 Virtual Node 上,即可一键创建出数万核资源。

阿里云容器实例的整体架构

阿里云容器本身定义在 PaaS 层上,但是容器实例定义在 IaaS 层上,和云服务器 ECS 同基础设施层。

image.png

这是由于容器均处于单租户模式下,而容器实例处于多租户模式下。多租户模式意味着需准备计算资源、存储资源、网络资源等等,所以容器实例专注的不是容器交付本身,而是以容器所需的基础设施资源交付为重点。

阿里云容器实例复用了阿里基础设施的计算、网络、存储相关架构。具体来说,计算采用神龙物理机,网络采用洛神 2.0,存储采用盘古。

阿里云打通了 IaaS 层全栈的日志采集和监控报警。其中日志采集采用了两类特征学习:一类通过提取故障特征实现了故障预测及硬件故障预警等,若发现预警可将服务器或容器热迁移到其他物理机上;另一类特征针对用户业务,下文会详述。

此外,阿里云为用户预留了内部运维或故障迁移的热迁移时间。

Serverless 容器的架构演进

image.png

2018 年,阿里云容器实例最初为 on ECS 架构,开容器实例时需开大量 ECS 、建 ECS 资源池。演进后,ECI 和 ECS 均混部在物理机上,共享物理集群和库存。

业界容器实例安全沙箱实现很多,常见的在物理机上安装 Kubernetes 后 runv 即可实现,但在多租户模式下,业界的 runv 模式均只考虑了资源隔离性,未考虑数据安全性。阿里云采用自研的安全沙箱“袋鼠”,结合重构了 Containerd 中 image 和 volume 相关的实现,最终保证了用户数据界限在其安全沙箱内部。

通过混部容器实例,可复用服务器库存,解决产品库存供给能力的问题,也便于进行全局的资源管理、使用统一基础设施存储与网络、复用 VM 资源强隔离机制、复用 VM 稳定性运维能力进行故障预测恢复和 Pod 级别热迁移,另外也提供了支持 Pod 级别 SLA 能力。

异构与 Pod 级别 SLA

开发常常抱怨运维提供的资源能力不足,本质上是缺乏 SLA 保证。Node 购买时可保证其 SLA,但是开多个 Pod 后就难以保证了。为此阿里云在并池基础上实现了 Pod 级别的 SLA 保证。

image.png

阿里内部的达摩院语音、自动驾驶、钉钉视频,均严格按照 SLA 机制使用 Pod,即定义相应的规格,开发向运维提资源需求时必须使用约定的规格数据。该规格对服务器来说代表 CPU 主频、PPS、网卡队列等,对云盘来说代表 bps、iops。

SLA 下沉到 Pod 级别,还可实现大规模的异构资源管理。大型公司业务种类繁多,包括 GPU 模式、计算密集型、网络密集型等,但在一个集群中指定不同 SLA 规格 Node 的异构资源管理相当复杂,若每种异构架均构建一个独立集群,运维必将苦不堪言。实现了 Pod 级别 SLA 后,运维完全不需要关心集群级别异构特性,业务可在一个集群中自主指定所需异构模型。

1000Pod/min 启动实现:软硬全栈优化

image.png

阿里云的 Sandbox 包含负责轻量化管理的 Agent、自定 Container 和轻量级、虚拟化的安全沙箱三部分。

弹性效率依赖于控制面。在控制面上,阿里云实现了预热、资源复用、网络存储预热、镜像缓存、全链路轻量化、用户特征提取等。

资源复用即前文提及的通过以用户业务为特征的学习机制筛选某些用户行为,如频繁创建释放大量资源等,针对性实现资源层面的复用。

Serverless 下用户无法提前在 Node 节点上预热镜像。但多数用户的镜像和存储均在云上,同时无论是何处创建容器都需拉镜像,因此阿里云打通了基础设施存储跟容器镜像 cache 能力。用户不必拉镜像即可直接使用镜像,通过镜像 cache、nydus 按需读取和 P2P 模式三种方式,实现一秒 start 超大镜像。

安全容器架构

在安全方面,阿里云采用的自研安全沙箱体系如下图所示:

image.png

该体系运行时分为三种模式:runc、rund、rune。runc 运行在单租户模式下;rund 完全隔离类似开源的 runv;rune 为安全 runtime。

阿里云在引擎层通过加速、高并发,轻量化提高了资源供给效率,实现了单安全沙箱启动 200 ms 左右。

具体来说,在网络上采用了 eBPF,提高自身网络性能的同时为用户提供 Mesh 透明拦截或监控的能力;在存储上一方面打通本地临时存储和块存储,避免中间协议转换,另一方面采用 copy-on-write 机制,防止同机器的容器、容器镜像重复拷贝。

在安全上,第一,通过加密形态的全链路通道(包括物理机打入的流量)解决了安全通道问题;第二,基于 TPM(Trust platform model)实现了硬盘数据加密,第三,通过英特尔 SGX 衍生出的 Inclavare Containers 模式保证了容器内存数据的安全。该模式软硬一体,如下图所示:

image.png

阿里云容器实例经典使用场景

Serverless Kubernetes 架构实践
Serverless 容器实例最常见的模式为全 Serverless 形态,可自定义虚拟节点或虚拟集群,适用于一个虚拟集群即为一个可用区,或定制某个虚拟集群为特殊规格资源等的情况。

image.png

已广泛使用 Kubernetes 购买了多台服务器的公司,可采用自有 Kubernetes+ECI 的模式,日常时在现有物理节点上启动 longrun 类型的任务,极致利用已有 CPU,高峰期时使用虚拟节点扩容。

image.png

该方案以标准 Provider 模式交付,用户不存在平台成本,无论在自己的 IDC 或任何云上均可迁移;创建的 Pod 全局打散,可消除单 Pod 宕机后的影响;一个虚拟节点可代表数几百万核甚至上千万核的资源,无需扩容即可保证高峰期容量。

此外,若用虚拟机形态或裸金属形态做 Node,需先购买服务器或裸金属(图中红色)才能开 Pod(图中蓝色),在 Serverless 形态可只开 Pod,经济效益显著。

image.png

实践一:钉钉 100 万核资源实践
疫情时期,由于学生上课和在家办公,钉钉的资源被极致利用。第一波疫情时,钉钉用服务器扩容物理 Node,拉通众多团队,花费了 48 小时才扩了 100 万核资源。

这让钉钉意识到资源供给效率的重要性。因此去年钉钉从传统服务器形态演进到完全 Serverless Kubernetes 形态。演进后,压测到 100 万核只需 30 分钟,且这 30 分钟还包括了业务初始化时间。

image.png

此处关键在于,在服务器形态时需先扩充物理节点(部分需要特殊的初始化),扩完后再创 Pod。

实践二:成本与资源平衡
下图为某司极致按需使用 GPU 的时序图:

image.png

图中第一步为非推理任务,第二步为推理任务,第三步又为非推理任务。此时,多数用户会选择直接创建 GPU,如此便浪费了第一步第三步的资源。阿里云支持用户在 runtime 时动态 attach GPU,跑完其业务后再释放 GPU。

多数用户在做蓝绿发布时,可能需准备 2 倍机器专门用作发布。在 Serverless 下,如已有 1 万核资源,可再用 Serverless Pod 创建 1 万核资源。发布时将服务切到 Serverless 上运行,运行正常后再部署到 Node 上,随后释放 Serverless 资源即可。如此可节省大量成本。

image.png

未来预测

根据现状,可预测云原生和 Serverless 未来热点如下:

  1. Serverless 持续火爆发展;
  2. 混合云实现标准化;
  3. 弹性按需付费;
  4. 实现 Pod 级别 SLA。

嘉宾介绍

王凌志,10 年基础设施研发经验,2015 年加入阿里云弹性计算团队,致力于基础设施相关研发,2018 年参与并主导了新一代 Serverless 基础设施产品 ECI 研发工作。目前产品专注于为使用容器企业用户提供免运维、高弹性,以容器为粒度的安全基础设施,助力企业以更高的效率、更敏捷的资源供给思维轻松应对在线业务波峰低谷。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
10月前
|
存储 Kubernetes 网络安全
关于阿里云 Kubernetes 容器服务(ACK)添加镜像仓库的快速说明
本文介绍了在中国大陆地区因网络限制无法正常拉取 Docker 镜像的解决方案。作者所在的阿里云 Kubernetes 集群使用的是较旧版本的 containerd(1.2x),且无法直接通过 SSH 修改节点配置,因此采用了一种无需更改 Kubernetes 配置文件的方法。通过为 `docker.io` 添加 containerd 的镜像源,并使用脚本自动修改 containerd 配置文件中的路径错误(将错误的 `cert.d` 改为 `certs.d`),最终实现了通过多个镜像站点拉取镜像。作者还提供了一个可重复运行的脚本,用于动态配置镜像源。虽然该方案能缓解镜像拉取问题,
1019 3
|
安全 持续交付 云计算
课时5:阿里云容器服务:最原生的集成Docker和云服务
阿里云容器服务以服务化形式构建容器基础设施,大幅提升开发效率,简化应用部署流程。通过Docker容器和DevOps工具(如Jenkins),实现自动化部署与迭代,优化企业内部复杂部署问题。该服务支持GPU调度、混合云架构无缝迁移,并与阿里云产品体系无缝集成,提供安全防护、网络负载均衡等多重功能支持。凭借微服务架构,帮助企业突破业务瓶颈,提高资源利用率,轻松应对海量流量。
530 0
课时5:阿里云容器服务:最原生的集成Docker和云服务
|
弹性计算 人工智能 资源调度
DeepSeek大解读系列公开课上新!阿里云专家主讲云上智能算力、Kubernetes容器服务、DeepSeek私有化部署
智猩猩「DeepSeek大解读」系列公开课第三期即将开讲,聚焦阿里云弹性计算助力大模型训练与部署。三位专家将分别讲解智能算力支撑、Kubernetes容器服务在AI场景的应用实践、以及DeepSeek一键部署和多渠道应用集成,分享云计算如何赋能大模型发展。欲观看直播,可关注【智猩猩GenAI视频号】预约。 (239字符)
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
人工智能 Kubernetes Serverless
阿里云向全球客户推出创新容器计算服务ACS,可降低算力成本高达55%
阿里云向全球客户推出创新容器计算服务ACS,可降低算力成本高达55%
|
弹性计算 监控 持续交付
面对热点事件,阿里云如何通过云上弹性与容器服务帮助客户应对流量洪峰
面对热点事件,阿里云如何通过云上弹性与容器服务帮助客户应对流量洪峰
443 0
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
|
11月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
1378 108