本地 IDC 中的 K8s 集群如何以 Serverless 方式使用云上计算资源
作者:庄宇
在前一篇文章《应对突发流量,如何快速为自建 K8s 添加云上弹性能力》中,我们介绍了如何为 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 集群,参见《选对方法,K8s 多集群管理没那么难》。
2. 安装 ack-virtual-node 组件
通过 ACK One 注册集群控制台安装 ack-virtual-node 组件,安装组件后,通过注册集群 kubeconfig 查看集群节点池。virtual-kubelet 为虚拟节点,对接阿里云 Serverless ECI。
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 运行。
b. 查看 Pod,Pod 运行在虚拟节点 virtual-kubelet 上,实际后台使用阿里云 Serverless ECI 运行。
方式二: 设置命名空间标签
为命名空间设置标签 alibabacloud.com/eci=true,命名空间中所有新建 pod,将以 Serverless ECI 方式运行。
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:在该组资源最多部署多少个实例
步骤如下:
定义 ResourcePolicy CR,优先使用 IDC 中集群资源,再使用云上 Serverless ECI 资源。
创建应用 Deployment,启动 2 个副本,每个副本需要 2 个 CPU。
执行以下命令对应用扩容 4 个副本,IDC 中 K8s 集群只有一个 6CPU 节点,最多启动 2 个 nginx pods(系统资源预留,无法启动 3 个 pod)。剩余的 2 个副本在 IDC 节点资源不足后,自动使用阿里云 Serverless ECI 运行 Pods。
查看 Pod 运行情况,2 个 Pod 运行在 IDC 中的节点,2 个 Pod 使用虚拟节点在阿里云 Serverless ECI 上运行。
总结
本文介绍了基于 ACK One 注册集群实现 IDC 中 K8s 集群以 Serverless ECI 方式使用阿里云 CPU 和 GPU 计算资源,以应对业务流量增长。这种方式,完全 Serverless 化,无需额外运维云上节点,按 Pod 运行时间计费,灵活高效。
后续我们将陆续推出 ACK One 注册集群的系列文章,包括:容灾备份,安全管理等。欢迎通过搜索钉钉群号加入我们。(群号:35688562)
参考文档:
[1] 注册集群概述
https://help.aliyun.com/document_detail/155208.html
[2] 使用弹性容器 ECI 扩容集群
https://help.aliyun.com/document_detail/164370.html
[3] ECI 支持的实例类型
https://help.aliyun.com/document_detail/451262.html
[4] 多级弹性调度
https://help.aliyun.com/document_detail/446694.html
点击此处,查看 ACK One 更多产品详情
版权声明: 本文为 InfoQ 作者【阿里巴巴云原生】的原创文章。
原文链接:【http://xie.infoq.cn/article/2b3f40f18646a14e3132866cf】。文章转载请联系作者。
评论