做3d兼职网站,app定制小程序开发,凌云网小说,网站引导页是什么问题作者#xff1a;庄宇
在前一篇文章《应对突发流量#xff0c;如何快速为自建 K8s 添加云上弹性能力》中#xff0c;我们介绍了如何为 IDC 中 K8s 集群添加云上节点#xff0c;应对业务流量的增长#xff0c;通过多级弹性调度#xff0c;灵活使用云上资源#xff0c;并通…作者庄宇
在前一篇文章《应对突发流量如何快速为自建 K8s 添加云上弹性能力》中我们介绍了如何为 IDC 中 K8s 集群添加云上节点应对业务流量的增长通过多级弹性调度灵活使用云上资源并通过自动弹性伸缩提高使用率降低云上成本。
这种直接添加节点的方式适合需要自定义配置节点runtimekubeletNVIDIA 等需要特定 ECS 实例规格等场景。同时这种方式意味您需要自行维护云上节点池。
如果您不想维护云上节点池您可以选择 Serverless 方式使用阿里云 ECI 弹性容器实例运行业务 Pod更加高效弹性的使用云上 CPU/GPU 资源。
概述
通过 Serverless 方式使用云上计 CPU/GPU 资源针对的问题依然是 IDC 中 K8s 集群的弹性能力不足不能满足业务的快速增长、周期性业务增长和突发业务流量。
通过 Serverless 方式可以在 K8s 集群直接提交业务 PodPod 将使用阿里云 ECI 弹性容器实例运行ECI 弹性容器实例启动速度快与业务 Pod 的生命周期一致按 Pod 运行时间计费。从而不需要为 IDC 中 K8s 集群创建云上节点不需要规划云上资源容量不需要等待 ECS 创建完成实现了极致弹性并节省了节点运维成本。
IDC 中 K8s 集群以 Serverless 方式使用云上 CPU/GPU 资源适合以下业务场景
在线业务的波峰波谷弹性伸缩如在线教育、电商等行业有着明显的波峰波谷计算特征。使用 Serverless ECI 可以显著减少固定资源池的维护降低计算成本。数据计算使用 Serverless ECI 承载 Spark、Presto、ArgoWorkflow 等计算场景按 Pod 运行时间计费有效降低计算成本。CI/CD PipelineJenkins、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。
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 运行 PodCPU/GPU 任务
方式一 配置 Pod 标签为 Pod 添加标签 alibabacloud.com/ecitruePod 将以 Serverless ECI 方式运行。示例中使用 GPU ECI 实例运行 CUDA 任务您不需要安装配置 NVIDIA driver 和 runtime真正做到 Serverless 化运行。
a. 提交 Pod使用 Serverless ECI 运行。 cat EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:name: gpu-podlabels: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: Nevercontainers:- name: cuda-containerimage: acr-multiple-clusters-registry.cn-hangzhou.cr.aliyuncs.com/ack-multiple-clusters/cuda10.2-vectoraddresources:limits:nvidia.com/gpu: 1 # 申请1个GPU
EOFb. 查看 PodPod 运行在虚拟节点 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 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方式二 设置命名空间标签
为命名空间设置标签 alibabacloud.com/ecitrue命名空间中所有新建 pod将以 Serverless ECI 方式运行。
kubectl label namespace namespace-name alibabacloud.com/ecitrue4. 多级弹性调度
上面的演示中我们通过设置 Pod 或者命名空间的标签以使用 Serverless ECI 运行 Pod。如果您期望应用运行过程中优先使用 IDC 中的节点资源运行 Pod当 IDC 资源不足时再使用阿里云 Serverless ECI 运行 Pod。您可以使用 ACK One 注册集群的多级弹性调度通过安装 ack-co-scheduler 组件您可以定义 ResourcePolicy CR 对象使用多级弹性调度功能。
ResourcePolicy CR 是命名空间资源重要参数解析 selector声明 ResourcePolicy 作用于同一命名空间下 label 上打了 key1value1 的 Pod strategy调度策略选择目前只支持 prefer units用户自定义的调度单元。应用扩容时将按照 units 下资源的顺序选择资源运行应用缩容时将按照逆序进行缩容 resource弹性资源的类型目前支持 idc、ecs 和 eci 三种类型nodeSelector用 node 的 label 标识该调度单元下的节点只对 ecs 资源生效max在该组资源最多部署多少个实例
步骤如下
定义 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 // 选择应用Podstrategy: preferunits:- resource: idc //优先使用idc指定使用IDC中节点资源- resource: eci //当idc节点资源不足时使用Serverless ECI
EOF创建应用 Deployment启动 2 个副本每个副本需要 2 个 CPU。 cat EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:name: nginxlabels:app: nginx
spec:replicas: 2selector:matchLabels:app: nginxtemplate:metadata:name: nginxannotations:addannotion: truelabels:app: nginx # 此处要与上一步创建的ResourcePolicy的selector相关联。spec:schedulerName: ack-co-schedulercontainers:- name: nginximage: acr-multiple-clusters-registry.cn-hangzhou.cr.aliyuncs.com/ack-multiple-clusters/nginxresources:requests:cpu: 2limits:cpu: 2
EOF执行以下命令对应用扩容 4 个副本IDC 中 K8s 集群只有一个 6CPU 节点最多启动 2 个 nginx pods系统资源预留无法启动 3 个 pod。剩余的 2 个副本在 IDC 节点资源不足后自动使用阿里云 Serverless ECI 运行 Pods。
kubectl scale deployment nginx --replicas 4查看 Pod 运行情况2 个 Pod 运行在 IDC 中的节点2 个 Pod 使用虚拟节点在阿里云 Serverless ECI 上运行。 kubectl get pod -o widek get pod -o wideNAME 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-anginx-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 注册集群的系列文章包括容灾备份安全管理等。欢迎通过搜索钉钉群号加入我们。群号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 更多产品详情