全部產品
Search
文件中心

Elastic Container Instance:調度Pod到x86架構的虛擬節點

更新時間:Jul 06, 2024

對於ACK Serverless叢集,所有Pod均運行在虛擬節點(預設x86架構)上,無需進行調度;對於ACK叢集,即混合使用標準節點(ECS)和虛擬節點(ECI,基於VK)的模式下,預設會將Pod調度到ECS節點,您可以根據需要將Pod調度到虛擬節點。本文介紹如何將ACK叢集中的Pod調度到x86架構的虛擬節點上。

調度方式概述

您可以通過以下幾種方式將Pod調度到x86架構的虛擬節點:

說明

下述方式均需要對存量資源做一定的修改,無法做到零侵入,建議您配置ECI Profile,通過ECI Profile的ECI Scheduler能力,在eci-profile設定檔中聲明需要匹配的Pod或者Namespace的Label,對於Label能夠匹配上的Pod,將被自動調度到ECI。更多資訊,請參見配置ECI Profile

  • 配置Pod Label

    如果您有個別Pod需要調度到ECI上運行,可以直接為Pod添加特定的Label,則該Pod將運行在x86架構的虛擬節點上。

  • 配置Namespace Label

    如果您有一類Pod需要調度到ECI上運行,可以建立一個Namespace並添加特定的Label,則該Namespace下的所有Pod將運行在x86架構的虛擬節點上。

  • (僅適用於ACK Pro叢集)配置ECI彈性調度

    ECI彈性調度是阿里雲提供的一種彈性調度策略,在部署服務時,您可以添加Annotations來聲明只使用普通節點的資源或者虛擬節點的ECI資源,或者在普通節點的資源不足時自動使用ECI資源,以滿足不同情境下對彈性資源的不同需求。

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

    x86架構的虛擬節點預設配置了Label和Taint,因此可以為Pod配置對應的nodeSelector和tolerations將Pod調度到x86架構的虛擬節點上,或者也可以採用指定nodeName的方式進行調度。

方式一:配置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: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        imagePullPolicy: Always
        name: nginx
  2. 建立Pod。

    kubectl create -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: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        imagePullPolicy: Always
        name: nginx
  4. 建立Pod。

    kubectl create -f test-pod.yaml 

方式三:配置ECI彈性調度

您可以在Pod metadata中添加Annotations來聲明彈性資源的類型,對應的配置項為alibabacloud.com/burst-resource,取值如下:

  • eci:當叢集普通節點的資源不足時,使用ECI。

  • eci_only:只使用ECI。

重要

該方式僅適用於ACK Pro版叢集,且叢集的Kubernetes版本不能低於1.18。更多資訊,請參見使用ECI彈性調度

配置樣本如下:

  1. 建立Deployment的YAML設定檔。

    vim test-deployment.yaml

    test-deployment.yaml的內容樣本如下:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx
          annotations:
            alibabacloud.com/burst-resource: eci  # 設定彈性調度的資源類型
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
            resources:
              limits:
                cpu: 2
              requests:
                cpu: 2
  2. 建立Deployment。

    kubectl create -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: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
          imagePullPolicy: Always
          name: nginx
        nodeSelector:    # 配置nodeSelector
          type: virtual-kubelet
        tolerations:     # 配置tolerations
        - key: virtual-kubelet.io/provider
          operator: Exists
    • 指定nodeName

      apiVersion: v1
      kind: Pod
      metadata:
        name: nginx
      spec:
        containers:
        - image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
          imagePullPolicy: Always
          name: nginx
        nodeName: virtual-kubelet-cn-beijing-g # 指定nodeName
  2. 建立Pod。

    kubectl create -f test-pod.yaml