写点什么

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

  • 2022-04-20
  • 本文字数:3965 字

    阅读完需:约 13 分钟

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

嘉宾| 王凌志

 

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

 

容器用户的痛点与挑战

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

 


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

 

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

 

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

 

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

 

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

 

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

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

 


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

 

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

 


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

 

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

 

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

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

 


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

 

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

 

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

 

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

 

Serverless 容器的架构演进

 


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 保证。



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

 

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

 

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



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

 

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

 

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

 

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

 

安全容器架构

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

 


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

 

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

 

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

 

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

 


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

Serverless Kubernetes 架构实践

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

 


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



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

 

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

 


实践一:钉钉 100 万核资源实践

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

 

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

 


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

 

实践二:成本与资源平衡

下图为某司极致按需使用 GPU 的时序图:

 


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

 

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



未来预测

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

  1. Serverless 持续火爆发展;

  2. 混合云实现标准化;

  3. 弹性按需付费;

  4. 实现 Pod 级别 SLA。

 

嘉宾介绍

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

 

外部链接

模拟实验:CLI 体验单容器实例:单实例实验

模拟实验:本地自建 k8s,云上轻松扩容 1 万核资源实践:k8s集群弹ECI实验

Inclavare containers 开源代码:https://github.com/alibaba/inclavare-containers

 

活动推荐

2022 年 6 月,ArchSummit 全球架构师峰会(北京)即将落地,会议设置微服务治理之基础架构、LakeHouse 架构演进与数据治理实践、高可用、高并发架构设计、架构能力输出、数据处理与技术管理优化架构等技术等 20 个方向,邀请美团、阿里、腾讯、字节、微软、华为、B 站、车好多等知名公司一线技术专家现场分享其业务实践与落地经验。大会日常已上线官网,现场门票火热售卖中,感兴趣的同学可扫描图中二维码了解详情。



2022-04-20 10:115313

评论

发布
暂无评论
发现更多内容

Vue 3自定义指令开发

葡萄城技术团队

阿里巴巴正式推出2021年金三银四1000道Java工程师面试题手册(含答案)

Java架构追梦

Java 阿里巴巴 面试 架构师 金三银四

Flink + Iceberg 全场景实时数仓的建设实践

Apache Flink

flink

程序员必知的几种限流方案

Java架构师迁哥

安卓驱动开发!系统盘点Android开发者必须掌握的知识点,搞懂这些直接来阿里入职

欢喜学安卓

android 程序员 面试 移动开发

百度信息流和搜索业务中的弹性近线计算探索与应用 | 文末送福利

百度Geek说

Java 大前端 算法工程师 技术宅

个人信息严控的时代,AI如何实现“安全”的智能营销?

星环科技

大数据

为什么这么一道iOS小题目,这么多面试者搞不定?

Geek_24a3d9

面试 技术交流 ios开发

灵雀云Kube-OVN进入CNCF沙箱,成为CNCF首个容器网络项目

York

灵雀云 Kubernetes Kube-OVN

[高并发]高并发分布式锁架构大解密,不是所有的锁都是分布式锁!!

Geek_0o5u34

【Android Tips】小厂的扫码还能怎么做?

李小四

机器学习 二维码 扫码 微信扫码

IDEA 异常退出 解决方法

任广印

IDEA

甲方日常 91

句子

工作 随笔杂谈 日常

【Mysql-InnoDB 系列】幻读、死锁与事务调度

程序员架构进阶

MySQL 架构 innodb 事务 28天写作

「产品经理训练营」第三章作业

Sòrγy_じò ぴé

产品经理训练营 极客大学产品经理训练营 产品训练营

深扒!用6部分讲完Java性能调优:多线程+设计模式+数据库

996小迁

数据库 JVM 设计模式 多线程 性能调优

高阶段位机房管理:3D集装箱数据中心,触发科技“火苗”的燃烧

一只数据鲸鱼

数据可视化 3D可视化 机房管理 数据中心可视化 集装箱式数据中心

即构SDK新增焦点语音功能,可实现特定用户语音的聚焦

ZEGO即构

Elasticsearch 批量查询 mget

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

不明白线程池?那看看这篇,附10道面试题

田维常

线程池

android开发面试准备!Android高级工程师进阶学习,已开源

欢喜学安卓

android 程序员 面试 移动开发

《论雨伞道德》- 不要和自己的良心捉迷藏

石云升

读书笔记 28天写作 雨伞道德

【CSS】不规则阴影

德育处主任

css3 html/css CSS小技巧 28天写作 纯CSS

十年运维经验总结出的智能运维系统落地方案

小术晓术

人工智能 运维 企业信息化 运维自动化 信息化

Maintainer 聚光灯:KubeEdge 和 Volcano 的王泽锋

华为云原生团队

开源 边缘计算 华为云 批量计算

IntelliJ IDEA 20周岁啦,为期2天的周年庆活动对开发者免费开放

YourBatman

eclipse ide IDEA IntelliJ IDEA

IDEA Malformed argument has embedded quote

会飞的猪

IDEA

前端知识总结输出文章目录大全

梁龙先森

JavaScript 大前端 编程语言 28天写作

【CSS】波纹效果

德育处主任

CSS小技巧 28天写作 纯CSS

Android JNI模板与读取系统属性笔记

Changing Lin

android

try-catch-finally中的4个大坑,不小心就栽进去了!

王磊

Java 异常处理 try finally

阿里云容器如何实现 1000Pod/min 一键启动_云原生_李慧文_InfoQ精选文章