本文主要为您介绍通过虚拟节点运行Job任务的方式,您可以用最小的运维成本(无需调整节点数量)来应对集群计算资源高峰压力。
背景信息
Kubernetes集群的节点资源配置不足会导致Pod无法及时运行,购买过多的节点又会导致资源的闲置浪费。而虚拟节点就像是Kubernetes集群的“魔法口袋”,让我们摆脱节点计算力不足的烦扰,也避免了节点的闲置浪费,满足无限计算力的想象,Pod按需创建,轻松应对计算的波峰波谷。Kubernetes集群大规模使用虚拟节点有以下特点:
业务有明显的波峰谷特征。
使用ECI作为弹性资源池,应对突发流量和Job任务,最大程度降低计算成本。
本例中,创建的Kubernetes托管版集群中,Master节点被托管(用户无需付费),2台Worker均为4c8g规格,所以整个Kubernetes托管版集群的可用计算容量是8c16g。需要运行一个Job离线任务进行数据处理,Job的cpu/mem需求为16c32g。此时Job无法在您创建的Kubernetes托管版集群中运行,因为其资源需求已经超过Kubernetes托管版集群的8c16g计算容量。因此,您可以选择将这个Job任务调度到虚拟节点上,而不占用集群本身节点的计算资源。
前提条件
您已经创建了一个Kubernetes托管版集群。具体操作,请参见创建Kubernetes托管版集群。
您已经在该集群上部署了一个虚拟节点。具体操作,请参见通过虚拟节点将Pod调度到ECI上运行。
您已经给namespace vk打上alibabacloud.com/eci=true标签。具体操作,请参见通过配置namespace标签的方式创建Pod。
通过kubectl连接Kubernetes集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
操作步骤
通过kubectl客户端创建job.yaml文件,并将以下内容复制到该文件中。
apiVersion: batch/v1 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
执行以下命令部署一个job任务。
kubectl -n vk apply -f job.yaml
查看Pod的运行状态。
执行以下命令查看Pod的状态。
kubectl -n vk get pod -a
预期输出:
NAME READY STATUS RESTARTS AGE pi-7cmwv 0/1 Completed 0 2m
执行以下命令查看Pod的具体运行状态。
kubectl -n vk describe pod
预期输出:
Name: pi-7cmwv Namespace: vk Priority: 0 PriorityClassName: <none> 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短时间任务可以节省计算成本,减轻集群运维负担,您无需关心集群的计算资源是否充足,也无需关心节点的扩容和缩容问题。