對於自建的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來運行。配置樣本如下:
將以下內容儲存為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
部署Deployment。
kubectl apply -f deploy-vnode-test1.yaml
方式二:指定nodeName
支援指定nodeName,將Pod調度到某個特定的VNode。配置樣本如下:
查詢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
將以下內容儲存為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名稱
部署Deployment。
kubectl apply -f deploy-vnode-test2.yaml