全部产品
Search
文档中心

调度Pod到ECI

更新时间: 2021-09-23

对于Serverless Kubernetes集群,整个集群运行在ECI上,无需进行调度。对于ACK集群或者自建的K8s集群,即混合使用ECI和普通节点的模式下,您可以根据需要将Pod调度到虚拟节点上的ECI上运行。本文介绍如何将Pod调度到ECI上运行。

调度方式概述

在混合使用ECI和普通节点的模式下,一般可以通过以下几种方式将Pod调度到ECI:

说明

下述方式均需要对存量资源做一定的修改,无法做到零侵入,建议您配置ECI Profile,通过ECI Profile的ECI Scheduler能力,在eci-profile配置文件中声明需要匹配的Pod或者Namespace的Label,对于Label能够匹配上的Pod,将被自动调度到ECI。更多信息,请参见配置ECI Profile

  • 配置Pod Label

    如果您有个别Pod需要调度到ECI上运行,可以直接为Pod添加特定的Label,则该Pod将运行在虚拟节点的ECI实例上。

  • 配置Namespace Label

    如果您有一类Pod需要调度到ECI上运行,可以创建一个Namespace并添加特定的Label,则该Namespace下的所有Pod将运行在虚拟节点的ECI实例上。

  • 配置ECI弹性调度

    ECI弹性调度是阿里云提供的一种弹性调度策略,在部署服务时,您可以添加Annotations来声明只使用普通节点的资源或者虚拟节点的ECI资源,或者在普通节点的资源不足时自动使用ECI资源,以满足不同场景下对弹性资源的不同需求。

  • (不推荐)配置nodeSelector和tolerations、指定nodeName等其它方式

    当集群中存在虚拟节点时,您可以通过配置nodeSelector和tolerations,或者指定nodeName的方式,将Pod调度到虚拟节点上,Virtual Kubelet将会创建出相应的ECI实例来运行Pod。

方式一:配置Pod Label

您可以为Pod添加alibabacloud.com/eci=true的Label,将Pod调度到ECI上运行。

说明

仍支持添加eci=true的Label,但不推荐。

配置示例如下:

  1. 创建Pod的YAML配置文件。

    vim test-pod.yaml

    test-pod.yaml的内容示例如下:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx1
      labels: 
        alibabacloud.com/eci: "true"   #添加特定Label
    spec:
      containers:
      - image: nginx
        imagePullPolicy: Always
        name: nginx
  2. 创建Pod。

    kubectl apply -f test-pod.yaml 

方式二:配置Namespace Label

您可以创建一个Namespace并添加alibabacloud.com/eci=true的Label,则该Namespace下的所有Pod将调度到ECI上运行。

说明

仍支持添加virtual-node-affinity-injection=enabled的Label,但不推荐。

配置示例如下:

  1. 创建Namespace。

    kubectl create ns vk
  2. 为Namespace添加Label。

    kubectl label namespace vk alibabacloud.com/eci=true
  3. 创建Pod的YAML配置文件。

    vim test-pod.yaml

    test-pod.yaml的内容示例如下:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      namespace: vk  #指定添加了特定Label的Namespace
    spec:
      containers:
      - image: nginx
        imagePullPolicy: Always
        name: nginx
  4. 创建Pod。

    kubectl apply -f test-pod.yaml 

方式三:配置ECI弹性调度

您可以在Pod metadata中添加Annotations来声明弹性资源的类型,对应的配置项为alibabacloud.com/burst-resource,取值如下:

  • eci:当集群普通节点的资源不足时,使用ECI。

  • eci_only:只使用ECI。

配置示例如下:

  1. 创建Deployment的YAML配置文件。

    vim test-deployment.yaml

    test-deploymen.yaml的内容示例如下:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      replicas: 4
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx
          annotations:
            alibabacloud.com/burst-resource: eci  #设置弹性调度的资源类型
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            resources:
              limits:
                cpu: 2
              requests:
                cpu: 2
  2. 创建Deployment。

    kubectl apply -f test-deployment.yaml 

(不推荐)其它方式

您可以通过配置nodeSelector和tolerations、指定nodeName等方式将Pod调度到ECI上运行。

配置示例如下:

  1. 创建Pod的YAML配置文件。

    vim test-pod.yaml

    test-pod.yaml的内容示例如下:

    • 配置nodeSelector和tolerations

      apiVersion: v1
      kind: Pod
      metadata:
        name: nginx
      spec:
        containers:
        - image: nginx
          imagePullPolicy: Always
          name: nginx
        nodeSelector:
          type: virtual-kubelet
        tolerations:
        - key: virtual-kubelet.io/provider
          operator: Exists
    • 指定nodeName

      apiVersion: v1
      kind: Pod
      metadata:
        name: nginx
      spec:
        containers:
        - image: nginx
          imagePullPolicy: Always
          name: nginx
        nodeName: virtual-kubelet 
  2. 创建Pod。

    kubectl apply -f test-pod.yaml