Kubernetes Pod 調度約束

Kubernetes Pod 調度約束

  • 能夠將pod調度到指定的節點Node內
  • 默認:根據節點資源利用率等分配Node節點。
  • nodeName用於將Pod調度到指定的Node名稱上
  • nodeSelector用於將Pod調度到匹配Label的Node上

 

工做流程
K8s經過watch實現組件工做。
一、管理員經過命令建立Pod-->apiserver接收到-->狀態寫入到etcd-->scheduler經過watch獲取etcd中獲取新的Pod-->經過算法選出pod應該調度到哪些節點內-->綁定到新的節點並更新到etcd中
二、kubelet經過watch從etcd中獲取到綁定到本身節點的pod-->將pod經過docker run啓動運行--> 在將狀態(運行狀態)更新到etcd中,根據kubelet週期上報
三、管理員查看pod狀態 --> 查找etcd中pod狀態 --> 返回給用戶node

 

# 使用方法
apiVersion: v1
kind: Pod
metadata:
  name: pod-example
  labels:
    app: nginx
spec:
  nodeName: 192.168.31.65
  containers:
  - name: nginx
    image: nginx:1.15

 

apiVersion: v1
kind: Pod
metadata:
  name: pod-example
spec:
  nodeSelector:
    env_role: dev
  containers:
  - name: nginx
    image: nginx:1.15

 

實踐(指定NodeIP)

一、建立測試pod
vim pod5.yamllinux

apiVersion: v1
kind: Pod
metadata:
  name: pod-example
  labels:
    app: nginx
spec:
  nodeName: 192.168.1.111
  containers:
  - name: nginx
    image: nginx:1.15

二、建立文件nginx

kubectl create -f pod5.yaml

三、查看pod調度節點算法

NAME READY STATUS RESTARTS AGE IP NODE 
pod-example 1/1 Running 0 42s 172.17.1.4 192.168.1.111 <none>
kubectl get pods -o wide

四、查看詳情;直接繞過調度器docker

...
Events:
  Type    Reason   Age    From                    Message
  ----    ------   ----   ----                    -------
  Normal  Pulling  9m8s   kubelet, 192.168.1.111  pulling image "nginx:1.15"
  Normal  Pulled   8m48s  kubelet, 192.168.1.111  Successfully pulled image "nginx:1.15"
  Normal  Created  8m48s  kubelet, 192.168.1.111  Created container
  Normal  Started  8m47s  kubelet, 192.168.1.111  Started container
kubectl describe pod pod-example

 

實踐(指定標籤)

一、給指定Node設置標籤 ;爲 team團隊ab隊(自定義=自定義)vim

kubectl label nodes 192.168.1.111 team=a
kubectl label nodes 192.168.1.110 team=b

二、查看標籤api

NAME STATUS ROLES AGE VERSION LABELS
192.168.1.110 Ready <none> 2d15h v1.12.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=192.168.1.110,team=b
192.168.1.111 Ready <none> 2d15h v1.12.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=192.168.1.111,team=a
kubectl get nodes --show-labels

三、建立文件經過標籤指定Node
vim pod6.yamlapp

apiVersion: v1
kind: Pod
metadata:
  name: pod-example
spec:
  nodeSelector:
    team: b
  containers:
  - name: nginx
    image: nginx:1.15

四、查看狀態ide

NAME READY STATUS RESTARTS AGE IP NODE
pod-example 1/1 Running 0 29s 172.17.84.2 192.168.1.110 <none>
kubectl get pods -o wide

五、查看詳情;走默認調度測試

...
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type    Reason     Age   From                    Message
  ----    ------     ----  ----                    -------
  Normal  Scheduled  83s   default-scheduler       Successfully assigned default/pod-example to 192.168.1.110
  Normal  Pulling    81s   kubelet, 192.168.1.110  pulling image "nginx:1.15"
  Normal  Pulled     67s   kubelet, 192.168.1.110  Successfully pulled image "nginx:1.15"
  Normal  Created    66s   kubelet, 192.168.1.110  Created container
 mal  Started    66s   kubelet, 192.168.1.110  Started container
kubectl describe pod pod-example
相關文章
相關標籤/搜索