欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

kubernete集群中pod的調(diào)度機制-創(chuàng)新互聯(lián)

今天小編給大家分享的是kubernete集群中pod的調(diào)度機制,相信大部分人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,話不多說,一起往下看吧。

創(chuàng)新互聯(lián)建站主營桓臺網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,手機APP定制開發(fā),桓臺h5小程序定制開發(fā)搭建,桓臺網(wǎng)站營銷推廣歡迎桓臺等地區(qū)企業(yè)咨詢

1. Pod調(diào)度

1.1 pod調(diào)度概述

kubernets是容器編排引擎,其中最主要的一個功能是容器的調(diào)度,通過kube-scheduler實現(xiàn)容器的完全自動化調(diào)度,調(diào)度周期分為:調(diào)度周期Scheduling Cycle和綁定周期Binding Cycle,其中調(diào)度周期細分為過濾filter和weight稱重,按照指定的調(diào)度策略將滿足運行pod節(jié)點的node賽選出來,然后進行排序;綁定周期是經(jīng)過kube-scheduler調(diào)度優(yōu)選的pod后,由特定的node節(jié)點watch然后通過kubelet運行。

kubernete集群中pod的調(diào)度機制

過濾階段包含預選Predicate和scoring排序,預選是篩選滿足條件的node,排序是最滿足條件的node打分并排序,預選的算法包含有:

  • CheckNodeConditionPred  節(jié)點是否ready
  • MemoryPressure       節(jié)點內(nèi)存是否壓力大(內(nèi)存是否足夠)
  • DiskPressure          節(jié)點磁盤壓力是否大(空間是否足夠)
  • PIDPressure          節(jié)點Pid是否有壓力(Pid進程是否足夠)
  • GeneralPred          匹配pod.spec.hostname字段
  • MatchNodeSelector     匹配pod.spec.nodeSelector標簽
  • PodFitsResources      判斷resource定義的資源是否滿足
  • PodToleratesNodeTaints  能容忍的污點pod.spec.tolerations
  • CheckNodeLabelPresence
  • CheckServiceAffinity
  • CheckVolumeBinding
  • NoVolumeZoneConflict

過濾條件需要檢查node上滿足的條件,可以通過kubectl describe node node-id方式查看,如下圖:

kubernete集群中pod的調(diào)度機制

優(yōu)選調(diào)度算法有:

  • least_requested  資源消耗最小的節(jié)點
  • balanced_resource_allocation 各項資源消耗最均勻的節(jié)點
  • node_prefer_avoid_pods  節(jié)點傾向
  • taint_toleration  污點檢測,檢測有污點條件的node,得分越低
  • selector_spreading  節(jié)點selector
  • interpod_affinity    pod親和力遍歷
  • most_requested    資源消耗大的節(jié)點
  • node_label       node標簽

1. 2 指定nodeName調(diào)度

nodeName是PodSpec中的一個字段,可以通過pod.spec.nodeName指定將pod調(diào)度到某個具體的node節(jié)點上,該字段比較特殊一般都為空,如果有設置nodeName字段,kube-scheduler會直接跳過調(diào)度,在特定節(jié)點上通過kubelet啟動pod。通過nodeName調(diào)度并非是集群的智能調(diào)度,通過指定調(diào)度的方式可能會存在資源不均勻的情況,建議設置Guaranteed的Qos,防止資源不均時候Pod被驅(qū)逐evince。如下以創(chuàng)建一個pod運行在node-3上為例:

  1. 編寫yaml將pod指定在node-3節(jié)點上運行
[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上
  1. 運行yaml配置使之生效
[root@node-1 demo]# kubectl apply -f nginx-nodeName.yaml 
pod/nginx-run-on-nodename created
  1. 查看確認pod的運行情況,已運行在node-3節(jié)點
[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>

1.2. 通過nodeSelector調(diào)度

nodeSelector是PodSpec中的一個字段,nodeSelector是最簡單實現(xiàn)將pod運行在特定node節(jié)點的實現(xiàn)方式,其通過指定key和value鍵值對的方式實現(xiàn),需要node設置上匹配的Labels,節(jié)點調(diào)度的時候指定上特定的labels即可。如下以node-2添加一個app:web的labels,調(diào)度pod的時候通過nodeSelector選擇該labels:
  1. 給node-2添加labels
[root@node-1 demo]# kubectl label node node-2 app=web
node/node-2 labeled
  1. 查看校驗labels設置情況,node-2增加多了一個app=web的labels
[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
  1. 通過nodeSelector將pod調(diào)度到app=web所屬的labels
[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調(diào)度到特定的labels
   app: web
  1. 應用yaml文件生成pod
[root@node-1 demo]# kubectl apply -f nginx-nodeselector.yaml 
pod/nginx-run-on-nodeselector created
  1. 檢查驗證pod的運行情況,已經(jīng)運行在node-2節(jié)點
[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)默認預先定義有多種內(nèi)置的labels,這些labels可以標識node的屬性,如arch架構(gòu),操作系統(tǒng)類型,主機名等

  • beta.kubernetes.io/arch=amd64
  • beta.kubernetes.io/os=linux
  • kubernetes.io/arch=amd64
  • kubernetes.io/hostname=node-3
  • kubernetes.io/os=linux

1.3 node Affinity and anti-affinity

affinity/anti-affinity和nodeSelector功能相類似,相比于nodeSelector,affinity的功能更加豐富,未來會取代nodeSelector,affinity增加了如下的一些功能增強:

  • 表達式更加豐富,匹配方式支持多樣,如In,NotIn, Exists, DoesNotExist. Gt, and Lt;
  • 可指定soft和preference規(guī)則,soft表示需要滿足的條件,通過requiredDuringSchedulingIgnoredDuringExecution來設置,preference則是優(yōu)選選擇條件,通過preferredDuringSchedulingIgnoredDuringExecution指定
  • affinity提供兩種級別的親和和反親和:基于node的node affinity和基于pod的inter-pod affinity/anti-affinity,node affinity是通過node上的labels來實現(xiàn)親和力的調(diào)度,而pod affinity則是通過pod上的labels實現(xiàn)親和力的調(diào)度,兩者作用的范圍有所不同。

下面通過一個例子來演示node affinity的使用,requiredDuringSchedulingIgnoredDuringExecution指定需要滿足的條件,preferredDuringSchedulingIgnoredDuringExecution指定優(yōu)選的條件,兩者之間取與關(guān)系。

  1. 查詢node節(jié)點的labels,默認包含有多個labels,如kubernetes.io/hostname
[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
  1. 通過node affiinity實現(xiàn)調(diào)度,通過requiredDuringSchedulingIgnoredDuringExecution指定滿足條件kubernetes.io/hostname為node-2和node-3,通過preferredDuringSchedulingIgnoredDuringExecution優(yōu)選條件需滿足app=web的labels
[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"]
  1. 應用yaml文件生成pod
[root@node-1 demo]# kubectl apply -f nginx-node-affinity.yaml 
pod/nginx-run-node-affinity created
  1. 確認pod所屬的node節(jié)點,滿足require和 preferre條件的節(jié)點是node-2
[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>

看完上述內(nèi)容,你們對kubernete集群中pod的調(diào)度機制有進一步的了解嗎?如果還想學到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

標題名稱:kubernete集群中pod的調(diào)度機制-創(chuàng)新互聯(lián)
鏈接分享:http://chinadenli.net/article10/cdoido.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供微信公眾號定制開發(fā)企業(yè)網(wǎng)站制作微信小程序網(wǎng)站改版企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設計公司