秒级弹性!探索弹性调度与虚拟节点如何迅速响应瞬时算力需求?

news2024/11/18 12:31:39

作者:吴昆

前言

在前面的文章《弹性调度助力企业灵活应对业务变化,高效管理云上资源》中,我们介绍了阿里云容器服务 ACK 弹性调度为了帮助客户解决在使用云上弹性资源时,面对的“难以差异化控制业务资源使用量,缩容时部分业务 Pod 未释放”等挑战,提供了按照多级资源的优先顺序进行调度,以及按照定义的优先顺序进行缩容的能力。

本文将介绍弹性调度如何使用虚拟节点来满足您的业务弹性需求。

企业在实施应用弹性过程中,弹性速度弹性位置是重点关注的两个核心指标。

对于追求高可用以及稳定性的企业来说,敏捷的弹性能够在业务流量突增时,保证系统的连续性与稳定性。同时,通过跨多地域部署应用,可以在地域性故障发生时,有效地维持服务的持续可用性。

对于大数据处理任务的企业来说,快速的弹性能够缩短任务执行时间,加快应用的迭代速度。同时,集中部署在单个地域,则可以减少应用之间的网络通信时延,从而进一步提升数据处理效率。

显然,这两个指标对于确保企业业务的稳定高效运行至关重要。

然而,许多企业在面对快速到来的业务流量高峰和日益增长的大数据算力需求时,现行的分钟级自动伸缩节点池的弹性响应已经无法满足需求。并且,通过合理的部署策略,实现预期的弹性位置,也颇具挑战。

为此,阿里云推出弹性容器实例(Elastic Container Instance,ECI),以十秒级的弹性速度,有效应对突发流量的弹性需求。同时,阿里云容器服务 Kubernetes 版(ACK)利用虚拟节点技术实现与 ECI 弹性资源的无缝集成,使得业务能够在集群内灵活动态地调用 ECI 资源,迅速应对弹性挑战。此外,容器服务 ACK 的弹性调度功能在将业务调度到 ECI 上时,还能维持业务的亲和性配置不变,确保应用运行的稳定和高效。

使用虚拟节点实现秒级弹性

为了在 ACK 中使用 ECI,需要在 ACK 集群中安装虚拟节点组件。

在 ACK Pro 版集群中,可以通过组件管理页面部署 ack-virtual-node 组件,该组件默认被托管,不占用 Worker 节点资源。

在 ACK 专有版集群中,可以通过应用市场页面部署 ack-virtual-node 组件,安装成功后会在 kube-system 命名空间下创建一个名为 ack-virtual-node-controller 的 deployment,该 deployment 会运行在您的 Worker 节点上。

安装成功后用户可以通过 kubectl get no 命令在集群中查看到若干虚拟节点,代表虚拟节点安装成功。

虚拟节点安装成功之后,可以使用弹性调度功能配置 ECI 的使用策略,以下是“优先调度 ECS,当 ECS 资源使用完后使用 ECI 资源”的示例。

apiVersion: scheduling.alibabacloud.com/v1alpha1
kind: ResourcePolicy
metadata:
  name: test
spec:
  strategy: prefer
  units:
  - resource: ecs
  - resource: eci

配置了以上 ResourcePolicy 之后,在 default 命名空间下的所有 Pod 都将遵循以下的调度规则:优先使用 ECS,ECS 资源用完后使用 ECI。

🔔 需要注意的是: 以上配置会使得 ECS 节点上的抢占功能失效,如果需要同时保持在 ECS 上的抢占能力,请配置 preemptPolicy=BeforeNextUnit,如果需要限定生效的业务范围,请按需配置 selector。

以下是实际使用效果:

首先,提交一个 Deployment,8 个业务 Pod 中仅有 7 个业务 Pod 能够被成功调度。

图片

此时,提交 ResourcePolicy,并将 Deployment 的副本数增加到 10,新的副本将全部运行在 ECI 上。

图片

通过统计业务 Pod 的创建时间以及 startTime,可以看到这里新 Pod 的创建时间在 13 秒,远远低于自动伸缩节点所需的弹性时间。

图片

降低大数据任务通信时延

若您的集群配置了多个可用区的虚拟节点,在默认情况下,ECI Pod 可能会被调度在多个可用区上。如下图,在默认情况下,nginx 被调度到了 C 和 D 两个可用区的 virtual node 上。

图片

图片

对于大数据型应用,配置可用区亲和往往意味着计算 Pod 之间的网络通信代价更小,进而带来更高的吞吐量。通过阿里云弹性调度,您可以通过 Pod 上的节点亲和以及 Pod 亲和限制业务调度的可用区,从而实现 ECS 上的 Pod 与 ECI 上的 Pod 调度在相同的可用区上。

以下是两种在 ECI 上配置相同可用区调度的示例,分别使用了指定可用区调度以及不指定可用区调度两种方式,在以下的两个例子中,已提前提交了 ResourcePolicy:

手动指定可用区

原生 Kubernetes 提供了节点亲和调度语义来控制 Pod 的调度位置,以下的例子中我们指定 nginx 服务仅在可用区 C 上进行调度。您唯一需要进行的修改是在工作负载的 PodTemplate 或 PodSpec 中添加节点亲和约束。

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx-deployment-basic
spec:
  replicas: 9
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: topology.kubernetes.io/zone
                    operator: In
                    values:
                      - cn-hongkong-c
      containers:
        - image: 'nginx:1.7.9'
          imagePullPolicy: IfNotPresent
          name: nginx
          resources:
            limits:
              cpu: 1500m
            requests:
              cpu: 1500m
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File

同样将业务 Pod 扩容到 9,此时能够观察到业务 Pod 全部运行在可用区 C 上,由于集群中 ECS 节点均为可用区 D 上的机器,因此所有业务 Pod 全部运行在 ECI 上。

图片

最优可用区感知调度

为应对大数据计算需求,通常需要部署大量的 Pod,这时候确保 ECI 提供充足的算力资源成为关键。为确保选择到具有充足剩余算力的可用区,可以在指定可用区亲和时使用 Pod 亲和。在 ECI 调度过程中,调度器会参考 ECI 提供的可用区建议,选择一个可用算力更多的可用区,从而实现自动选择更优位置的效果。以下例子中我们将限制 Pod 仅在 ECI 上调度,并通过 Pod 亲和限制 Pod 必须被调度到同一个可用区。

🔔 注: Pod 亲和会使得后续 Pod 与第一个被调度的 Pod 亲和在相同可用区,当采用 ECS+ECI 弹性调度时,由于第一个被调度的 Pod 通常为 ECS Pod,会使得后续 ECI Pod 亲和在 ECS 相同的可用区,此时建议您使用 preferredDuringSchedulingIgnoredDuringExecution。

提交的 ResourcePolicy 为:

apiVersion: scheduling.alibabacloud.com/v1alpha1
kind: ResourcePolicy
metadata:
  name: test
spec:
  strategy: prefer
  units:
  - resource: eci

提交的工作负载为:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx-deployment-basic
spec:
  replicas: 9
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      affinity:
        podAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: app
                    operator: In
                    values:
                      - nginx
              topologyKey: topology.kubernetes.io/zone
      containers:
        - image: 'nginx:1.7.9'
          imagePullPolicy: IfNotPresent
          name: nginx
          resources:
            limits:
              cpu: 1500m
            requests:
              cpu: 1500m
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File

提交后可用发现,此时 Pod 依然均调度在相同的可用区,此时调度到的可用区将会是 ECI 推荐的更优可用区。

图片

保证在线业务高可用

对于在线业务而言,配置业务多可用区部署是保证业务高可用的一种有效手段。通过阿里云弹性调度,您可以通过 Pod 上的拓扑分布约束来实现 ECS 上的 Pod 与 ECI 上的 Pod 遵循相同的拓扑分布约束,从而实现业务的高可用。

以下是一个在 ECI 上配置业务高可用的示例,指定了业务 Pod 在多个可用区上均匀分布,并且在 ECS 资源不足时使用 ECI。

apiVersion: scheduling.alibabacloud.com/v1alpha1
kind: ResourcePolicy
metadata:
  name: test
spec:
  strategy: prefer
  units:
  - resource: ecs
  - resource: eci
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx-deployment-basic
spec:
  replicas: 9
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      topologySpreadConstraints:
        - labelSelector:
            matchLabels:
              app: nginx
          maxSkew: 1
          topologyKey: topology.kubernetes.io/zone
          whenUnsatisfiable: DoNotSchedule
      containers:
        - image: 'nginx:1.7.9'
          imagePullPolicy: IfNotPresent
          name: nginx
          resources:
            limits:
              cpu: 1500m
            requests:
              cpu: 1500m
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File

提交上述资源清单后,Pod 最终的可用区和节点分布如下,由于可用区 D 上存在三个 ECS 节点,因此最终 Pod 在可用区 D 上存在 5 个 Pod,在可用区 C 上存在 4 个 Pod。能够满足约束中最大倾斜度为 1 的要求。

图片

What’s Next

阿里云容器服务 Kubernetes 版(ACK)在标准 K8s 调度框架的基础上扩展了弹性调度功能,致力于提高应用性能和集群整体资源的利用率,保障企业业务的稳定高效运行。

在前期文章《弹性调度助力企业灵活应对业务变化,高效管理云上资源》中,我们已经探讨了如何通过阿里云容器服务 ACK 的弹性调度有效管理各类弹性资源,以帮助企业优化资源配置,实现降本增效。

在本文中,我们又深入解析了 ACK 弹性调度如何与弹性容器实例(ECI)这一关键弹性资源结合,凭借 ECI 快速弹性、秒级计费和即时释放的优势,显著提升企业业务的稳定性和效率。

在即将推出的调度系列文章中,我们将详细介绍如何在 ACK 上管理和调度 AI 任务,助力企业 AI 业务在云端快速落地。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1407137.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言第七弹---循环语句

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 循环语句 1、while循环1.1、if和while的对比1.2、while语句的执行流程1.3、while循环的实践1.4、练习 2、for循环2.1、语法形式2.2、for循环的执行流程2.3、for循…

架构篇16:高性能NoSQL

文章目录 K-V 存储文档数据库列式数据库全文搜索引擎小结关系数据库经过几十年的发展后已经非常成熟,强大的 SQL 功能和 ACID 的属性,使得关系数据库广泛应用于各式各样的系统中,但这并不意味着关系数据库是完美的,关系数据库存在如下缺点。 关系数据库存储的是行记录,无法…

使用Java编写RESTful Web服务

RESTful Web服务是一种基于HTTP协议的软件架构风格,它使用不同的HTTP方法(如GET、POST、PUT、DELETE等)来执行不同的操作,并使用统一的接口来访问和操作资源。在Java中,有多种框架可用于编写RESTful Web服务&#xff0…

Typecho后台无法登录显示503 service unavailable问题及处理

一、Typecho 我的博客地址:https://www.aomanhao.top 使用老薛主机动态Typecho博客框架handsome主题的搭配,文章内容可以异地网页更新,可以听后台背景音乐,很好的满足我的痛点需求,博客部署在云端服务器访问响应较快…

阿里云4核8G云服务器价格、带宽及系统盘费用

阿里云服务器4核8g配置云服务器u1价格是955.58元一年,4核8G配置还可以选择ECS计算型c7实例、计算型c8i实例、计算平衡增强型c6e、ECS经济型e实例、AMD计算型c8a等机型等ECS实例规格,规格不同性能不同,价格也不同,阿里云服务器网al…

Steam幻兽帕鲁搭建教程,如何选择服务器

如何选购服务器 大家可以根据自己的需求选购,大家最好选用物理服务器,可以找我参考一下。1到6人建议使用16H32G的20带宽的。12人以上建议大家使用E5的CPU内存64G的带宽50起步的。大家在选择服务器商的时候一定要选择正规的拥有资质的,这样售…

RabbitMQ系列之交换机的使用

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《RabbitMQ系列之交换机的使用》。🎯&…

ntp时间适配服务器和ssh免密登录

1.配置ntp时间服务器,确保客户端主机能和服务主机同步时间 服务端server向阿里时间服务器进行时间同步 第一步:定位服务端server #安装软件 [rootserver ~]# yum install chrony -y # 编辑配置文件,定位第3行,修改…

Win10添加网络打印机后无法打印的解决方法

在Win10电脑中,用户成功添加了网络打印机,却遇到了无法打印的问题,导致用户不能顺利完成打印任务。以下小编分享三种简单的方法,帮助大家轻松解决Win10网络打印机已添加但无法打印的问题,解决后用户就能通过网络打印机…

【AI大模型】WikiChat超越GPT-4:在模拟对话中事实准确率提升55%终极秘密

WikiChat,这个名字仿佛蕴含了无尽的智慧和奥秘。它不仅是一个基于人工智能和自然语言处理技术的聊天机器人,更是一个能够与用户进行深度交流的智能伙伴。它的五个突出特点:高度准确、减少幻觉、对话性强、适应性强和高效性能,使得…

pnpm 源不对 Will retry in 10 seconds. 2 retries left.

现象 由于使用npm config set registry 切换淘宝源时,把地址打错了。 后面使用pnpm install 时出现 此时无论我怎么使用npm config set registry 或者pnpm config set registry 切回正确的源均没有效果。 解决 在其他用npm的项目运行一下npm i 再运行pnpm i 即…

生产问题(十四)K8S抢占CPU导致数据库链接池打爆

一、引言 线上一天出现了两次数据库连接失败的大量报错,一开始以为是数据库的问题,但是想了想如果是数据库的问题,应该会有大量的应用问题 具体分析之后,发现其实是容器cpu出现了Throttled,导致大量线程阻塞 二、分析 …

UDS Flash刷写流程介绍

一、刷写流程介绍 1.1刷写包含以下三个步骤:预编程,编程,后编程 1.2预编程步骤 此步骤是保证能够正常进入编程(10 02)会话下。 (1)如果无特殊要求,只保证刷写能够正常进行&#x…

k8s的图形化工具---rancher

rancher是一个开源的企业级多集群的k8s管理平台。 rancher和k8s的区别:都是为了容器的调度和编排系统。但是rancher不仅可以调度还可以管理整个k8s集群。 rancher自带监控(普罗米修斯) 实验部署 master01 20.0.0.32 node01 20.0.0.34 node02 20.0.0.35 test …

嵌入式-stm32-江科大-EXTI外部中断

一:EXTI外部中断(external interrupt) 1.1 STM32 中断系统 中断是指在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前的程序,转而去处理中断程序,…

菜鸟初进stable diffusion

不知道是不是玩novelai被boss看到了,推荐了我学stable diffusion 扩散模型 DALL E Midjourney stable diffusion latent diffusion 说是改进点在于“给输入图片压缩降低维度,所以有个latent,从而减少计算量”,类似于下采样吧&…

消息队列RabbitMQ.01.安装部署与基本使用

目录 RabbitMQ的作用 Message queue 释义 问题思考 存在的问题 优化方案 案例分析 带来的好处 消息队列特点 Email邮件案例分析 Docker安装部署RabbitMQ 1.下拉镜像 2.运行RabbitMQ 3.打开防火墙端口号并重新运行防火墙 4.容器启动后,可以通过 docker logs 容器 查…

Servlet 与 MVC

主要内容 Servlet 重点 MVC 重点 Filter 重点 章节目标 掌握 Servlet 的作用 掌握 Servlet 的生命周期 掌握 JSP 的本质 掌握 MVC 的设计思想 掌握 Filter 的作用及使用场景 第一节 Servlet 1. Servlet 概念 Servlet 是在服务器上运行的能够对客户端请求进行处理&a…

leetcode 刷题2

二分查找的绝妙运用&#xff1a; 看到有序数列&#xff0c;算法复杂度 0033. 搜索旋转排序数组 class Solution { public:int search(vector<int>& nums, int target) {int left 0;int right nums.size() - 1;while (left < right) {int mid left (right - …

Debezium发布历史85

原文地址&#xff1a; https://debezium.io/blog/2020/03/05/db2-cdc-approaches/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. 运行 Db2 更改数据捕获的方法 2020 年 3 月 5 日 作者&#xff1a; Luis Garcs…