赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. ACK Edge集群
  4. 操作指南
  5. 云上弹性
  6. 虚拟节点Serverless弹性
  7. 通过ACK Edge集群使用ACS算力

通过ACK Edge集群使用ACS算力

  • 虚拟节点Serverless弹性
  • 发布于 2025-04-21
  • 0 次阅读
文档编辑
文档编辑

阿里云容器计算服务 ACS(Container Compute Service)已经集成到容器服务 Edge 版,您可以通过ACK Edge集群快速使用ACS提供的容器算力。本文介绍ACK Edge集群如何接入ACS算力。

ACK集群对接方式

容器计算服务 ACS(Container Compute Service)是以Kubernetes为用户界面的容器服务产品,提供符合容器规范的算力资源。ACS的Kubernetes管控和容器算力分层设计,为Kubernetes提供一种层次化的解决方案:ACS的计算资源层负责底层Pod容器资源的调度和分配,而Kubernetes则在此基础上负载业务负载管理,例如管理Deployment、Service、StatefulSet、CronJob等。

ACS容器算力可以通过虚拟节点(Virtual Node)的形式接入到Kubernetes集群中,使得集群可以轻松获得极大的弹性能力,而不必受限于集群的节点计算容量。ACS在接管Pod容器底层基础设施的管理工作后,Kubernetes不再需要直接负责单个Pod的放置、启动等工作,也不再需要关心底层虚拟机的资源情况,通过ACS即可确保Pod需要的资源随时可用。

在ACK Edge集群中,您需要先手动部署虚拟节点,才能创建ACS Pod。集群需要扩容时,可以直接在虚拟节点下按需创建ACS Pod,而无需规划节点的计算容量,ACS Pod与集群中真实节点上的Pod之间网络互通。建议您将部分长时间运行且流量弹性变化的业务负载调度至虚拟节点,这可以充分利用已有资源,缩短弹性扩容的时间,并减少扩容成本。当业务流量下降后,您可以快速释放部署在虚拟节点上的Pod,从而降低使用成本。虚拟节点上的Pod均基于ACS运行在安全隔离的容器运行环境中,每个Pod对应一个ACS实例。更多信息,请参见什么是容器服务 Edge 版。

image

前提条件

  • 首次操作时,需完成服务开通和相关授权操作:

    • 开通容器服务 Kubernetes 版,并授权默认角色和开通相关云产品。具体操作,请参见快速创建ACK托管集群。

    • 登录容器计算服务控制台,根据提示开通ACS服务。

  • 已创建ACK Edge集群,且版本为1.26及以上。关于如何升级集群版本,请参见升级集群。

  • 对于不同Kubernetes版本的ACK Edge集群,虚拟节点组件(ACK Virtual Node)版本需要满足以下要求。

    Kubernetes版本

    虚拟节点组件版本

    1.26及以上

    v2.13.0及以上

安装ACK Virtual Node组件启用ACS算力

ACS容器算力可以以虚拟节点的形式接入到ACK集群中,使得集群可以轻松获得极大的弹性能力,而不必受限于集群的节点计算容量。具体操作步骤如下:

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

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

  3. 在核心组件分页选择ACK Virtual Node组件进行安装或者升级到指定版本。

    image

  4. 若安装ACK Virtual Node前提示开通并授权ACS,需要按指引开通并授权ACS。完成ACS的开通和授权后点击确定安装。

  5. 安装完成后,在左侧导航栏选择节点管理 > 节点,新增的虚拟节点名称默认会以virtual-kubelet-为开头。

    image

ACK使用ACS CPU算力示例

ACK Virtual Node组件安装或升级到前提条件中的指定版本后,将同时支持ACS和ECI两种算力。

说明

在Pod调度到虚拟节点的场景中,如果没有指定为ACS的算力类型,则默认会优先使用ECI弹性实例。

ACK使用ACS CPU算力可以通过以下步骤实现:

  1. 通过NodeSelector、亲和性和反亲和性、ResourcePolicy和配置标签alibabacloud.com/acs: true等调度方式将Pod调度到虚拟节点。具体步骤,请参见节点亲和性调度。

    说明

    alibabacloud.com/acs: true的调度方式不支持在ACK Serverless集群中使用,目前支持范围为:ACK托管集群、ACK专有集群、ACK One注册集群和ACK Edge集群。

  2. 通过标签(alibabacloud.com/compute-class:计算类型)指定创建ACS Pod的实例类型。关于ACS实例类型的介绍,请参见ACS Pod实例概述。

具体操作步骤如下:

  1. 部署Deployment。

    NodeSelector

    1. 执行以下命令,查看虚拟节点的标签。命令中的virtual-kubelet-cn-hangzhou-k请按实际内容修改。

      kubectl get node virtual-kubelet-cn-hangzhou-k -oyaml

      预期输出(仅展示labels相关关键内容):

      apiVersion: v1
      kind: Node
      metadata:
        labels:
          kubernetes.io/arch: amd64
          kubernetes.io/hostname: virtual-kubelet-cn-hangzhou-k
          kubernetes.io/os: linux
          kubernetes.io/role: agent
          service.alibabacloud.com/exclude-node: "true"
          topology.diskplugin.csi.alibabacloud.com/zone: cn-hangzhou-k
          topology.kubernetes.io/region: cn-hangzhou
          topology.kubernetes.io/zone: cn-hangzhou-k
          type: virtual-kubelet # 所有虚拟节点都存在该标签,可以使用该标签实现Pod定向调度到虚拟节点。
        name: virtual-kubelet-cn-hangzhou-k
      spec:
        taints:
        - effect: NoSchedule
          key: virtual-kubelet.io/provider
          value: alibabacloud 
    2. 使用以下YAML内容创建nginx.yaml,部署2个Pod。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nginx
        labels:
          app: nginx
      spec:
        replicas: 2
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            name: nginx
            labels:
              app: nginx 
              alibabacloud.com/compute-class: general-purpose # 配置ACS Pod的算力类型,未配置默认general-purpose
              alibabacloud.com/compute-qos: default # 配置ACS Pod的算力质量,未配置默认default
          spec:
            nodeSelector:
              type: virtual-kubelet #定向调度到虚拟节点
            tolerations:
            - key: "virtual-kubelet.io/provider" # 容忍虚拟节点的污点 
              operator: "Exists"
              effect: "NoSchedule"
            containers:
            - name: nginx
              image: registry.openanolis.cn/openanolis/nginx:1.14.1-8.6
              resources:
                limits:
                  cpu: 2
                requests:
                  cpu: 2
    3. 创建应用Nginx并查看部署结果。

      1. 执行以下命令,创建应用Nginx。

        kubectl apply -f nginx.yaml 
      2. 执行以下命令,查看部署结果。

        kubectl get pods -o wide

        预期输出:

        NAME                    READY   STATUS    RESTARTS   AGE   IP               NODE                            NOMINATED NODE   READINESS GATES
        nginx-9cdf7bbf9-s****   1/1     Running   0          36s   10.0.6.68        virtual-kubelet-cn-hangzhou-j   <none>           <none>
        nginx-9cdf7bbf9-v****   1/1     Running   0          36s   10.0.6.67        virtual-kubelet-cn-hangzhou-k   <none>           <none>

        可以看到,这两个Pod通过nodeSelector被调度到label为type=virtual-kubelet的节点上。

    Pod标签调度

    1. 使用以下YAML内容创建nginx.yaml。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nginx
        labels:
          app: nginx
      spec:
        replicas: 2
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx 
              alibabacloud.com/acs: "true" # 配置使用ACS算力
              alibabacloud.com/compute-class: general-purpose # 配置ACS Pod的算力类型,未配置默认general-purpose
              alibabacloud.com/compute-qos: default # 配置ACS Pod的算力质量,未配置默认default
          spec:
            containers:
            - name: nginx
              image: registry.openanolis.cn/openanolis/nginx:1.14.1-8.6
              resources:
                limits:
                  cpu: 2
                requests:
                  cpu: 2
    2. 创建应用Nginx并查看部署结果。

      1. 执行以下命令,创建应用Nginx。

        kubectl apply -f nginx.yaml 
      2. 执行以下命令,查看部署结果。

        kubectl get pods -o wide

        预期输出:

        NAME                    READY   STATUS    RESTARTS   AGE   IP               NODE                            NOMINATED NODE   READINESS GATES
        nginx-9cdf7bbf9-s****   1/1     Running   0          36s   10.0.6.68        virtual-kubelet-cn-hangzhou-j   <none>           <none>
        nginx-9cdf7bbf9-v****   1/1     Running   0          36s   10.0.6.67        virtual-kubelet-cn-hangzhou-k   <none>           <none>

        可以看到,这两个Pod通过nodeSelector被调度到label为type=virtual-kubelet的节点上。

  2. 查看应用Nginx的Pod详情,确认Pod为ACS Pod实例。

    1. 执行以下命令,查看应用Nginx的Pod详情。

      kubectl describe pod nginx-9cdf7bbf9-s**** 

      预期输出(关键信息):

      Annotations:      ProviderCreate: done
                        alibabacloud.com/client-token: edf29202-54ac-438e-9626-a1ca007xxxxx
                        alibabacloud.com/instance-id: acs-2ze008giupcyaqbxxxxx
                        alibabacloud.com/pod-ephemeral-storage: 30Gi
                        alibabacloud.com/pod-use-spec: 2-4Gi
                        alibabacloud.com/request-id: A0EF3BF3-37E7-5A07-AC2D-68A0CFCxxxxx
                        alibabacloud.com/schedule-result: finished
                        alibabacloud.com/user-id: 14889995898xxxxx
                        kubernetes.io/pod-stream-port: 10250
                        kubernetes.io/preferred-scheduling-node: virtual-kubelet-cn-hangzhou-j/1
                        kubernetes.io/resource-type: serverless

      输出的Pod内容中存在注解alibabacloud.com/instance-id: acs-2ze008giupcyaqbxxxxx则可确认该Pod为ACS Pod实例。

ACK使用ACS GPU算力示例

与ACS CPU算力的主要链路和使用流程相同,但使用ACS GPU算力还需要确保调度相关的组件版本符合预期,并进行一些额外的配置。

组件配置

对于不同Kubernetes版本ACK托管集群Pro版,集群调度器组件kube-scheduler版本需要满足以下要求。

Kubernetes版本

集群调度器版本

1.26及以上

各集群版本对应的调度器组件版本如下:

  • 1.31集群版本,对应v1.31.0-aliyun.6.8.4.8f585f26及以上的调度器版本。

  • 1.30集群版本,对应v1.30.3-aliyun.6.8.4.946f90e8及以上的调度器版本。

  • 1.28集群版本,对应v1.28.12-aliyun-6.8.4.b27c0009及以上的调度器版本。

  • 1.26集群版本,对应v1.26.3-aliyun-6.8.4.4b180111及以上的调度器版本。

开通方式

目前在ACK集群使用ACS GPU算力处于邀测阶段,请提交工单申请。

使用方法

...     
     labels:
        # label中声明acs GPU资源需求
        alibabacloud.com/compute-class: gpu     #如为GPU类型,固定gpu即可
        alibabacloud.com/compute-qos: default   #计算qos类型,含义与普通acs算力相同
        alibabacloud.com/gpu-model-series: example-model  # GPU卡型,请按照实际情况替换,例如T4
...
说明
  • 关于ACS的算力类型和算力质量,请参见计算类型与算力质量的对应关系。

  • 关于gpu-model-series的可选卡型,请参见GPU型号说明。

  • alibabacloud.com/acs: true的调度方式不支持在ACK Serverless集群使用,目前支持范围为:ACK托管集群、ACK专有集群、ACK One注册集群和ACK Edge集群。

  1. 以下是GPU算力三种不同的配置示例。

    NodeSelector

    使用以下内容,创建GPU负载。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: dep-node-selector-demo
      labels:
        app: node-selector-demo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: node-selector-demo
      template:
        metadata:
          labels:
            app: node-selector-demo
            # acs属性
            alibabacloud.com/compute-class: gpu
            alibabacloud.com/compute-qos: default
            alibabacloud.com/gpu-model-series: example-model  # GPU卡型,请按照实际情况替换,例如T4
        spec:
          # 指定vk的标签
          nodeSelector:
            type: virtual-kubelet
          # 容忍vk的taint
          tolerations:
          - key: "virtual-kubelet.io/provider" # 容忍虚拟节点的污点
            operator: "Exists"
            effect: "NoSchedule"
          containers:
          - name: node-selector-demo
            image: registry-cn-hangzhou.ack.aliyuncs.com/acs/stress:v1.0.4
            command:
            - "sleep"
            - "1000h"
            resources:
              limits:
                cpu: 1
                memory: 1Gi
                nvidia.com/gpu: "1"
              requests:
                cpu: 1
                memory: 1Gi
                nvidia.com/gpu: "1"

    ResourcePolicy

    使用以下内容,创建GPU负载。

    apiVersion: scheduling.alibabacloud.com/v1alpha1
    kind: ResourcePolicy
    metadata:
      name: dep-rp-demo
      namespace: default
    spec:
      selector:
        app: dep-rp-demo
      units:
      - resource: acs
        podLabels:
          alibabacloud.com/compute-class: gpu
          alibabacloud.com/compute-qos: default
          alibabacloud.com/gpu-model-series: example-model  # GPU卡型,请按照实际情况替换,例如T4
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: dep-rp-demo
      labels:
        app: dep-rp-demo
      annotations:
        resourcePolicy: "dep-rp-demo"  # 引用 ResourcePolicy 的名称
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: dep-rp-demo
      template:
        metadata:
          labels:
            app: dep-rp-demo
        spec:
          containers:
          - name: demo
            image: registry-cn-hangzhou.ack.aliyuncs.com/acs/stress:v1.0.4
            command:
            - "sleep"
            - "1000h"
            resources:
              limits:
                cpu: 1
                memory: 1Gi
                nvidia.com/gpu: "1"
              requests:
                cpu: 1
                memory: 1Gi
                nvidia.com/gpu: "1"

    更多使用ResourcePolicy进行资源调度的配置,请参见自定义资源优先级调度。

    Pod标签调度

    使用以下内容,创建GPU负载。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: dep-node-selector-demo
      labels:
        app: node-selector-demo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: node-selector-demo
      template:
        metadata:
          labels:
            app: node-selector-demo
            # acs属性
            alibabacloud.com/acs: "true" # 配置使用ACS算力
            alibabacloud.com/compute-class: gpu
            alibabacloud.com/compute-qos: default
            alibabacloud.com/gpu-model-series: example-model  # GPU卡型,请按照实际情况替换,例如T4
        spec:
          containers:
          - name: node-selector-demo
            image: registry-cn-hangzhou.ack.aliyuncs.com/acs/stress:v1.0.4
            command:
            - "sleep"
            - "1000h"
            resources:
              limits:
                cpu: 1
                memory: 1Gi
                nvidia.com/gpu: "1"
              requests:
                cpu: 1
                memory: 1Gi
                nvidia.com/gpu: "1"
  2. 执行以下命令,查看GPU负载运行状态。

    kubectl get pod node-selector-demo-9cdf7bbf9-s**** -oyaml

    预期输出(关键信息):

        phase: Running
    
        resources:
          limits:
            #other resources
            nvidia.com/gpu: "1"
          requests:
            #other resources
            nvidia.com/gpu: "1"

相关文章

通过虚拟节点将Pod调度到ECI上运行 2025-04-21 11:16

当您需要在短时间内快速创建大量Pod时,ECS节点扩容速度可能无法满足要求,而预留额外的ECS节点又会产生资源浪费。借助ACK虚拟节点可以将Pod快速地调度到弹性容器实例ECI上运行,且无需购买和管理ECS节点。本文介绍如何在ACK集群(ACK托管集群和ACK专有集群)中将Pod调度到ECI上运行。

通过ACK Edge集群使用ACS算力 2025-04-21 11:16

阿里云容器计算服务 ACS(Container Compute Service)已经集成到容器服务 Edg

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号