基于ACK One注册集群实现IDC中K8s集群添加云上CPU/GPU节点

简介: 基于ACK One注册集群实现IDC中K8s集群添加云上CPU/GPU节点

在前一篇文章《基于ACK One注册集群轻松实现云上云下K8s集群统一管理》中,我们注重介绍了注册集群的应用场景,架构实现,安全加固,以及在他云K8s集群和IDC自建K8s集群中使用阿里云容器服务ACK的强大可观测性能力,实现云上云下K8s集群的统一运维管理。本文会重点介绍ACK One注册集群的另一个重要使用场景--云上弹性。

概述

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

  1. 业务快速增长:在本地IDC中部署的K8s集群,往往受到IDC计算资源的限制无法及时扩容,计算资源的采购部署上线往往周期较长,无法承担业务流量的快速增长。
  2. 业务周期性增长或突发增长:本地IDC中的计算资源数量相对固定,无法应对业务周期性高峰,或者突发业务流量的增长。

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

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

尤其针对AI场景,通过ACK One注册集群,可以将云上GPU机器接入IDC中的K8s集群。

ACK One注册集群云上弹性架构图:

image.png

演示 - 阿里云GPU机器加入本地IDC中K8s集群

1. 创建ACK One注册集群

访问ACK One控制台注册集群用页面,我们已经创建了注册集群“ACKOneRegisterCluster1”并接入了本地IDC中的K8s集群。参见:《基于ACK One注册集群轻松实现云上云下K8s集群统一管理

image.png

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

image.png


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

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

image.png

在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


多级弹性调度

通过上面的演示,我们可以通过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:弹性资源的类型,目前支持idcecseci三种类型。
  • nodeSelector:用nodelabel标识该调度单元下的节点,只对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集群,容灾备份,安全管理等。

参考文档

注册集群概述:https://help.aliyun.com/document_detail/155208.html

创建ECS节点池:https://help.aliyun.com/document_detail/208054.html

配置ECS节点自动弹性伸缩:https://help.aliyun.com/document_detail/208055.html

多级弹性调度:https://help.aliyun.com/document_detail/446694.html

联系我们

钉钉群号:35688562

二维码:

image.png

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
弹性计算 人工智能 Serverless
阿里云ACK One:注册集群云上节点池(CPU/GPU)自动弹性伸缩,助力企业业务高效扩展
在当今数字化时代,企业业务的快速增长对IT基础设施提出了更高要求。然而,传统IDC数据中心却在业务存在扩容慢、缩容难等问题。为此,阿里云推出ACK One注册集群架构,通过云上节点池(CPU/GPU)自动弹性伸缩等特性,为企业带来全新突破。
|
5月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
477 2
|
6月前
|
运维 NoSQL 调度
GPU集群扩展:Ray Serve与Celery的技术选型与应用场景分析
Ray Serve与Celery对比:Ray Serve适用于低延迟、高并发的GPU推理服务,支持资源感知调度;Celery适合CPU密集型的离线批处理,具备成熟的任务队列机制。两者设计理念不同,适用场景各异,可根据任务类型灵活选型。
270 6
GPU集群扩展:Ray Serve与Celery的技术选型与应用场景分析
|
5月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
331 89
|
11月前
|
Kubernetes 安全 异构计算
K8S 部署 Deepseek 要 3 天?别逗了!Ollama+GPU Operator 1 小时搞定
最近一年我都在依赖大模型辅助工作,比如 DeepSeek、豆包、Qwen等等。线上大模型确实方便,敲几个字就能生成文案、写代码、做表格,极大提高了效率。但对于企业来说:公司内部数据敏感、使用外部大模型会有数据泄露的风险。
K8S 部署 Deepseek 要 3 天?别逗了!Ollama+GPU Operator 1 小时搞定
|
5月前
|
Kubernetes 调度 异构计算
Kubernetes集群中,部分使用GPU资源的Pod出现UnexpectedAdmissionError问题的解决方案。
如果在进行上述检查之后,问题依然存在,可以尝试创建一个最小化的Pod配置,仅请求GPU资源而不
353 5
|
人工智能 Linux iOS开发
exo:22.1K Star!一个能让任何人利用日常设备构建AI集群的强大工具,组成一个虚拟GPU在多台设备上并行运行模型
exo 是一款由 exo labs 维护的开源项目,能够让你利用家中的日常设备(如 iPhone、iPad、Android、Mac 和 Linux)构建强大的 AI 集群,支持多种大模型和分布式推理。
3137 101
|
12月前
|
并行计算 PyTorch 算法框架/工具
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
本文探讨了如何通过技术手段混合使用AMD与NVIDIA GPU集群以支持PyTorch分布式训练。面对CUDA与ROCm框架互操作性不足的问题,文章提出利用UCC和UCX等统一通信框架实现高效数据传输,并在异构Kubernetes集群中部署任务。通过解决轻度与强度异构环境下的挑战,如计算能力不平衡、内存容量差异及通信性能优化,文章展示了如何无需重构代码即可充分利用异构硬件资源。尽管存在RDMA验证不足、通信性能次优等局限性,但该方案为最大化GPU资源利用率、降低供应商锁定提供了可行路径。源代码已公开,供读者参考实践。
1053 3
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
|
弹性计算 Kubernetes Perl
k8s 设置pod 的cpu 和内存
在 Kubernetes (k8s) 中,设置 Pod 的 CPU 和内存资源限制和请求是非常重要的,因为这有助于确保集群资源的合理分配和有效利用。你可以通过定义 Pod 的 `resources` 字段来设置这些限制。 以下是一个示例 YAML 文件,展示了如何为一个 Pod 设置 CPU 和内存资源请求(requests)和限制(limits): ```yaml apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: - name: example-container image:
1797 4
|
6月前
|
缓存 人工智能 算法
不同业务怎么选服务器?CPU / 内存 / 带宽配置表
本文详解了服务器三大核心配置——CPU、内存、带宽,帮助读者快速理解服务器性能原理。结合不同业务场景,如个人博客、电商、数据库、直播等,提供配置选择建议,并强调合理搭配的重要性,避免资源浪费或瓶颈限制。内容实用,适合初学者和业务选型参考。
966 0

相关产品

  • 容器服务Kubernetes版