帮助文档 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
帮助文档 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 分布式云容器平台ACK One
  4. 实践教程
  5. 注册集群最佳实践
  6. 通过注册集群实现IDC中K8s集群以Serverless方式使用云上CPU和GPU资源

通过注册集群实现IDC中K8s集群以Serverless方式使用云上CPU和GPU资源

  • 注册集群最佳实践
  • 发布于 2025-04-18
  • 0 次阅读
文档编辑
文档编辑

IDC中K8s集群通过Serverless方式使用阿里云弹性容器实例ECI运行业务Pod。您可以在K8s集群直接提交业务Pod,使Pod运行在ECI上,无需额外运维云上节点池,更加灵活、高效、弹性地使用云上CPU和GPU资源。本文介绍如何基于注册集群实现IDC中K8s集群以Serverless方式使用云上CPU和GPU资源。

背景信息

为IDC中K8s集群直接添加云上节点或GPU节点的方式,适用于需要自定义配置的节点(runtime、kubelet、NVIDIA等)和特定的ECS实例规格等场景,该方式需要自行维护云上节点池,增加额外成本。您可以选择Serverless方式使用阿里云弹性容器实例ECI运行业务Pod,无需额外运维云上节点池,可以更加高效弹性的使用云上CPU和GPU资源。

前提条件

  • 已通过注册集群内接入IDC中的K8s集群。具体操作,请参见创建注册集群。

  • 已开通阿里云弹性容器实例ECI。

  • 已通过kubectl连接注册集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。

使用场景

通过Serverless方式使用云上CPU和GPU资源,解决的依然是IDC中K8s集群的弹性能力不足,不能满足业务的快速增长、周期性业务增长和突发业务流量的问题。

通过Serverless方式,您可以在K8s集群直接提交业务Pod,该Pod将使用阿里云弹性容器实例ECI运行,弹性容器实例ECI启动速度快,与业务Pod的生命周期一致,按Pod运行时间计费。从而不需要为IDC中K8s集群创建云上节点,无需规划云上资源容量,也不需要等待ECS创建完成,实现了高度弹性,并节省了节点的运维成本。通过Serverless方式使用云上CPU和GPU资源的方式如下图所示。

image

IDC中K8s集群以Serverless方式使用云上CPU和GPU资源适合以下业务场景。

  • 在线业务的波峰波谷弹性伸缩:例如,在线教育、电商等行业有着明显的波峰波谷计算特征。使用Serverless ECI可以显著减少固定资源池的维护,降低计算成本。

  • 数据计算:使用Serverless ECI承载Spark、Presto、ArgoWorkflow等计算场景,按Pod运行时间计费,有效降低计算成本。

  • CI/CD Pipeline:Jenkins、Gitlab-Runner。

  • Job任务:定时任务、AI。

步骤一:安装相关组件

通过注册集群实现IDC中K8s集群以Serverless方式使用云上CPU和GPU资源,您需要安装以下组件。

  • ack-virtual-node:使用虚拟节点和ECI的高度弹性能力。

  • ack-co-scheduler:通过该组件,您可以自定义ResourcePolicy CR对象,使用多级弹性调度功能。

您可以通过以下两种方式安装组件。

通过onectl安装

  1. 在本地安装配置onectl。具体操作,请参见通过onectl管理注册集群。

  2. 执行以下命令,安装ack-virtual-node和ack-co-scheduler组件。

    onectl addon install ack-virtual-node
    onectl addon install ack-co-scheduler

    预期输出:

    Addon ack-virtual-node, version **** installed.
    Addon ack-co-scheduler, version **** installed.

通过控制台安装

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表。

  2. 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 组件管理。

  3. 在组件管理页面,单击其他页签,找到ack-virtual-node和ack-co-scheduler组件,在卡片右下方单击安装。

  4. 在提示对话框中单击确定。

步骤二:查看节点

ack-virtual-node组件安装完成后,您可以通过注册集群kubeconfig查看集群节点池。virtual-kubelet为虚拟节点,对接阿里云Serverless ECI。

执行以下命令,查看节点。

kubectl get node

预期输出:

NAME                               STATUS   ROLES    AGE    VERSION
iz8vb1xtnuu0ne6b58hvx0z            Ready    master   4d3h   v1.20.9   # IDC集群节点,示例只有1个Master节点,同时也是Worker节点,可以运行业务容器。
virtual-kubelet-cn-zhangjiakou-a   Ready    agent    99s    v1.20.9。 # 安装ack-virtual-node组件生产的虚拟节点。

步骤三:使用Serverless ECI运行Pod(CPU和GPU任务)

您可以通过以下两种方式进行配置,使用Serverless ECI运行Pod。

方式一:配置Pod标签

如下示例中,使用GPU ECI实例运行CUDA任务。您无需安装配置NVIDIA driver和runtime,真正做到Serverless化运行。

您可以为Pod添加标签alibabacloud.com/eci=true,使Pod以Serverless ECI的方式运行。

  1. 使用以下YAML内容,提交Pod,使用Serverless ECI运行。

    > cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
      name: gpu-pod
      labels:
        alibabacloud.com/eci: "true"  # 指定Pod使用Serverless ECI运行。
      annotations:
        k8s.aliyun.com/eci-use-specs: ecs.gn5-c4g1.xlarge  # 指定支持的GPU规格,该规格具备1个NVIDIA P100 GPU。
    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 # 申请1个GPU。
    EOF
    
  2. 执行以下命令,查看Pod。

    kubectl get pod -o wide

    预期输出:

    NAME       READY   STATUS      RESTARTS   AGE     IP              NODE                               NOMINATED NODE   READINESS GATES
    gpu-pod    0/1     Completed   0          5m30s   172.16.XX.XX   virtual-kubelet-cn-zhangjiakou-a   <none>           <none>
    kubectl logs gpu-pod

    预期输出:

    Using CUDA Device [0]: Tesla P100-PCIE-16GB
    GPU Device has SM 6.0 compute capability
    [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

    预期输出表明,Pod运行在虚拟节点virtual-kubelet上,实际后台使用阿里云Serverless ECI运行。

方式二:配置命名空间标签

您可以通过以下命令,为命名空间添加标签alibabacloud.com/eci=true,该命名空间中所有新建的Pod,将以Serverless ECI方式运行。

kubectl label namespace <namespace-name> alibabacloud.com/eci=true

步骤四:使用多级弹性调度

参见步骤三使用Pod或命名空间的标签让Pod以Serverless ECI的方式运行后,您可以使用ACK One注册集群的多级弹性调度功能实现此效果:应用运行过程中优先使用IDC中的节点资源运行Pod,当IDC资源不足时,再使用阿里云Serverless ECI运行Pod。

通过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:在该组资源最多部署多少个实例。

  1. 使用以下内容,定义ResourcePolicy CR,优先使用IDC中集群资源,再使用云上Serverless ECI资源。

    > cat << EOF | kubectl apply -f -
    apiVersion: scheduling.alibabacloud.com/v1alpha1
    kind: ResourcePolicy
    metadata:
      name: cost-balance-policy
    spec:
      selector:
        app: nginx           # 选择应用Pod。
        key1: value1
      strategy: prefer
      units:
      - resource: idc        # 优先使用IDC指定使用IDC中节点资源。
        max:3
      - resource: eci        # 当IDC节点资源不足时,使用Serverless ECI。
        nodeSelector:
          key2: value2
    EOF
  2. 使用以下内容,创建应用Deployment,启动2个副本,每个副本需要2个CPU。

    > cat << EOF | kubectl apply -f -
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx
          annotations:
            addannotion: "true"
          labels:
            app: nginx      # 此处要与上一步创建的ResourcePolicy的selector相关联。
        spec:
          schedulerName: ack-co-scheduler
          containers:
          - name: nginx
            image: acr-multiple-clusters-registry.cn-hangzhou.cr.aliyuncs.com/ack-multiple-clusters/nginx
            resources:
              requests:
                cpu: 2
              limits:
                cpu: 2
    EOF
  3. 执行以下命令,对应用扩容4个副本。

    IDC中K8s集群只有一个6 CPU节点,最多启动2个Nginx Pod(系统资源预留,无法启动3个Pod),剩余的2个副本在IDC节点资源不足时,将自动使用阿里云Serverless ECI运行Pod。

    kubectl scale deployment nginx --replicas 4
  4. 执行以下命令,查看Pod运行情况。

    > kubectl get pod -o wide

    预期输出:

    NAME                     READY   STATUS    RESTARTS   AGE     IP              NODE                      
    nginx-79cd98b4b5-97s47   1/1     Running   0          84s     10.100.XX.XX    iz8vb1xtnuu0ne6b58h****   
    nginx-79cd98b4b5-gxd8z   1/1     Running   0          84s     10.100.XX.XX    iz8vb1xtnuu0ne6b58h****   
    nginx-79cd98b4b5-k55rb   1/1     Running   0          58s     10.100.XX.XX    virtual-kubelet-cn-zhangjiakou-a
    nginx-79cd98b4b5-m9jxm   1/1     Running   0          58s     10.100.XX.XX    virtual-kubelet-cn-zhangjiakou-a

    预期输出表明,2个Pod运行在IDC中的节点,2个Pod使用虚拟节点在阿里云Serverless ECI上运行。

相关文章

构建混合弹性容器集群(弹性ECS) 2025-04-18 18:07

混合集群是通过阿里云注册集群接入本地数据中心自建Kubernetes集群的容器集群。它可以为自建Kubernetes集群扩容云上计算节点,同时也可以管理云上云下计算资源。本文以使用Calico容器网络组件的IDC自建Kubernetes集群为例,介绍如何创建混合集群。 前提条件

通过注册集群统一管理任意环境下的Kubernetes集群 2025-04-18 18:07

注册集群帮助您将云下Kubernetes集群接入云端,快速搭建混合云集群,同时支持本地数据中心Kubernetes集群或其他云厂商Kubernetes集群接入阿里云容器服务管理平台,进行统一管理。本文介绍注册集群如何统一管理任意环境下的Kubernetes集群。

通过onectl管理注册集群 2025-04-18 18:07

onectl是阿里云分布式云容器平台为注册集群提供的命令行工具,您可以通过onectl进行注册集群、相关组件以及组件RAM用户的管理。

通过注册集群实现IDC中K8s集群以Serverless方式使用云上CPU和GPU资源 2025-04-18 18:07

IDC中K8s集群通过Serverless方式使用阿里云弹性容器实例ECI运行业务Pod。您可以在K8s集群直接提交业务Pod,使Pod运行在ECI上,无需额外运维云上节点池,更加灵活、高效、弹性地使用云上CPU和GPU资源。本文介绍如何基于注册集群实现IDC中K8s集群以Serverless方式使

配置访问PrivateZone服务 2025-04-18 18:07

PrivateZone是基于阿里云专有网络VPC(Virtual Private Cloud)环境的私有DNS域名解析和管理服务。边界路由器VBR(Virtual Border Router)实例、IPsec连接、云连接网CCN(Cloud Connect Network)实例连接至转发路由器后,其

ACK One注册集群使用ACS GPU算力构建DeepSeek蒸馏模型推理服务 2025-04-18 18:07

DeepSeek是一款基于深度学习的智能推理模型,因其在自然语言处理和图像识别等领域的卓越表现而迅速受到了广泛关注。无论是企业级应用还是学术研究,DeepSeek都展现出了强大的潜力。然而,随着其应用场景的不断扩展,数据中心的算力瓶颈问题逐渐凸显。为应对这一挑战,阿里云推出了ACK One注册集群为

目录
Copyright © 2025 your company All Rights Reserved. Powered by 博智数字服务平台.
闽ICP备08105208号-1