对于ACK Serverless集群,所有Pod均运行在虚拟节点(默认x86架构)上,无需进行调度;对于ACK集群,即混合使用标准节点(ECS)和虚拟节点(ECI,基于VK)的模式下,默认会将Pod调度到ECS节点,您可以根据需要将Pod调度到虚拟节点。本文介绍如何将ACK集群中的Pod调度到x86架构的虚拟节点上,以ECI来运行。
调度方式概述
您可以通过以下几种方式将Pod调度到x86架构的虚拟节点:
下述方式均需要对存量资源做一定的修改,无法做到零侵入,建议您配置eci-profile实现将Label匹配的Pod自动调度到ECI。
如果采用添加Lable或者指定nodeName的调度方式,则ECI Pod挂载云盘动态存储卷时,不支持使用
WaitForFirstConsumer
类型的Storageclass。更多信息,请参见使用云盘动态存储卷。
配置Pod Label
如果您有个别Pod需要调度到ECI上运行,可以直接为Pod添加特定的Label,则该Pod将运行在x86架构的虚拟节点上。
配置Namespace Label
如果您有一类Pod需要调度到ECI上运行,可以创建一个Namespace并添加特定的Label,则该Namespace下的所有Pod将运行在x86架构的虚拟节点上。
配置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,但不推荐。
配置示例如下:
创建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
创建Pod。
kubectl create -f test-pod.yaml
方式二:配置Namespace Label
您可以创建一个Namespace并添加alibabacloud.com/eci=true
的Label,则该Namespace下的所有Pod将调度到ECI上运行。
仍支持添加virtual-node-affinity-injection=enabled
的Label,但不推荐。
配置示例如下:
创建Namespace。
kubectl create ns vk
为Namespace添加Label。
kubectl label namespace vk alibabacloud.com/eci=true
创建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
创建Pod。
kubectl create -f test-pod.yaml
(不推荐)其它方式
您可以通过配置nodeSelector和tolerations、指定nodeName等方式将Pod调度到ECI上运行。
配置示例如下:
创建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
创建Pod。
kubectl create -f test-pod.yaml