基于ECI运行Job任务

ECI支持秒级启动,按需扩容。对于短时间运行的Job任务,使用ECI来运行可以避免资源闲置浪费,在满足业务需求的同时有效降低资源使用成本,提升集群的弹性能力和资源利用率。

使用场景

Kubernetes集群的节点资源配置不足会导致Pod无法及时运行,购买过多的节点又会导致资源的闲置浪费。如果您的业务有明显的波峰谷特征,推荐您使用ECI作为弹性资源池。ECI支持秒级启动,按需扩容,能够很好地提升集群的弹性能力。使用ECI来应对突发流量和运行Job任务,您无需提前预估业务流量或预留闲置资源,在满足业务需求的同时能够有效降低使用和运维成本。

Kuberntes集群

前提条件

集群中已安装ack-virtual-node组件。具体操作,请参见部署ack-virtual-node组件

操作示例

  1. 创建一个Namespace用于测试,并为其添加alibabacloud.com/eci=true标签。

    说明

    Namespace添加此标签后,该Namespace下的Pod均将调度到虚拟节点,以ECI运行。本文以该方式为例进行说明,更多关于ECI调度的信息,请参见调度Pod至虚拟节点

    kubectl create ns vk
    kubectl label namespace vk alibabacloud.com/eci=true
  2. 在测试的Namespace下创建Job。

    1. 修改以下YAML,保存为job.yaml文件。

      apiVersion: batch/v1
      kind: Job
      metadata:
        name: pi
        namespace: vk     # 指定添加了特定LabelNamespace,将Pod调度到ECI
      spec:
        template:
          spec:
            containers:
            - name: pi
              image: registry.cn-shanghai.aliyuncs.com/eci_open/perl:5.32  
              command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
              resources:
                requests:
                  cpu: 16
                  memory: 32Gi
            restartPolicy: Never
        backoffLimit: 4
    2. 创建Job。

      kubectl -n vk apply -f job.yaml
  3. 查看Job对应Pod的运行情况。

    kubectl -n vk get pod -o wide

    预期返回如下,可以看到Job已经运行结束(状态为Completed),所在节点为虚拟节点(节点前缀为virtual-kubelet)。

    NAME       READY   STATUS      RESTARTS   AGE   IP              NODE                            NOMINATED NODE   READINESS GATES
    pi-zw2lc   0/1     Completed   0          15m   192.168.XX.XX   virtual-kubelet-cn-shanghai-b   <none>           <none>
  4. 查看Job对应Pod的详细信息。

    kubectl -n vk describe pod <pod-name>

    在返回的Events中,从StopCharge事件可以看到对应的ECI Pod已经运行结束,停止计费。

    说明

    ECI Pod按需收费,当Pod执行完成后会停止计费。更多信息,请参见ECI实例计费ECI Pod生命周期

    Events:
      Type     Reason            Age   From        Message
      ----     ------            ----  ----        -------
      Warning  ImageCacheMissed  16m   EciService  [eci.imagecache]Missed image cache.
      Normal   Pulling           16m   kubelet     Pulling image "registry.cn--shanghai.aliyuncs.com/eci_open/perl:5.32"
      Normal   Pulled            15m   kubelet     Successfully pulled image "registry.cn-shanghai.aliyuncs.com/eci_open/perl:5.32" in 12.951s (12.951s including waiting). Image size: 336066994 bytes.
      Normal   Created           15m   kubelet     Created container: pi
      Normal   Started           15m   kubelet     Started container pi
      Normal   StopCharge        15m   EciService  [eci.containergroup]The charge of current ECI instance has been stopped, but the related resources are still being cleaned.

    因此,基于ECI运行Job任务可以节省计算成本,减轻集群运维负担,您无需关心集群的计算资源是否充足,也无需关心节点的扩容和缩容问题。

相关文档

您也可以结合使用抢占式ECI实例来节约实例使用成本,请参见使用抢占式ECI实例运行Job任务