基于ACK One注册集群实现IDC中K8s集群以Serverless方式使用云上CPU/GPU资源

本文涉及的产品
函数计算FC,每月15万CU 3个月
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 在前一篇文章《基于ACK One注册集群实现IDC中K8s集群添加云上CPU/GPU节点》中,我们介绍了如何为IDC中K8s集群添加云上节点,应对业务流量的增长,通过多级弹性调度,灵活使用云上资源,并通过自动弹性伸缩,提高使用率,降低云上成本。这种直接添加节点的方式,适合需要自定义配置节点(runtime,kubelet,NVIDIA等),需要特定ECS实例规格等场景。同时,这种方式意味您需要自行

在前一篇文章《基于ACK One注册集群实现IDC中K8s集群添加云上CPU/GPU节点》中,我们介绍了如何为IDC中K8s集群添加云上节点,应对业务流量的增长,通过多级弹性调度,灵活使用云上资源,并通过自动弹性伸缩,提高使用率,降低云上成本。

这种直接添加节点的方式,适合需要自定义配置节点(runtime,kubelet,NVIDIA等),需要特定ECS实例规格等场景。同时,这种方式意味您需要自行维护云上节点池。

如果您不想维护云上节点池,您可以选择Serverless方式使用阿里云ECI弹性容器实例运行业务Pod,更加高效弹性的使用云上CPU/GPU资源。

概述

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

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

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

  • 在线业务的波峰波谷弹性伸缩:如在线教育、电商等行业有着明显的波峰波谷计算特征。使用Serverless ECI可以显著减少固定资源池的维护,降低计算成本。
  • 数据计算:使用Serverless ECI承载Spark、Presto、ArgoWorkflow等计算场景,按Pod运行时间计费,有效降低计算成本。
  • CI/CD Pipeline:Jenkins、Gitlab-Runner。
  • Job任务:定时任务、AI。

演示 - IDC中K8s集群以Serverless方式使用云上资源

1. 前提条件:

已经通过ACK One注册机群接入IDC中K8s集群,参见《基于ACK One注册集群轻松实现云上云下K8s集群统一管理

2. 安装ack-virtual-node组件

通过ACK One注册集群控制台安装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组件生产的虚拟节点

3. 使用Serverless ECI运行Pod(CPU/GPU任务)

方式一:配置Pod标签,为Pod添加标签alibabacloud.com/eci=true,Pod将以Serverless ECI方式运行。示例中,使用GPU ECI实例运行CUDA任务,您不需要安装配置NVIDIA driver和runtime,真正做到Serverless化运行。

a. 提交Pod,使用Serverless ECI运行

> cat <

b. 查看Pod,Pod运行在虚拟节点virtual-kubelet上,实际后台使用阿里云Serverless ECI运行。

> 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.217.90   virtual-kubelet-cn-zhangjiakou-a              

> 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

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

为命名空间设置标签alibabacloud.com/eci=true,命名空间中所有新建pod,将以Serverless ECI方式运行。

kubectl label namespace  alibabacloud.com/eci=true

4. 多级弹性调度

上面的演示中,我们通过设置Pod或者命名空间的标签以使用Serverless ECI运行Pod。如果您期望应用运行过程中优先使用IDC中的节点资源运行Pod,当IDC资源不足时,再使用阿里云Serverless ECI运行Pod。您可以使用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 :在该组资源最多部署多少个实例。

步骤如下:

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
  strategy: prefer
  units:
  - resource: idc        //优先使用idc指定使用IDC中节点资源
  - resource: eci        //当idc节点资源不足时,使用Serverless ECI
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集群只有一个6CPU节点,最多启动2个nginx pods(系统资源预留,无法启动3个pod)。剩余的2个副本在IDC节点资源不足后,自动使用阿里云Serverless ECI运行Pods。

kubectl scale deployment nginx --replicas 4

4) 查看Pod运行情况,2个Pod运行在IDC中的节点,2个Pod使用虚拟节点在阿里云Serverless ECI上运行。

> kubectl get pod -o wide
k get pod -o wide
NAME                     READY   STATUS    RESTARTS   AGE     IP              NODE                      
nginx-79cd98b4b5-97s47   1/1     Running   0          84s     10.100.75.22    iz8vb1xtnuu0ne6b58hvx0z   
nginx-79cd98b4b5-gxd8z   1/1     Running   0          84s     10.100.75.23    iz8vb1xtnuu0ne6b58hvx0z   
nginx-79cd98b4b5-k55rb   1/1     Running   0          58s     10.100.75.24    virtual-kubelet-cn-zhangjiakou-a
nginx-79cd98b4b5-m9jxm   1/1     Running   0          58s     10.100.75.25    virtual-kubelet-cn-zhangjiakou-a

总结

本文介绍了基于ACK One注册集群实现IDC中K8s集群以Serverless ECI方式使用阿里云CPU和GPU计算资源,以应对业务流量增长。这种方式,完全Serverless化,无需额外运维云上节点,按Pod运行时间计费,灵活高效。

预告

后续我们将陆续推出ACK One注册集群的系列文章,包括:容灾备份,安全管理等。

参考文档

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

使用弹性容器ECI扩容集群:https://help.aliyun.com/document_detail/164370.html

ECI支持的实例类型:https://help.aliyun.com/document_detail/451262.html

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

联系我们

钉钉群号:35688562

二维码:

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
20天前
|
弹性计算 人工智能 Serverless
阿里云ACK One:注册集群云上节点池(CPU/GPU)自动弹性伸缩,助力企业业务高效扩展
在当今数字化时代,企业业务的快速增长对IT基础设施提出了更高要求。然而,传统IDC数据中心却在业务存在扩容慢、缩容难等问题。为此,阿里云推出ACK One注册集群架构,通过云上节点池(CPU/GPU)自动弹性伸缩等特性,为企业带来全新突破。
|
3月前
|
弹性计算 Kubernetes Serverless
Kubernetes 的架构问题之ACK/ASK支持ECI的Serverless Container如何解决
Kubernetes 的架构问题之ACK/ASK支持ECI的Serverless Container如何解决
98 7
|
6月前
|
运维 Kubernetes 调度
【kubernetes】关于k8s集群的污点、容忍、驱逐以及k8s集群故障排查思路
【kubernetes】关于k8s集群的污点、容忍、驱逐以及k8s集群故障排查思路
|
6月前
|
Kubernetes 应用服务中间件 nginx
K8S二进制部署详解,一文教会你部署高可用K8S集群(二)
K8S二进制部署详解,一文教会你部署高可用K8S集群(二)
521 0
|
6月前
|
Kubernetes 网络安全 数据安全/隐私保护
K8S二进制部署详解,一文教会你部署高可用K8S集群(一)
K8S二进制部署详解,一文教会你部署高可用K8S集群(一)
1627 0
|
6月前
|
Kubernetes 安全 网络安全
搭建k8s集群kubeadm搭建Kubernetes二进制搭建Kubernetes集群
搭建k8s集群kubeadm搭建Kubernetes二进制搭建Kubernetes集群
541 0
|
6月前
|
人工智能 监控 Serverless
如何基于ACK Serverless快速部署AI推理服务
通过上述步骤,可以在ACK Serverless上快速部署AI推理服务,实现高可用、弹性扩展的服务架构。
290 1
|
6月前
|
Kubernetes 容器
搭建K8S环境单机K8S集群
搭建K8S环境单机K8S集群
158 0
|
6月前
|
Kubernetes Cloud Native Docker
【云原生】kubeadm快速搭建K8s集群Kubernetes1.19.0
Kubernetes 是一个开源平台,用于管理容器化工作负载和服务,提供声明式配置和自动化。源自 Google 的大规模运维经验,它拥有广泛的生态支持。本文档详细介绍了 Kubernetes 集群的搭建过程,包括服务器配置、Docker 和 Kubernetes 组件的安装,以及 Master 和 Node 的部署。此外,还提到了使用 Calico 作为 CNI 网络插件,并提供了集群功能的测试步骤。
379 0
|
6月前
|
存储 人工智能 Kubernetes
阿里云ACK助力GPU成本优化,实现灵活管理
摘要:本文将介绍如何在阿里云容器服务ACK中,利用cGPU技术,共享GPU算力,提高GPU利用率,降低TCO。
164 2
下一篇
无影云桌面