對於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.yamltest-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.yamltest-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.yamltest-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