1. 程式人生 > >【Kubernetes】Pod排程到指定Node

【Kubernetes】Pod排程到指定Node

問題描述


  Kubernetes有著自己特定的排程演算法與策略,有Master中的Scheduler元件來實現,根據Node資源使用情況自動排程Pod的建立,通常可以滿足我們大部分的需求。但是有時我們希望可以將某些Pod排程到特定硬體節點上,這裡採用目前最為簡單的nodeName和nodeSelector來實現Pod排程。

  假設以下場景:有三個Node,分別為107、108、109,建立Deployments來部署Tomcat應用,指定在107節點上建立Pod。

解決方案


nodeName

  Pod.spec.nodeName將Pod直接排程到指定的Node節點上,會跳過Scheduler的排程策略,該匹配規則是強制匹配。

  • Tomcatl.yaml檔案
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: myweb
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: myweb
    spec:
      nodeSelector: 107 #直接通過節點名稱排程到指定節點
      containers:
      - name: myweb
        image: harbor/tomcat:8.5-jre8
        ports:
        - containerPort: 80

nodeSelector

  Pod.spec.nodeSelector通過kubernetes的label-selector機制選擇節點,由排程器排程策略匹配label,而後排程Pod到目標節點,該匹配規則屬於強制約束。

  • 設定 Node Lable
kubectl label nodes 107 type=backEndNode1
  • Tomcatl.yaml檔案
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: myweb
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: myweb
    spec:
      nodeSelector:
        type: backEndNode1
      containers:
      - name: myweb
        image: harbor/tomcat:8.5
-jre8 ports: - containerPort: 80
  • 建立Deployment
kubectl create -f Tomcat.yaml