本文主要为您介绍通过虚拟节点运行 Job 任务的方式,您可以用最小的运维成本(无需调整节点数量)来应对集群计算资源高峰压力。
背景信息 Kuberntes 集群的节点资源配置不足会导致 pod 无法及时运行,购买过多的节点又会导致资源的闲置浪费。而虚拟节点就像是 kubernetes 集群的“魔法口袋”,让我们摆脱节点计算力不足的烦扰,也避免了节点的闲置浪费,满足无限计算力的想象,pod 按需创建,轻松应对计算的波峰波谷。Kuberntes 集群 本例中,创建的 Kubernetes 托管版集群中,Master节点被托管(用户无需付费),2 台 Worker 均为 4c8g 规格,所以整个 Kubernetes 托管版集群的可用计算容量是 8c16g。需要运行一个 Job 离线任务做数据处理,Job 的 cpu/mem 需求为 16c32g。此时 Job 无法在您创建的 Kubernetes 托管版集群中运行,因为其资源需求已经超过 Kubernetes 托管版集群的 8c16g 计算容量。因此,您可以选择把这个 Job 任务调度到虚拟节点上,而不占用集群本身节点的计算资源。
前提条件 您已经创建了一个 Kubernetes 托管版集群。请参见创建 Kubernetes 托管版集群。 您已经在该集群上部署了一个虚拟节点。请参见使用虚拟节点。 您已经给 namespace vk 打上 virtual-node-affinity-injection: enabled 标签。请参见通过配置namespace标签的方式创建Pod。 操作步骤 通过kubectl连接Kubernetes集群。 创建并拷贝以下内容到job.yaml,并执行kubectl -n vk apply -f job.yaml命令,部署一个 job 任务。 kind: Job metadata: name: pi spec: template: spec: containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] resources: requests: cpu: 16 memory: 32Gi restartPolicy: Never backoffLimit: 4 执行如下命令,查看 Pod 的运行状态。 #kubectl -n vk get pod -a NAME READY STATUS RESTARTS AGE pi-7cmwv 0/1 Completed 0 2m
#kubectl -n vk describe pod Name: pi-7cmwv Namespace: vk Priority: 0 PriorityClassName: Node: virtual-kubelet/ ... Events: Type Reason Age From Message
Normal Scheduled 3m default-scheduler Successfully assigned vk/pi-7cmwv to virtual-kubelet Normal SuccessfulMountVolume 2m kubelet, eci MountVolume.SetUp succeeded for volume "default-token-b2tff" Normal Pulling 2m kubelet, eci pulling image "perl" Normal Pulled 2m kubelet, eci Successfully pulled image "perl" Normal Created 2m kubelet, eci Created container Normal Started 2m kubelet, eci Started container 说明 虚拟节点中的 pod 完全是按需收费,当 pod 执行完成后就会停止收费。 因此,我们可以看到,使用虚拟节点运行 Job 短时间任务可以节省计算成本,减轻集群运维负担,用户无需关心集群的计算资源是否充足,也无需关心节点的扩容和缩容。
参考下官方文档,https://help.aliyun.com/knowledge_detail/122921.html
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。