从容器到云原生 – 极致弹性

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 为云栖社区总监课系列准备的课件讲义,面向开发者入门向讲解云原生的一些实践经验和发展方向。本文介绍了阿里云上基于Kubernetes弹性伸缩的基本概念、实践经验和发展方向

云栖社区总监课系列准备的课件讲义,面向开发者入门向讲解云原生的一些实践经验和发展方向。

image.png

image.png

在企业上云的过程中,我们可以看到云计算演进的路径

第一个阶段是以搬迁上云为主 - 通过简单的 lift and shift,把运行在物理机上面的应用,迁移到虚拟化环境中,这个过程是以降低成本为主要驱动力的,应用的开发和运维方式并没有非常不同。

第二阶段我们称之为云就绪。企业开始关注整体拥有成本,并希望利用云计算提升创新效率。从运维方面开始利用利用虚拟机镜像或其他标准化、自动化的方式部署应用,利用专业化的RDS,SLB等云服务,提升了运维效率和SLA。同时,在应用架构上开始采用微服务架构, 每个服务可以独立部署、独立伸缩,提升了系统的可扩展性和可用性。

第三阶段就是今天的云原生时代。创新成为企业的核心竞争力,大多数企业开始完全拥抱云计算,很多应用从诞生之初就生长在云端。云计算已经重塑软件从架构设计、开发、构建、交付等整个生命周期。

首先,应用负载可以在专有云、公共云等平台之间无缝迁移,甚至可以将计算和智能延展到边缘现场环境中,实现了无边界的云计算;其次容器、服务网格、无服务计算等新的计算范型不断涌现,追求极致的敏捷和弹性,可以更加快速和低成本地创新、试错、和业务拓展;此外DevOps理念也被更多开发者广为接受,推动着IT组织架构改变和文化变革。

这个时代我们也非常感谢CNCF和其他开源技术社区的共同推动云原生生态的发展。

image.png

阿里云Kubernetes服务ACK同时支持阿里云公共云和专有云,提供了对阿里云基础能力的的优化整合,同时我们也把阿里集团在大规模分布式系统的实践沉淀成为普惠的能力,以与云原生的方式开放给所有用户。

首先,我们利用Kubernetes实现了一个基础设施抽象层,让容器化应用轻松地利用阿里云底层强大的计算、存储、网络等能力,比如面向追求极致效率的深度学习、高性能计算场景:我们可以采用裸金属机、或者GPU, FPGA实例等异构计算能力;配合阿里云Terway网络驱动使用弹性网卡可以几乎无损耗地达到 9Gb网络带宽,也可以采用融合以太网的RDMA协议(RoCE)技术25Gb网络;还可以采用CPFS这样并行文件系统提升处理效率,提供高达1亿IOPS和1TBps吞吐的能力。

我们提供两种不同的服务形态来简化集群生命周期管理。托管 Kubernetes,用户可以根据自己的工作负载选择节点类型,由阿里云负责集群创建、升级、扩容、监控、告警等集群生命周期管理操作。用户可以选择master节点托管,进一步简化运维和降低成本。无服务器 Kubernetes,用户无需关注任何底层资源和集群管理,应用按需部署扩容。

在此之上容器服务提供了更多的能力

  • 多集群管理:支持不同的region,甚至云上云下集群的统一管理
  • 安全合规:阿里云关注企业级安全合规:支持了众多金融企业
  • 混合云、多云:阿里云借助Apsara Stack和Apsara Stack Agility,可以实现混合云平台,容器服务加强了混合云环境下的应用管理
  • 弹性:今天我们会深入介绍弹性方面的进展
  • 应用生命周期 :除了了对容器日志、监控、告警等能力和阿里云的连接,阿里云Kubernetes服务还有很多增强,让您可以更加安全、可控地管理和发布容器化应用。

在容器化内容管理方面:我们除了支持容器镜像管理,还提供了Helm应用图表的支持。在CNCF调查中,Helm已经占比68%,成为主流的容器应用打包规范。另外也提供了容器应用与云服务的整合Open Service Broker API的支持

在此之上可以支撑不同的业务,除了大家熟知的DevOps、微服务应用;还有越来越多的企业应用容器化,比如.net,JEE等应用,通过容器化加速IT架构现代化,提升业务敏捷性。同时客户和阿里云有大量的创新业务基于阿里云容器服务,比如,阿里云的AI预测服务,IoT应用平台,区块链服务等业务都基于ACK。

image.png

云计算是通过规模效应,平衡不同租户的业务波峰波谷,大大减少宏观规模的IT使用成本。在云时代,弹性已经成为新常态,也是CNCF调查中客户最为关注的云原生应用特性之一。

天猫双11购物狂欢节全天交易总额2135亿元。作为双11技术后台支撑方,阿里云在今年双11期间新增调用的弹性计算能力累计超过1000万核,相当于10座大型数据中心,创造了“脉冲计算”的新纪录。

当然很多的业务场景不是可以提前规划或者可预期的,比如大家喜闻乐见的明星八卦会导致社交网站的瞬时过载。

周鸿祎在乌镇互联网大会开玩笑 “如果云计算能同时支撑5个小鲜肉结婚,4个明星出轨不宕机,云计算才是真的牛。”

要达到上述目标,不但要求基础设施具备弹性,在短时间内有足够资源可以提供出来,也需要应用架构拥有弹性可以充分利用扩容的计算资源承载更多的业务负载。

在应用层不同类型的工作负载对于资源弹性伸缩的要求有所不同,

  • 很多在线业务有明显的波峰波谷效应,比如大部分业务类网站的峰值在白天,而娱乐类网站大多在晚间达到业务高峰;在线业务也常会出现瞬时的业务尖峰。
  • 计算类的离线任务很多对调度时机不敏感,如机器学习、基因测序,但是他们成本敏感
  • 定时任务对调度稳定性敏感

在云时代,弹性伸缩解决的不仅是激增的流量峰值与资源容量规划的矛盾,也是资源成本与系统可用性的博弈。

image.png

所有弹性的架构大多由有几个基本部分组成

  • 监控指标的采集
  • 监控指标聚合,判断是否触发伸缩条件
  • 执行伸缩动作

Kubernetes将支持弹性伸缩分成两个维度:

  • 资源维度:保障集群资源池大小满足整体容量规划,由于资源不足导致未调度的Pod事件作为资源维度伸缩的触发条件。
  • 应用维度:保障应用负载处在容量规划之内

对伸缩策略分为两类

  • 水平伸缩 (Scale out/in)

    • Cluster Autoscaler (CA) -> 自动调整资源池(Worker节点)规模
    • Horizontal Pod Autoscaler (HPA) -> 自动调整Pod的复本数量
  • 垂直伸缩 (Scale up/down)

    • 资源池没有类似支持
    • Vertical Pod Autoscaler (VPA) - 自动调整应用资源分配

image.png

Kubernetes HPA支持以下三种不同的监控指标:

  • Resource metrics:由Metrics Server 提供 (v2beta1)
  • Custom metrics:由Prometheus adapter提供 (v2beta1)
  • External metrics:由外部provider提供,主要是非k8s集群内部的触发条件 (v2beta2)

HPA Controller 通过 Metrics Aggregator 聚合 Metrics Server和Prometheus adapter采集的性能指标,并计算一个Deployment需要多少复本可以支持目标的工作负载。

为了防止扩缩容震荡,K8s提供缺省冷却周期设置:扩容冷却时间3分钟,缩容冷却时间5分钟

image.png

Cluster Autoscaler 会监听所有的Pod,当Pod出现因资源不足导致未调度的时候,会将配置的Auto Scaling Group(ASG弹性伸缩组)模拟成为一个虚拟节点,尝试将未调度的容器进行重新调度,并选择一个符合条件ASG进行节点伸缩。没有扩容任务的时候,会便利每个节点的Request资源利用率,低于阈值的时候会逐个删除。

一个集群可以有不同的伸缩组,比如包含CPU实例的ASG,GPU实例的ASG等

比如,本页的示例就是当一个GPU应用无法调度时,会选择一个GPU ASG来进行扩容的过程

阿里云在基本的Cluster AutoScaler上提供了一系列的增强:

  • 多伸缩组、多可用区、多实例类型优化弹性伸缩成功率和成本
  • 资源占位模式提供缓冲池支持更顺滑的负载伸缩
  • 模拟分组标签与调度策略支持更灵活的调度伸缩
  • 定时伸缩、监控指标伸缩支持更全面的自定义伸缩
  • 竞价实例ASG,降低资源的成本

相关能力已经开源
https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler/cloudprovider/alicloud

image.png

与节点的扩容相比,节点的缩容是更为复杂的事情。我们要避免节点缩容导致应用的稳定性收到影响。为此K8s提供了上述规则来保障安全缩容。

image.png

竞价型实例(Spot instance)是阿里云弹性计算的一种实例类型,也叫抢占式实例。创建竞价实例时,必须为指定的实例规格设置一个价格上限,如果当前市场价格低于出价时,就能成功创建竞价实例,并按当前市场价格计费。默认能稳定持有实例一小时。之后,如果市场价格高于出价或者资源供需关系变化时,实例会被自动释放。

合理的使用阿里云ECS竞价实例,最高可以为您降低50% – 90% 的运营成本(相比按量付费的实例)。竞价实例对于批量计算或者离线任务等价格敏感的场景有很重要的意义。阿里云还推出了竞价型GPU云服务器,极大程度的降低深度学习和科学计算成本,普惠众多开发者。

Kubernetes集群提供了多种竞价策略,您可以同时选择多AZ多种实例类型进行竞价,系统会根据当前规格定价,选择价格最优规格实例进行创建,大大提升了创建实例的成功率并降低成本。
弹性扩容出的Spot节点实例会有 “workload_type=spot”标签,通过node selector,可以将可以能够适配Spot instance特性的应用负载调度到新扩容实例上。

image.png

基因测序是精准医疗基础技术,它需要海量的计算能力,而且有上千种不同框架参与计算。最近阿里云容器团队与安诺优达基因科技有限公司通力合作,利用容器技术封装基因计算能力,并允许科研人员自行定义数据处理流程;实现了云下及云上上千节点的混合云部署与统一调度,让基因数据的处理效率提升2-3倍。

利用 Cluster Autoscaler,每批基因测序任务流水线5分钟内会扩容数百台节点,跑完回收,并且进行优化下次启动速度,节约大量资源成本,又保证了快速调度能力。

image.png

HPA对无状态服务非常有帮助,通过增加复本数量来应对业务增长。但是对于一些遗留的有状态应用,比如数据库,消息队列等,很多无法通过水平扩展来实现扩容,通常需要分配更多的计算资源来实现扩容。

Kubernetes中提供了request/limits这样资源调度和限制策略,然而如何根据业务水平,正确设置应用资源,是一个挑战。如果分配的资源用量过小,导致稳定性问题,比如OOM, CPU争抢,如果设置的资源过高,则会影响系统利用率。

VPA要解决的问题:对有状态服务资源进行自动垂直扩展,提升系统运维的自动化效率和利用率。

我们看一个典型VPA执行流程

  1. 用户配置一个 VPA 策略
  2. VPA Recommender持续从Prometheus、metrics server获取监控信息、也会从集群事件中获取驱逐、OOM等事件。
  3. VPA Recommender根据历史监控数据信息,基于算法预测模型,计算容器资源。如果发现Pod分配的资源不足,提供推荐值容器的资源请求给VPA。(注意:VPA只关注Request,会默认设置Limit为无限。)在这个例子中,应用内存利用率超过水位。
  4. VPA Updater侦听到Pod的资源建议,执行更新命令,删除Pod。
  5. Deployment Controller会发起重新创建Pod的操作,
  6. VPA Admission Controller,拦截创建Pod的Spec,获取VPA建议并修改资源调整。在这个例子中增加了内存的用量。
  7. 利用更新后的Pod的request资源配置来创建Pod

VPA目前还是在一个比较早期的状态,成熟度还有待提升。包括它的监控数据模型、预测计算模型和更新操作实现都有待完善。同时为了避免VPA Updater更新的不确定性,社区也建议可以让Updater变成可选,VPA只提供一些资源分配建议,而让用户决定如何执行扩缩容等操作。

image.png

阿里云在5月份推出了Serverless Kubernetes容器服务,无需节点管理和容量规划,按应用所需资源付费,弹性扩容。

Serverless Kubernetes的底层是构建在阿里云针对容器优化的虚拟化方案之上,提供了轻量、高效、安全的容器应用执行环境。Serverless Kubernetes还充分利用阿里云提供的负载均衡,DNS服务发现,实现了服务发现,通过SLB7层路由等能力提供Ingress支持,对Kubernetes应用的大多数语义兼容,无需修改即可部署

Serverless的HPA目前支持autoscaling/v1,支持CPU的伸缩,计划12月初支持autoscaling/v2beta1的版本,增加Pod其他指标的伸缩需求(内存、网络)。

image.png

我们看看Serverless Kubernetes是如何实现的,它的核心组件项目代号为Viking,其缘起是古代维京人战船以敏捷和快速而著称。
Viking:把自己注册成为Kubernetes集群中的一个虚拟节点,实现了kubelet, kube-proxy, kube-dns等组件行为,负责管理Sandbox生命周期、网络配置、服务发现等。它会与集群API Server交互,监听当前namespace下的Pod、Service、Ingress等变化事件,并为Pod创建ECI弹性容器实例、为服务创SLB或注册DNS域名,配置路由规则等。

ECI是一个面向容器的轻量级虚拟化实现, 他内部的agent: 它会负责Pod的生命周期管理,负责容器的启动顺序、健康检查、进程守护、监控信息上报等能力。ECI底层可以基于ECS虚拟机,也可以基于神龙+轻量级虚拟化技术。

Serverless Kubernetes提供了一个面向Cloud的弹性伸缩设计

image.png

侦听 Pod, Service, Ingress等资源变化,与云资源状态双向同步
比如Deployment部署一个应用时,会创建/删除Pod
当通过一个Ingress是,会自动利用创建SLB,并且利用阿里云的SLB能力实现路由规则,并且绑定后端的ECI

image.png

我们还可以将ECI以Serverless add-on的方式与经典的K8S集群混合管理,细化弹性粒度,优化成本,可以和Istio等结合一起使用。

其Serverless add-on基于微软推出的框架Virtual Kubelet构建,支持ECI的Virtual Kubelet相关项目已经开源,所有开发者可以利用相关能力。

我们也在持续加强,未来Viking的很多能力也将出现在Serverless add-on中

关于弹性伸缩的话题的深入讨论,可以阅读容器服务团队博客中相关内容 https://yq.aliyun.com/teams/11

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1月前
|
监控 安全 Cloud Native
阿里云容器服务&云安全中心团队荣获信通院“云原生安全标杆案例”奖
2024年12月24日,阿里云容器服务团队与云安全中心团队获得中国信息通信研究院「云原生安全标杆案例」奖。
|
2月前
|
存储 人工智能 调度
容器服务:智算时代云原生操作系统及月之暗面Kimi、深势科技实践分享
容器技术已经发展成为云计算操作系统的关键组成部分,向下高效调度多样化异构算力,向上提供统一编程接口,支持多样化工作负载。阿里云容器服务在2024年巴黎奥运会中提供了稳定高效的云上支持,实现了子弹时间特效等创新应用。此外,容器技术还带来了弹性、普惠的计算能力升级,如每分钟创建1万Pod和秒级CPU资源热变配,以及针对大数据与AI应用的弹性临时盘和跨可用区云盘等高性能存储解决方案。智能运维方面,推出了即时弹性节点池、智能应用弹性策略和可信赖集群托管运维等功能,进一步简化了集群管理和优化了资源利用率。
|
2月前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
178 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
2月前
|
供应链 安全 Cloud Native
阿里云容器服务助力企业构建云原生软件供应链安全
本文基于2024云栖大会演讲,探讨了软件供应链攻击的快速增长趋势及对企业安全的挑战。文中介绍了如何利用阿里云容器服务ACK、ACR和ASM构建云原生软件供应链安全,涵盖容器镜像的可信生产、管理和分发,以及服务网格ASM实现应用无感的零信任安全,确保企业在软件开发和部署过程中的安全性。
|
2月前
|
人工智能 Kubernetes Cloud Native
阿里云容器服务,智算时代云原生操作系统
2024云栖大会,阿里巴巴研究员易立分享了阿里云容器服务的最新进展。容器技术已成为云原生操作系统的基石,支持多样化的应用场景,如自动驾驶、AI训练等。阿里云容器服务覆盖公共云、边缘云、IDC,提供统一的基础设施,助力客户实现数字化转型和技术创新。今年,阿里云在弹性计算、网络优化、存储解决方案等方面进行了多项重要升级,进一步提升了性能和可靠性。
|
2月前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
2月前
|
Kubernetes Cloud Native Docker
云原生之旅:从容器化到微服务
本文将带领读者踏上云原生的旅程,深入探讨容器化和微服务架构的概念、优势以及它们如何共同推动现代软件的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务应用,并解释相关的配置和操作。无论你是云原生新手还是希望深化理解,这篇文章都将为你提供有价值的见解和实操指南。
|
3月前
|
Kubernetes Cloud Native 开发者
云原生入门:从容器到微服务
本文将带你走进云原生的世界,从容器技术开始,逐步深入到微服务架构。我们将通过实际代码示例,展示如何利用云原生技术构建和部署应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和启示。
|
3月前
|
Kubernetes Cloud Native 云计算
云原生入门:Kubernetes 和容器化基础
在这篇文章中,我们将一起揭开云原生技术的神秘面纱。通过简单易懂的语言,我们将探索如何利用Kubernetes和容器化技术简化应用的部署和管理。无论你是初学者还是有一定经验的开发者,本文都将为你提供一条清晰的道路,帮助你理解和运用这些强大的工具。让我们从基础开始,逐步深入了解,最终能够自信地使用这些技术来优化我们的工作流程。
|
3月前
|
Kubernetes Cloud Native Docker
云原生之旅:从传统架构到容器化服务的演变
随着技术的快速发展,云计算已经从简单的虚拟化服务演进到了更加灵活和高效的云原生时代。本文将带你了解云原生的概念、优势以及如何通过容器化技术实现应用的快速部署和扩展。我们将以一个简单的Python Web应用为例,展示如何利用Docker容器进行打包和部署,进而探索Kubernetes如何管理这些容器,确保服务的高可用性和弹性伸缩。