对于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,但不推荐。
配置示例如下:
创建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
方式三:配置ECI弹性调度
您可以在Pod metadata中添加Annotations来声明弹性资源的类型,对应的配置项为alibabacloud.com/burst-resource
,取值如下:
eci:当集群普通节点的资源不足时,使用ECI。
eci_only:只使用ECI。
该方式仅适用于ACK Pro版集群,且集群的Kubernetes版本不能低于1.18。更多信息,请参见使用ECI弹性调度。
配置示例如下:
创建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
创建Deployment。
kubectl create -f test-deployment.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