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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 随着云原生和容器编排技术的发展,阿里云容器服务 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 研发工作。目前产品专注于为使用容器企业用户提供免运维、高弹性,以容器为粒度的安全基础设施,助力企业以更高的效率、更敏捷的资源供给思维轻松应对在线业务波峰低谷。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
26天前
|
专有云 Serverless 持续交付
亚太唯一,阿里云再度入选Gartner®容器管理魔力象限领导者
Gartner正式发布 2024《容器管理魔力象限》报告,阿里云再度成为中国唯一一家入选「领导者象限」的科技公司。
|
1天前
|
存储 Kubernetes Docker
【赵渝强老师】Kubernetes中Pod的基础容器
Pod 是 Kubernetes 中的基本单位,代表集群上运行的一个进程。它由一个或多个容器组成,包括业务容器、基础容器、初始化容器和临时容器。基础容器负责维护 Pod 的网络空间,对用户透明。文中附有图片和视频讲解,详细介绍了 Pod 的组成结构及其在网络配置中的作用。
【赵渝强老师】Kubernetes中Pod的基础容器
|
1天前
|
运维 Kubernetes Shell
【赵渝强老师】K8s中Pod的临时容器
Pod 是 Kubernetes 中的基本调度单位,由一个或多个容器组成,包括业务容器、基础容器、初始化容器和临时容器。临时容器用于故障排查和性能诊断,不适用于构建应用程序。当 Pod 中的容器异常退出或容器镜像不包含调试工具时,临时容器非常有用。文中通过示例展示了如何使用 `kubectl debug` 命令创建临时容器进行调试。
|
1天前
|
Kubernetes 调度 容器
【赵渝强老师】K8s中Pod中的业务容器
Pod 是 Kubernetes 中的基本调度单元,由一个或多个容器组成。除了业务容器,Pod 还包括基础容器、初始化容器和临时容器。本文通过示例介绍如何创建包含业务容器的 Pod,并提供了一个视频讲解。示例中创建了一个名为 "busybox-container" 的业务容器,并使用 `kubectl create -f firstpod.yaml` 命令部署 Pod。
|
1天前
|
Kubernetes 容器 Perl
【赵渝强老师】K8s中Pod中的初始化容器
Kubernetes的Pod包含业务容器、基础容器、初始化容器和临时容器。初始化容器在业务容器前运行,用于执行必要的初始化任务。本文介绍了初始化容器的作用、配置方法及优势,并提供了一个示例。
|
21天前
|
人工智能 专有云 Serverless
亚太唯一!阿里云再度入选Gartner®容器管理魔力象限领导者
亚太唯一!阿里云再度入选Gartner®容器管理魔力象限领导者
95 2
|
25天前
|
弹性计算 Kubernetes 网络协议
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
|
2月前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
阿里云ACK容器服务生产级可观测体系建设实践
|
2月前
|
人工智能 Cloud Native 调度
阿里云容器服务在AI智算场景的创新与实践
2024年云栖大会,我们总结过往支持AI智算基础底座的实践经验、发现与思考,给出《容器服务在AI智算场景的创新与实践》的演讲。不仅希望将所做所想与客户和社区分享,也期待引出更多云原生AI领域的交流和共建。
|
2月前
|
人工智能 运维 Kubernetes
拥抱智算时代:阿里云容器服务智能、托管、弹性新体验
在2024云栖大会容器计算专场,给大家分享容器服务的新产品体验,本次分享,我们聚焦容器服务是如何通过智能、托管、弹性的产品新体验,来助力客户拥抱智算时代的。
下一篇
无影云桌面