對于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