应对突发流量,如何快速为自建 K8s 添加云上弹性能力

news2024/11/29 5:37:35

作者:庄宇

以 Kubernetes 为代表的容器技术带来的是一种应用交付模式的变革,其正迅速成为全世界数据中心的统一 API。

为了保证业务持续稳定、用户访问不中断,高可用、高弹性等能力是应用架构设计不变的追求,多集群架构天然具备这样的能力。而只有在 Kubernetes 这层统一且标准的 API 之下,多集群和混合云的能力才开始真正体现价值。

在前一篇文章《选对方法,K8s 多集群管理没那么难》中,我们着重介绍了阿里云分布式云容器平台 ACK One 注册集群的应用场景、架构实现、安全加固,以及在他云 K8s 集群和 IDC 自建 K8s 集群中使用阿里云容器服务 ACK 的强大可观测性能力,实现云上云下 K8s 集群的统一运维管理。

本文中,我们重点介绍 ACK One 注册集群的另一个重要使用场景–云上弹性。

云上弹性能力典型应用场景和优势

ACK One 注册集群的云上弹性能力针对的场景:

1. 业务快速增长: 在本地 IDC 中部署的 K8s 集群,往往受到 IDC 计算资源的限制无法及时扩容,计算资源的采购部署上线往往周期较长,无法承担业务流量的快速增长。

2. 业务周期性增长或突发增长: 本地 IDC 中的计算资源数量相对固定,无法应对业务周期性高峰,或者突发业务流量的增长。

解决以上场景的根本是计算资源弹性能力,可以跟随业务流量的变化,弹性扩大或者缩小计算资源,满足业务需求的同时也保证了成本的平衡。

ACK One 注册集群云上弹性架构如下图所示:

在这里插入图片描述

通过 ACK One 注册集群,本地 IDC 中的 K8s 集群可以弹性扩容阿里云 ECS 节点池,利用阿里云容器服务的极致弹性能力,扩容应对业务流量增长,缩容实现成本节约。尤其针对 AI 场景,通过 ACK One 注册集群,可以将云上 GPU 机器接入 IDC 中的 K8s 集群。

为本地 IDC K8s 集群添加阿里云 GPU 算力的最佳实践

1. 创建 ACK One 注册集群

访问 ACK One 控制台注册集群用页面,我们已经创建了注册集群 “ACKOneRegisterCluster1” 并接入了本地 IDC 中的 K8s 集群。参见:《选对方法,K8s 多集群管理没那么难》

ACK One 控制台注册集群用页面:

https://account.aliyun.com/login/login.htm?oauth_callback=https%3A%2F%2Fcs.console.aliyun.com%2Fone

在这里插入图片描述

接入后,可以通过 ACK One 控制台查看本地 IDC K8s 集群,目前只有一个 master 节点。

在这里插入图片描述

2. 创建 GPU 节点池并手动扩容创建 1 个 GPU 节点

在注册集群中创建节点池 GPU-P100,将云上 GPU 机器加入 IDC 中 K8s 集群。

在这里插入图片描述

在 IDC K8s 集群中执行 kubectl 查看节点信息。

kubectl get node
NAME                           STATUS   ROLES    AGE     VERSION
cn-zhangjiakou.172.16.217.xx   Ready    <none>   5m35s   v1.20.9    // 云上GPU机器
iz8vb1xtnuu0ne6b58hvx0z        Ready    master   20h     v1.20.9    // IDC机器

k describe node cn-zhangjiakou.172.16.217.xx
Name:               cn-zhangjiakou.172.16.217.xx
Roles:              <none>
Labels:             aliyun.accelerator/nvidia_count=1             //nvidia labels
                    aliyun.accelerator/nvidia_mem=16280MiB        //nvidia labels 
                    aliyun.accelerator/nvidia_name=Tesla-P100-PCIE-16GB  //nvidia labels
                    beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=cn-zhangjiakou.172.16.217.xx
                    kubernetes.io/os=linux
Capacity:
  cpu:                4
  ephemeral-storage:  123722704Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             30568556Ki
  nvidia.com/gpu:     1              //nvidia gpu
  pods:               110
Allocatable:
  cpu:                4
  ephemeral-storage:  114022843818
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             30466156Ki
  nvidia.com/gpu:     1              //nvidia gpu
  pods:               110
System Info:
  OS Image:                   Alibaba Cloud Linux (Aliyun Linux) 2.1903 LTS (Hunting Beagle)
  Operating System:           linux
  Architecture:               amd64
  Container Runtime Version:  docker://19.3.13
  Kubelet Version:            v1.20.9
  Kube-Proxy Version:         v1.20.9
......

3. 运行 GPU 任务测试

在 IDC 中 K8s 集群中提交 GPU 测试任务,运行结果成功。

> cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
 name: gpu-pod
spec:
  restartPolicy: Never
  containers:
    - name: cuda-container
      image: acr-multiple-clusters-registry.cn-hangzhou.cr.aliyuncs.com/ack-multiple-clusters/cuda10.2-vectoradd
      resources:
        limits:
          nvidia.com/gpu: 1 # requesting 1 GPU
EOF

> kubectl logs gpu-pod
[Vector addition of 50000 elements]
Copy input data from the host memory to the CUDA device
CUDA kernel launch with 196 blocks of 256 threads
Copy output data from the CUDA device to the host memory
Test PASSED
Done

多级弹性调度策略,自定义弹性资源优先级

自定义弹性资源优先级调度是阿里云提供的弹性调度策略。您可以在应用发布或扩容过程中,自定义资源策略(ResourcePolicy),设置应用实例 Pod 被调度到不同类型节点资源的顺序。同时在缩容过程中按照原调度顺序逆序缩容。

通过上面的演示,我们可以通过 ACK One 注册集群,使用云上 ECS 资源创建节点池,并添加到 IDC 集群中。您可以为节点池或者节点打标(label),并通过设置 Pod 的节点亲 “affinity” 或者 “nodeSelector" 的方式,为 Pod 选择是在 IDC 本地节点中运行,还是在云上 ECS 节点用运行。这种方式需要修改应用 pod 的配置,如果生产系统有较多的应用需要处理,则需要编写调度规则,适合自定义调度的场景,例如:特定 CUDA 版本的 GPU 训练任务调度到云上特定的 GPU ECS 实例上。

为了简化 IDC 中 K8s 集群使用云上 ECS 资源,ACK One 注册集群提供多级弹性调度功能,通过安装 ack-co-scheduler 组件,您可以定义 ResourcePolicy CR 对象,使用多级弹性调度功能。

ResourcePolicy CR 是命名空间资源,重要参数解析:

  • selector:声明 ResourcePolicy 作用于同一命名空间下 label 上打了 key1=value1 的 Pod。
  • strategy:调度策略选择,目前只支持 prefer。
  • units:用户自定义的调度单元。应用扩容时,将按照 units 下资源的顺序选择资源运行;应用缩容时,将按照逆序进行缩容。
  • resource:弹性资源的类型,目前支持 idc、ecs 和 eci 三种类型。
  • nodeSelector:用 node 的 label 标识该调度单元下的节点,只对 ecs 资源生效。
  • max:在该组资源最多部署多少个实例。

ResourcePolicy 支持以下场景:

场景 1:优先使用 IDC 中集群资源,再使用云上 ECS 资源

apiVersion: scheduling.alibabacloud.com/v1alpha1
kind: ResourcePolicy
metadata:
 name: cost-balance-policy
spec:
  selector:
    app: nginx           // 选择应用Pod
  strategy: prefer
  units:
  - resource: idc        //优先使用idc指定使用IDC中节点资源
  - resource: ecs        //当idc节点资源不足时,使用云上ECS,可以通过nodeSelector选择节点
    nodeSelector:
      alibabacloud.com/nodepool-id=np7b30xxx

场景 2:混合使用 IDC 资源和云上 ECS 资源

apiVersion: scheduling.alibabacloud.com/v1alpha1
kind: ResourcePolicy
metadata:
 name: load-balance-policy
spec:
  selector:
    app: nginx
  strategy: prefer
  units:
  - resource: idc
    max: 2             //在idc节点中最多启动2个应用实例
  - resource: ecs
    nodeSelector:
      alibabacloud.com/nodepool-id=np7b30xxx
    max: 4             //在ecs节点池中最多启动4个应用实例

总结

演示中,我们将阿里云 GPU P100 机器添加到 IDC 中的 K8s 集群,扩展了 IDC 的 GPU 算力。

通过 ACK One 注册集群:

  1. 您可以选择阿里云上的各种 ECS 实例类型和规格,包括:X86,ARM,GPU 等。

  2. 您可以手动扩容和缩容 ECS 实例数量。

  3. 您可以配置 ECS 实例数量的自动弹性伸缩。

  4. 您可以使用多级弹性调度,优先使用 IDC 中资源,IDC 资源不足的情况下,自动扩容云上 ECS 节点池处理突发业务流量。

后续我们将陆续推出 ACK One 注册集群的系列文章,包括:Serverless 方式扩容 IDC 中 K8s 集群,容灾备份,安全管理等。如果您希望了解并交流 ACK One 的更多能力,欢迎加入 ACK One 客户钉钉交流群讨论(群号):35688562。

参考文档:

[1] 注册集群概述

https://help.aliyun.com/document_detail/155208.html

[2] 创建 ECS 节点池

https://help.aliyun.com/document_detail/208054.html

[3] 配置 ECS 节点自动弹性伸缩

https://help.aliyun.com/document_detail/208055.html

[4] 多级弹性调度

https://help.aliyun.com/document_detail/446694.html

点击此处,查看 ACK One 更多产品详情

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

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

相关文章

控制对文件访问

控制对文件访问 Linux文件权限 权限文件影响目录影响r读取文件内容列出目录内容w更改文件内容创建删除目录文件x作为命令执行目录可以变成当前工作目录 命令行管理文件系统权限 更改文件和目录权限 chmod chmod WhoWhatWhich file|directoryWho (u,g,o,a代表用户&#xff…

抖音seo源码搭建,抖音矩阵系统源码分发,抖音矩阵账号管理系统

前言&#xff1a; 抖音seo源码&#xff0c;抖音矩阵系统源码搭建&#xff0c;抖音矩阵同步分发。抖音seo源码部署是需要对接到这些正规接口再来做开发的&#xff0c;目前账号矩阵程序开发的功能&#xff0c;围绕一键管理多个账号&#xff0c;做到定时投放&#xff0c;关键词自动…

C# 提示:无法加载 DLL“XXX.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。

今天再调试程序时发现程序再笔记本上运行正常&#xff0c;然而拷贝到客户主机上之后出现了&#xff08;System.DllNotFoundException: 无法加载 DLL“msc.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。&#xff09;的问题&#xff0c;经过再三调试&#xff0c; …

python编程语言之数据类型

python数据类型 https://draw.io/ 画图 str 序列操作 字符串属于序列类型&#xff0c;所谓序列&#xff0c;指的是一块可存放多个值的连续内存空间&#xff0c;这些值按一定顺序排列&#xff0c;可通过每个值所在位置的编号&#xff08;称为索引、下标&#xff09;访问它们…

6.3.3 利用Wireshark进行协议分析(三)Wireshark基本操作

6.3.3 利用Wireshark进行协议分析&#xff08;三&#xff09; 一、启动Wireshark界面 如图 从上到下依次是 标题栏菜单栏工具栏过滤栏捕获窗口&#xff0c;在该区域用户可以选择网络接口&#xff0c;设置捕获选项 Wireshark允许用户将捕获到的数据包信息保存在指定的文件中…

ESD门禁闸机管理系统如何适应不同场景及需求

ESD门禁闸机是一种用于控制进出门禁区域的设备。ESD是英文Electrostatic Discharge的缩写&#xff0c;意指静电放电。该门禁闸机主要用于防止静电对敏感设备和产品造成的损害。 ESD门禁闸机具有以下功能和特点&#xff1a; 1. 静电防护&#xff1a;ESD门禁闸机使用特殊的材料…

前端Vue uni-app App/小程序/H5 通用tree树形结构图

随着技术的发展&#xff0c;开发的复杂度也越来越高&#xff0c;传统开发方式将一个系统做成了整块应用&#xff0c;经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改&#xff0c;造成牵一发而动全身。 通过组件化开发&#xff0c;可以有效实现…

【源码解析】一张图了解spring内部原理

从Spring框架流程上来看主要包含的是Bean对象的配置&#xff0c;读取配置&#xff0c;Bean工厂管理&#xff0c;构建对象。

Panabit iXCache后台命令执行

在我们短促而又漫长的一生中&#xff0c;我们在苦苦地寻找人生的幸福&#xff0c;可幸福往往又与我们失之交臂。当我们为此而耗尽宝贵的青春年华&#xff0c;皱纹也悄悄地爬上了眼角的时候&#xff0c;我们或许才能稍稍懂得生活实际上意味着什么。 漏洞描述 Panabit iXCache指…

三、图形化界面工具DataGrip

一、DataGrip软件下载 1、官网下载 官网地址&#xff1a;https://www.jetbrains.com/zh-cn/ 拉到主页面的最下面&#xff1a; 2、下载DataGrip软件 二、软件安装 1、双击安装包 2、进入安装界面&#xff0c;点击【Next】 3、选择安装路径&#xff0c;之后点击【Next】 尽量不…

uni-app 小程序 uni.showToast字数超过两行自动省略显示不全问题

如图&#xff1a; uni.showToast({title: res.data.msg,icon: "none" });uni.showToast() 显示消息提示框&#xff0c;显示图标时&#xff0c; title 文本最多显示 7 个汉字长度&#xff0c;在不显示图标的情况下&#xff0c;大于两行不显示。 可以选择更换为使用…

霍格沃兹emp.dll文件丢失要怎么处理?快速修复emp.dll的方法

最近有朋友反映在他们玩霍格沃兹的时候&#xff0c;突然弹出一个emp.dll文件丢失的窗口&#xff0c;然后就玩不了游戏了&#xff0c;那么面对这种情况要怎么去解决呢&#xff1f;其实解决方法还是有挺多的&#xff0c;下面我们一起来了解一下吧。 一.emp.dll文件有什么作用 e…

(学习笔记-TCP连接断开)TCP四次挥手

TCP四次挥手过程 TCP断开连接是通过四次挥手实现的&#xff0c;双方都可以主动断开连接&#xff0c;断开连接后主机中的资源将被释放&#xff0c;四次挥手的过程如下&#xff1a; 客户端打算关闭连接时&#xff0c;会发送一个TCP首部FIN标志位为1的报文&#xff0c;也就是FIN报…

在gitlab中生成增量代码质量分析报告

作为管理者&#xff0c;你是否想在组员创建merge request时&#xff0c;生成代码质量分析报告&#xff0c;今天它来了&#xff1a; .gitlab-ci.yml&#xff1a; image: python:3.11flake8:allow_failure: true#rules: 这里不能加rules&#xff0c;否则无法正确生成质量报告# …

05-1_Qt 5.9 C++开发指南_Model/View结构基础(基本原理;数据模型;试图组件;代理)

Model/View(模型/视图) 结构是 Qt 中用界面组件显示与编辑数据的一种结构&#xff0c;视图 (View)是显示和编辑数据的界面组件&#xff0c;模型 (Model) 是视图与原始数据之间的接口。Model/View 结构的典型应用是在数据库应用程序中&#xff0c;例如数据库中的一个数据表可以在…

如何使用ArcGIS Pro制作一张天府机场区位图

ArcGIS系列产品的重要功能之一就是制图&#xff0c;相较于ArcGIS, ArcGIS Pro在制图这块有很大的改进&#xff0c;用户可以连接上ArcGIS Online丰富的在线资源&#xff0c;感受到ArcGIS Pro强大的制图能力&#xff0c;但是在开始的时候可能会有些不习惯&#xff0c;因为在操作上…

C#在工业自动化领域的应用前景如何?

在2021年&#xff0c;C#与工业自动化已经开始结合&#xff0c;并且这种趋势有望在未来继续发展。C#是一种功能强大的编程语言&#xff0c;其面向对象的特性、跨平台支持以及丰富的类库和工具&#xff0c;使其成为在工业自动化领域应用的有力工具。 我这里刚好有嵌入式、单片机…

【每天40分钟,我们一起用50天刷完 (剑指Offer)】第三十天 30/50 连续子数组的最大和【dp】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

断点续传技术在工业边缘网关HiWoo Box中的价值

引言 工业边缘计算是近年来迅速发展的一项重要技术&#xff0c;它将数据处理和分析功能推向了设备和传感器的边缘&#xff0c;从而大大提高了工业自动化系统的效率和可靠性。然而&#xff0c;工业现场环境复杂多变&#xff0c;网络稳定性不足常常导致数据传输中断&#xff0c;…

TPS61021A 具有 0.5V 超低输入电压的3A升压转换器

1 特性 1 • 输入电压范围&#xff1a;0.5V至4.4V • 启动时的最小输入电压为0.9V • 可设置的输出电压范围&#xff1a;1.8V到4.0V • 效率高达91%&#xff08;VIN2.4V、VOUT3.3V 且IOUT 1.5A 时&#xff09; • 2.0MHz 开关频率 • IOUT > 1.5A&#xff0c;VOUT 3.…