全部產品
Search
文件中心

Elastic Container Instance:將Pod調度到VNode

更新時間:Jul 06, 2024

對於自建的Kubernetes叢集,即混合使用普通節點和虛擬節點(VNode)的模式下,您可以通過配置nodeSelector和tolerations,或者指定nodeName的方式,將Pod調度到VNode上,以ECI來運行。本文介紹如何將Pod調度到VNode。

調度方式概述

VNode對標原生kubernetes節點,在混合使用普通節點和VNode的模式下,一般可以通過以下幾種方式將Pod調度到VNode:

說明

下述方式均需要對存量資源做一定的修改,無法做到零侵入,建議您部署eci-profile組件,可以自訂配置Selector,將滿足條件的Pod自動調度到VNode。具體操作,請參見使用eci-profile調度Pod到VNode

  • 配置nodeSelector和tolerations

    VNode預設配置了Label和Taint,因此可以通過配置nodeSelector和tolerations,將Pod調度到VNode,以ECI來運行。

  • 指定nodeName

    支援指定nodeName,將Pod調度到某個特定的VNode,以ECI來運行。

方式一:配置nodeSelector和tolerations

VNode預設配置了Label和Taint:

...
  labels:
    k8s.aliyun.com/vnode: "true"
...
  taints:
  - effect: NoSchedule
    key: k8s.aliyun.com/vnode
    value: "true"

因此可以通過配置nodeSelector和tolerations,將Pod調度到VNode,以ECI來運行。配置樣本如下:

  1. 將以下內容儲存為deploy-vnode-test1.yaml。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: vnode-nginx-test1
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: uid
      template:
        metadata:
          labels:
            app: uid
        spec:
          nodeSelector:     #配置特定的nodeSelector
            k8s.aliyun.com/vnode: "true"
          tolerations:      #配置特定的tolerations
          - key: k8s.aliyun.com/vnode
            operator: "Equal"
            value: "true"
            effect: "NoSchedule"
          containers:
          - name: nginx
            image: registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/nginx:1.14.2
  2. 部署Deployment。

    kubectl apply -f deploy-vnode-test1.yaml

方式二:指定nodeName

支援指定nodeName,將Pod調度到某個特定的VNode。配置樣本如下:

  1. 查詢VNode資訊。

    kubectl get nodes

    從返回資訊中擷取VNode名稱。預設情況下,VNode的名稱格式為[region].[VNode ID]。返回樣本如下:

    NAME                                    STATUS   ROLES                  AGE    VERSION
    cn-hangzhou.vnd-2ze2qhf8lmp5kgsx****    Ready    agent                  132m   v1.20.6
    k8s-master                              Ready    control-plane,master   169m   v1.20.6
  2. 將以下內容儲存為deploy-vnode-test2.yaml。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: vnode-nginx-test2
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: uid
      template:
        metadata:
          labels:
            app: uid
        spec:
          containers:
          - name: nginx
            image: registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/nginx:1.14.2
          nodeName: cn-hangzhou.vnd-2ze2qhf8lmp5kgsx****   #指定VNode名稱
  3. 部署Deployment。

    kubectl apply -f deploy-vnode-test2.yaml