今天小編給大家分享的是kubernete集群中pod的調度機制,相信大部分人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,話不多說,一起往下看吧。
站在用戶的角度思考問題,與客戶深入溝通,找到臨沭網站設計與臨沭網站推廣的解決方案,憑借多年的經驗,讓設計與互聯網技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網站設計、做網站、企業(yè)官網、英文網站、手機端網站、網站推廣、空間域名、網絡空間、企業(yè)郵箱。業(yè)務覆蓋臨沭地區(qū)。
kubernets是容器編排引擎,其中最主要的一個功能是容器的調度,通過kube-scheduler實現容器的完全自動化調度,調度周期分為:調度周期Scheduling Cycle和綁定周期Binding Cycle,其中調度周期細分為過濾filter和weight稱重,按照指定的調度策略將滿足運行pod節(jié)點的node賽選出來,然后進行排序;綁定周期是經過kube-scheduler調度優(yōu)選的pod后,由特定的node節(jié)點watch然后通過kubelet運行。
過濾階段包含預選Predicate和scoring排序,預選是篩選滿足條件的node,排序是最滿足條件的node打分并排序,預選的算法包含有:
過濾條件需要檢查node上滿足的條件,可以通過kubectl describe node node-id方式查看,如下圖:
優(yōu)選調度算法有:
nodeName是PodSpec中的一個字段,可以通過pod.spec.nodeName指定將pod調度到某個具體的node節(jié)點上,該字段比較特殊一般都為空,如果有設置nodeName字段,kube-scheduler會直接跳過調度,在特定節(jié)點上通過kubelet啟動pod。通過nodeName調度并非是集群的智能調度,通過指定調度的方式可能會存在資源不均勻的情況,建議設置Guaranteed的Qos,防止資源不均時候Pod被驅逐evince。如下以創(chuàng)建一個pod運行在node-3上為例:
[root@node-1 demo]# cat nginx-nodeName.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-run-on-nodename
annotations:
kubernetes.io/description: "Running the Pod on specific nodeName"
spec:
containers:
- name: nginx-run-on-nodename
image: nginx:latest
ports:
- name: http-80-port
protocol: TCP
containerPort: 80
nodeName: node-3 #通過nodeName指定將nginx-run-on-nodename運行在特定節(jié)點node-3上
[root@node-1 demo]# kubectl apply -f nginx-nodeName.yaml
pod/nginx-run-on-nodename created
[root@node-1 demo]# kubectl get pods nginx-run-on-nodename -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-run-on-nodename 1/1 Running 0 6m52s 10.244.2.15 node-3 <none> <none>
nodeSelector是PodSpec中的一個字段,nodeSelector是最簡單實現將pod運行在特定node節(jié)點的實現方式,其通過指定key和value鍵值對的方式實現,需要node設置上匹配的Labels,節(jié)點調度的時候指定上特定的labels即可。如下以node-2添加一個app:web的labels,調度pod的時候通過nodeSelector選擇該labels:
[root@node-1 demo]# kubectl label node node-2 app=web
node/node-2 labeled
[root@node-1 demo]# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
node-1 Ready master 15d v1.15.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node-1,kubernetes.io/os=linux,node-role.kubernetes.io/master=
node-2 Ready <none> 15d v1.15.3 app=web,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node-2,kubernetes.io/os=linux
node-3 Ready <none> 15d v1.15.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node-3,kubernetes.io/os=linux
[root@node-1 demo]# cat nginx-nodeselector.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-run-on-nodeselector
annotations:
kubernetes.io/description: "Running the Pod on specific node by nodeSelector"
spec:
containers:
- name: nginx-run-on-nodeselector
image: nginx:latest
ports:
- name: http-80-port
protocol: TCP
containerPort: 80
nodeSelector: #通過nodeSelector將pod調度到特定的labels
app: web
[root@node-1 demo]# kubectl apply -f nginx-nodeselector.yaml
pod/nginx-run-on-nodeselector created
[root@node-1 demo]# kubectl get pods nginx-run-on-nodeselector -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-run-on-nodeselector 1/1 Running 0 51s 10.244.1.24 node-2 <none> <none>
系統(tǒng)默認預先定義有多種內置的labels,這些labels可以標識node的屬性,如arch架構,操作系統(tǒng)類型,主機名等
affinity/anti-affinity和nodeSelector功能相類似,相比于nodeSelector,affinity的功能更加豐富,未來會取代nodeSelector,affinity增加了如下的一些功能增強:
下面通過一個例子來演示node affinity的使用,requiredDuringSchedulingIgnoredDuringExecution指定需要滿足的條件,preferredDuringSchedulingIgnoredDuringExecution指定優(yōu)選的條件,兩者之間取與關系。
[root@node-1 ~]# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
node-1 Ready master 15d v1.15.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node-1,kubernetes.io/os=linux,node-role.kubernetes.io/master=
node-2 Ready <none> 15d v1.15.3 app=web,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node-2,kubernetes.io/os=linux
node-3 Ready <none> 15d v1.15.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node-3,kubernetes.io/os=linux
[root@node-1 demo]# cat nginx-node-affinity.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-run-node-affinity
annotations:
kubernetes.io/description: "Running the Pod on specific node by node affinity"
spec:
containers:
- name: nginx-run-node-affinity
image: nginx:latest
ports:
- name: http-80-port
protocol: TCP
containerPort: 80
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- node-1
- node-2
- node-3
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: app
operator: In
values: ["web"]
[root@node-1 demo]# kubectl apply -f nginx-node-affinity.yaml
pod/nginx-run-node-affinity created
[root@node-1 demo]# kubectl get pods --show-labels nginx-run-node-affinity -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELS
nginx-run-node-affinity 1/1 Running 0 106s 10.244.1.25 node-2 <none> <none> <none>
看完上述內容,你們對kubernete集群中pod的調度機制有進一步的了解嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注創(chuàng)新互聯行業(yè)資訊頻道,感謝各位的閱讀。
名稱欄目:kubernete集群中pod的調度機制
分享地址:http://www.rwnh.cn/article48/jjeoep.html
成都網站建設公司_創(chuàng)新互聯,為您提供網站收錄、商城網站、標簽優(yōu)化、企業(yè)建站、搜索引擎優(yōu)化、網站改版
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯