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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 为云栖社区总监课系列准备的课件讲义,面向开发者入门向讲解云原生的一些实践经验和发展方向。本文介绍了阿里云上基于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搭建和管理企业级网站应用
目录
相关文章
|
6天前
|
Kubernetes Cloud Native 云计算
云原生之旅:从容器到微服务的探索之路
【10月更文挑战第20天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文将深入探讨云原生的核心概念、技术架构及其在现代软件开发中的应用,揭示如何通过云原生技术提升业务的灵活性和可扩展性。
|
3天前
|
运维 Kubernetes Cloud Native
云原生入门:Kubernetes和容器化的未来
【10月更文挑战第23天】本文将带你走进云原生的世界,探索Kubernetes如何成为现代软件部署的心脏。我们将一起揭开容器化技术的神秘面纱,了解它如何改变软件开发和运维的方式。通过实际的代码示例,你将看到理论与实践的结合,感受到云原生技术带来的革命性影响。无论你是初学者还是有经验的开发者,这篇文章都将为你开启一段新的旅程。让我们一起踏上这段探索之旅,解锁云原生技术的力量吧!
|
18天前
|
安全 Cloud Native Shell
云上攻防:云原生篇&Docker容器逃逸
本文介绍了Docker的基本概念及其对渗透测试的影响,重点讲解了容器逃逸的方法。Docker是一种轻量级的容器技术,与虚拟机相比,具有更高的便携性和资源利用率。然而,这也带来了安全风险,特别是容器逃逸问题。文章详细描述了三种常见的容器逃逸方法:不安全的配置、相关程序漏洞和内核漏洞,并提供了具体的检测和利用方法。此外,还介绍了几种特定的漏洞(如CVE-2019-5736和CVE-2020-15257)及其复现步骤,帮助读者更好地理解和应对这些安全威胁。
云上攻防:云原生篇&Docker容器逃逸
|
22天前
|
Kubernetes Cloud Native 云计算
云原生之旅:构建你的第一个容器化应用
【8月更文挑战第75天】在数字化浪潮中,云原生技术成为推动企业创新和效率提升的关键动力。本篇文章将引导你开启云原生之旅,通过一个简易的步骤指南,帮助你构建并部署第一个容器化应用。我们将一起探索Docker容器的魅力,以及如何利用Kubernetes进行集群管理,实现服务的自动化部署、扩展和管理。无论你是云原生新手还是希望深化理解,这篇文章都将为你提供实践操作的启示和深入思考的契机。
|
26天前
|
消息中间件 负载均衡 Cloud Native
云原生之旅:从容器到微服务的架构演变
在数字化转型的风潮中,云原生技术以其灵活性、可扩展性和弹性而备受青睐。本文将通过一个虚拟的故事,讲述一个企业如何逐步拥抱云原生,实现从传统架构向容器化和微服务架构的转变,以及这一过程中遇到的挑战和解决方案。我们将以浅显易懂的方式,探讨云原生的核心概念,并通过实际代码示例,展示如何在云平台上部署和管理微服务。
|
26天前
|
运维 监控 Cloud Native
云原生之旅:从容器到微服务的演进之路
本文将引导您踏上云原生技术的探索之旅,从容器技术的核心概念出发,逐步深入到微服务架构的世界。我们将一起揭开云原生的神秘面纱,探索它如何改变现代软件的开发、部署和运维方式。通过本文,您将获得对云原生技术基础的深刻理解,并激发您进一步探索和应用这些前沿技术的兴趣和灵感。
|
26天前
|
运维 Kubernetes Cloud Native
云原生之旅:从容器化到微服务架构的演进之路
在数字化转型的浪潮中,云原生技术如同一股清流,为现代软件开发和运维带来革命性的变化。本文将通过深入浅出的方式,探索云原生的核心概念、关键技术以及它们如何共同塑造了今天的云基础设施和服务模式。我们将一起走进云原生的世界,了解它如何影响应用程序的设计、部署和扩展,并揭示这一趋势背后的哲学和实践。
28 1
|
1月前
|
Kubernetes Cloud Native 持续交付
云原生之旅:Docker容器化与Kubernetes集群管理
【9月更文挑战第33天】在数字化转型的浪潮中,云原生技术如同一艘航船,带领企业乘风破浪。本篇文章将作为你的航海指南,从Docker容器化的基础讲起,直至Kubernetes集群的高级管理,我们将一起探索云原生的奥秘。你将学习到如何封装应用、实现环境隔离,以及如何在Kubernetes集群中部署、监控和扩展你的服务。让我们启航,驶向灵活、可伸缩的云原生未来。
|
1月前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker与Kubernetes入门
【9月更文挑战第30天】在云计算的浪潮中,云原生技术正以前所未有的速度重塑着软件开发和运维领域。本文将通过深入浅出的方式,带你了解云原生的核心组件——Docker容器和Kubernetes集群,并探索它们如何助力现代应用的构建、部署和管理。从Docker的基本命令到Kubernetes的资源调度,我们将一起开启云原生技术的奇妙之旅。
|
1月前
|
Cloud Native 持续交付 Docker
云原生之旅:从容器到微服务的演变之路
【9月更文挑战第31天】在数字化转型的浪潮中,云原生技术如星辰般熠熠生辉。本文将带你探索云原生的核心——容器化与微服务架构,揭示它们如何共同推动现代软件开发的革命。通过深入浅出的语言和生动的比喻,我们将一起走进云原生的世界,理解它的魅力所在,并见证代码示例如何将理论转化为实践。
56 4

热门文章

最新文章