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

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

在前一篇文章《基于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注册集群云上弹性架构图:

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

1. 创建ACK One注册集群

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

接入后,可以通过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       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:              
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 < 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   :弹性资源的类型,目前支持   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集群,容灾备份,安全管理等。

参考文档

注册集群概述: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

二维码:

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
弹性计算 人工智能 Serverless
阿里云ACK One:注册集群云上节点池(CPU/GPU)自动弹性伸缩,助力企业业务高效扩展
在当今数字化时代,企业业务的快速增长对IT基础设施提出了更高要求。然而,传统IDC数据中心却在业务存在扩容慢、缩容难等问题。为此,阿里云推出ACK One注册集群架构,通过云上节点池(CPU/GPU)自动弹性伸缩等特性,为企业带来全新突破。
|
15天前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
15天前
|
弹性计算 调度 数据中心
阿里云 ACK One 注册集群云上弹性:扩展业务新利器
随着企业数字化转型深入,传统IDC数据中心因物理容量限制,难以实现动态扩容,缺乏弹性能力。阿里云ACK One注册集群凭借其高度灵活性和丰富资源选择,成为解决此问题的最佳方案。通过与阿里云资源的整合,ACK One不仅实现了计算资源的按需扩展,提高了资源利用率,还通过按需付费模式降低了成本,使企业能够更高效地应对业务增长和高峰需求。
|
1月前
|
并行计算 Linux PyTorch
在云上部署ChatGLM2-6B大模型(GPU版)
本教程指导您在配置了Alibaba Cloud Linux 3的GPU云服务器上,安装大模型运行环境(如Anaconda、Pytorch等),并部署大语言模型,最后通过Streamlit运行大模型对话网页Demo。教程包括创建资源、登录ECS实例、安装及校验CUDA、NVIDIA驱动和cuDNN等步骤。
|
2月前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
2月前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。
|
25天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
65 7
|
1月前
|
弹性计算 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:
229 1
|
1月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
831 2
|
3月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
215 5

热门文章

最新文章

推荐镜像

更多