最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Kubernetes之Pod的調(diào)度實(shí)現(xiàn)方式

 更新時(shí)間:2025年09月19日 10:10:40   作者:Hud.  
Kubernetes通過(guò)定向調(diào)度(NodeName/NodeSelector)、親和性調(diào)度(NodeAffinity/PodAffinity/PodAntiAffinity)及污點(diǎn)容忍(Taints/Toleration)實(shí)現(xiàn)Pod節(jié)點(diǎn)控制,分別用于強(qiáng)制指定節(jié)點(diǎn)、優(yōu)化部署位置和靈活管理節(jié)點(diǎn)準(zhǔn)入,滿足不同場(chǎng)景下的調(diào)度需求

在默認(rèn)情況下,一個(gè)pod在哪個(gè)Node節(jié)點(diǎn)上運(yùn)行,是由Scheduler組件采用相應(yīng)的算法計(jì)算出來(lái)的,這個(gè)過(guò)程是不受人工控制的。

但是在實(shí)際的使用過(guò)程當(dāng)中,這并不能滿足需求,因?yàn)樵诤芏嗲闆r下,我們想控制某些Pod到某些節(jié)點(diǎn)上,那么應(yīng)該怎么做呢?

這就要求了解Kubernetes對(duì)于Pod的調(diào)度規(guī)則,Kubernetes提供了四大類的調(diào)度方式 

  • 自動(dòng)調(diào)度:運(yùn)行在哪個(gè)節(jié)點(diǎn)上完全由Scheduler經(jīng)過(guò)一系列的計(jì)算得出
  • 定向調(diào)度:NodeName,NodeSelector
  •  親和性調(diào)度:NodeAffinity、PodAffinity、PodAntiAffinity
  • 污點(diǎn)(容忍)調(diào)度:Taints、Toleration

1、定向調(diào)度

定向調(diào)度,指的是利用在pod上聲明NodeName或者nodeSelector,以此將Pod調(diào)度到期望的node節(jié)點(diǎn)上,注意,這里的調(diào)度是強(qiáng)制的,這就意味著即使要調(diào)度的目標(biāo)Node不存在,也會(huì)向上面進(jìn)行調(diào)度,只不過(guò)pod運(yùn)行失敗而已。

1.1 NodeName

NodeName用于強(qiáng)制約束將Pod調(diào)度到指定的Name的Node節(jié)點(diǎn)上。這種方式,其實(shí)就是直接跳過(guò)Scheduler的調(diào)度邏輯,直接寫(xiě)入PodList列表。

接下來(lái),就這個(gè)定向調(diào)度創(chuàng)建一個(gè)pod-nodename,yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-nodename
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
  nodeName: k8s-node1   # 指定調(diào)度到node1節(jié)點(diǎn)上去

# 創(chuàng)建Pod
[root@master ~]# vi pod-nodename.yaml
[root@master ~]# kubectl create -f pod-nodename.yaml
pod/pod-nodename created
#修改上面的文件再創(chuàng)建一個(gè)pod改到node2節(jié)點(diǎn)上去,看看效果
[root@master ~]# kubectl get pod -n dev -o wide
NAME            READY   STATUS    RESTARTS   AGE     IP               NODE        NOMINATED NODE   READINESS GATES
pod-nodename    1/1     Running   0          2m25s   10.244.36.91     k8s-node1   <none>           <none>
pod-nodename2   1/1     Running   0          5s      10.244.169.163   k8s-node2   <none> 

對(duì)了,這里插一句,關(guān)于Node節(jié)點(diǎn)的名稱,你要查看可以使用命令:

[root@master ~]# kubectl get node
NAME        STATUS   ROLES                  AGE   VERSION
k8s-node1   Ready    <none>                 12d   v1.23.5
k8s-node2   Ready    <none>                 12d   v1.23.5
master      Ready    control-plane,master   12d   v1.23.5

如果我在yaml文件中將nodeName改成了k8s-node3,會(huì)不會(huì)創(chuàng)建成功呢?來(lái)試試看:

[root@master ~]# kubectl create -f pod-nodename.yaml
pod/pod-nodename2 created
[root@master ~]# kubectl get pod -n dev
NAME            READY   STATUS    RESTARTS   AGE
pod-nodename2   0/1     Pending   0          14s

1.2 NodeSelector

NodeSelector用于將pod調(diào)度到添加了指定標(biāo)簽的node節(jié)點(diǎn)上,他是通過(guò)Kubernetes的label-selector機(jī)制實(shí)現(xiàn)的,也就是說(shuō)在pod創(chuàng)建之前會(huì)由scheduler使用MatchNodeSelector調(diào)整策略進(jìn)行l(wèi)abel匹配,找出目標(biāo)node,然后將pod調(diào)度到目標(biāo)節(jié)點(diǎn),該匹配規(guī)則是強(qiáng)制約束。

通過(guò)一個(gè)小案例,熟悉一下操作:

① 首先分別為node節(jié)點(diǎn)添加標(biāo)簽

[root@master ~]# kubectl label nodes k8s-node1 nodeenv=first
node/k8s-node1 labeled
[root@master ~]# kubectl label nodes k8s-node2 nodeenv=second
node/k8s-node2 labeled

② 創(chuàng)建一個(gè)pod-nodeselector.yaml文件,使用它來(lái)創(chuàng)建pod

apiVersion: v1
kind: Pod
metadata:
  name: pod-nodeselector
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
  nodeSelector:
    nodeenv: first   # 將pod調(diào)度到nodeenv=first的node上去

# 創(chuàng)建容器并查看是否被放在了指定的node節(jié)點(diǎn)上
[root@master ~]# vi pod-nodeselector.yaml
[root@master ~]# kubectl create -f pod-nodeselector.yaml
pod/pod-nodeselector created
[root@master ~]# kubectl get pod -n dev -o wide
NAME               READY   STATUS    RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
pod-nodeselector   1/1     Running   0          19s   10.244.36.92   k8s-node1   <none>           <none>

2、親和性調(diào)度

定向調(diào)度雖然使用起來(lái)非常方便但是也有一定的問(wèn)題,那就是如果沒(méi)有滿足條件的node,那么pod就不會(huì)運(yùn)行,即使在集群中還有可用的node列表也不行,這也就限制了這種調(diào)度方式的可用場(chǎng)景。

基于這個(gè)問(wèn)題,Kubernetes還提供了一種親和性調(diào)度(Affinity),他在nodeSelector的基礎(chǔ)上進(jìn)行了擴(kuò)展,可以通過(guò)配置的形式,實(shí)現(xiàn)優(yōu)先選擇滿足條件的node進(jìn)行調(diào)度,如果沒(méi)有,也可以調(diào)度到不滿足條件的節(jié)點(diǎn)上去,使得調(diào)度更加靈活:

Affinity主要分為三類:

  • NodeAffinity(Node親和性):以node為目標(biāo),解決pod可以調(diào)度到哪些node的問(wèn)題
  • podAffinity(pod親和性):以pod為目標(biāo),解決pod可以和哪些已存在的pod部署在同一個(gè)拓?fù)溆蛑?/li>
  • podAntiAffinity(pod反親和性):以pod為目標(biāo),解決pod不能和哪些已存在的pod部署在同一個(gè)拓?fù)溆蛑械膯?wèn)題

關(guān)于親和性(反親和性)使用場(chǎng)景的說(shuō)明:

  • 親和性:如果兩個(gè)應(yīng)用頻繁交互,那就有必要利用親和性讓兩個(gè)應(yīng)用盡可能的靠近,這樣可以減少因網(wǎng)絡(luò)通信帶來(lái)的性能損耗
  • 反親和性:當(dāng)應(yīng)用采用多副本部署時(shí),有必要采用反親和性讓各個(gè)應(yīng)用實(shí)例打散分布在各個(gè)node節(jié)點(diǎn)上,這樣可以提高服務(wù)的高可用性                                  

2.1 NodeAffinity的可選配置項(xiàng)

[root@master ~]# kubectl explain pod.spec.affinity.nodeAffinity
KIND:     Pod
VERSION:  v1
   # 優(yōu)先調(diào)度到滿足指定規(guī)則的node,相當(dāng)于軟限制(傾向)
   preferredDuringSchedulingIgnoredDuringExecution	<[]Object> 
    preference    #一個(gè)節(jié)點(diǎn)選擇器項(xiàng),與相應(yīng)的權(quán)重相關(guān)聯(lián)
    matchFields    #按節(jié)點(diǎn)字段列出的節(jié)點(diǎn)選擇器要求列表
    matchExpression    #按節(jié)點(diǎn)標(biāo)簽列出的節(jié)點(diǎn)選擇器要求列表(推薦)
    key     #鍵
    value    #值
    operator    #關(guān)系符
    weight        #傾向權(quán)重,0~100之間
   #Node節(jié)點(diǎn)必須滿足指定的所有規(guī)則才可以,相當(dāng)于硬限制
   requiredDuringSchedulingIgnoredDuringExecution	<Object>
    nodeSelectorTerms    #節(jié)點(diǎn)選擇列表
    matchFields    #按節(jié)點(diǎn)字段列出的節(jié)點(diǎn)選擇器要求列表
    matchExpression    #按節(jié)點(diǎn)標(biāo)簽列出的節(jié)點(diǎn)選擇器要求列表(推薦)
    key     #鍵
    value    #值
    operator    #關(guān)系符

關(guān)系符的使用說(shuō)明:

-matchExpression:
    -key: nodeenv        #匹配存在標(biāo)簽的key為nodeenv的節(jié)點(diǎn)
     operator: Exists
    -key: nodeenv        #匹配標(biāo)簽的key為nodeenv,且value是"xxx"或"yyy"的節(jié)點(diǎn)
     operator: In     
     values:["xxx","yyy"]
    -key:nodeenv         #匹配標(biāo)簽的key為nodeenv且value大于"xxx"的節(jié)點(diǎn)
     operator: Gt
     values: "xxx"

先來(lái)演示一下 requiredDuringSchedulingIgnoredDuringExecution,創(chuàng)建pod-nodeaffinity-required.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-nodeaffinity-required
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
  affinity:        # 親和性設(shè)置    
    nodeAffinity:     # 設(shè)置node親和性
      requiredDuringSchedulingIgnoredDuringExecution:   # 硬限制
        nodeSelectorTerms:
        - matchExpressions:   # 匹配env的值在["xxx","yyy"]中的標(biāo)簽
          - key: nodeenv
            operator: In
            values: ["xxx","yyy"]

# 創(chuàng)建容器
[root@master ~]# kubectl create -f pod-nodeaffinity-required.yaml 
pod/pod-affinity-required created
# 先看看node的標(biāo)簽
[root@master ~]# kubectl get node --show-labels
NAME        STATUS   ROLES                  AGE   VERSION   LABELS
k8s-node1   Ready    <none>                 12d   v1.23.5   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux,nodeenv=first
k8s-node2   Ready    <none>                 12d   v1.23.5   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux,nodeenv=second
master      Ready    control-plane,master   12d   v1.23.5   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=

現(xiàn)在的節(jié)點(diǎn)中,node1和node2的nodeenv標(biāo)簽不存在xxx或者yyy,那么也就意味著這個(gè)pod應(yīng)該是無(wú)法運(yùn)行成功的

[root@master ~]# kubectl get pod -n dev
NAME                    READY   STATUS    RESTARTS   AGE
pod-affinity-required   0/1     Pending   0          5m4s

# 使用describe看看調(diào)度失敗的原因
[root@master ~]# kubectl describe pod pod-nodeaffinity-required -n dev
Events:
  Type     Reason            Age                 From               Message
  ----     ------            ----                ----               -------
  Warning  FailedScheduling  22s (x10 over 10m)  default-scheduler  0/3 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate, 2 node(s) didn't match Pod's node affinity/selector.

現(xiàn)在顯示是失敗,試試xxx改成first重新創(chuàng)建看看

[root@master ~]# vi pod-nodeaffinity-required.yaml 
[root@master ~]# kubectl create -f pod-nodeaffinity-required.yaml 
pod/pod-nodeaffinity-required created
[root@master ~]# kubectl get pod -n dev -o wide
NAME                        READY   STATUS    RESTARTS   AGE     IP             NODE        NOMINATED NODE   READINESS GATES
pod-nodeaffinity-required   1/1     Running   0          12s     10.244.36.93   k8s-node1   <none>           <none>

下面再來(lái)看看軟限制(requiredDuringSchedulingIgnoredDuringExecution)

創(chuàng)建pod-nodeaffinity-preferred.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-nodeaffinity-preferred
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
  affinity:        # 親和性設(shè)置
    nodeAffinity:     # 設(shè)置node親和性
      preferredDuringSchedulingIgnoredDuringExecution:   # 軟限制
        - weight: 1
          preference:      # 匹配env的值在["xxx","yyy"]中的標(biāo)簽(當(dāng)前環(huán)境中沒(méi)有)
            matchExpressions:
            - key: nodeenv
              operator: In
              values: ["xxx","yyy"]
~ 

# 創(chuàng)建pod并查看
[root@master ~]# kubectl create -f pod-nodeaffinity-preferred.yaml 
pod/pod-nodeaffinity-preferred created
[root@master ~]# kubectl get pod -n dev -o wide
NAME                         READY   STATUS    RESTARTS   AGE    IP               NODE        NOMINATED NODE   READINESS GATES
pod-nodeaffinity-preferred   1/1     Running   0          119s   10.244.169.164   k8s-node2   <none>           <none>                                           

調(diào)度親和性只在調(diào)度過(guò)程中生效,調(diào)度完成后即使node的標(biāo)簽發(fā)生了改變,也不理你了。

2.2 PodAffinity的可選配置項(xiàng)

[root@master ~]# kubectl explain pod.spec.affinity.podAffinity
FIELDS:
  # 軟限制 
   requiredDuringSchedulingIgnoredDuringExecution	<[]Object>
    namespace        # 指定參照pod的namespace
    topologyKey      # 指定調(diào)度作用域
    labelSelector    # 標(biāo)簽選擇器
      matchExpressions:
        key    # 鍵
        values    # 值
        operator  # 關(guān)系符
        matchlabels      # 指多個(gè)matchExpressions映射的內(nèi)容
  # 軟限制
     preferredDuringSchedulingIgnoredDuringExecution	<[]Object>
        namespace        # 指定參照pod的namespace
        topologyKey      # 指定調(diào)度作用域
        labelSelector    # 標(biāo)簽選擇器
          matchExpressions:
            key    # 鍵
            values    # 值
            operator  # 關(guān)系符
            matchlabels      # 指多個(gè)matchExpressions映射的內(nèi)容
          weight     # 權(quán)重

topologyKey用于指定調(diào)度時(shí)作用域,例如:

  • 如果指定為Kubernetes.io/hostname,那就是以node節(jié)點(diǎn)為區(qū)分范圍
  • 如果指定為beta.kubernetes.io/os,則以node節(jié)點(diǎn)的操作系統(tǒng)類型來(lái)區(qū)分

1)先創(chuàng)建一個(gè)參照的pod,pod-podaffinity-target.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-podaffinity-target
  namespace: dev
  labels:        # 設(shè)置標(biāo)簽
    podenv:  target
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
  nodeName: k8s-node1   # 部署到node1上面

#創(chuàng)建并查看pod
[root@master ~]# vi pod-podaffinity-target.yaml
[root@master ~]# kubectl create -f pod-podaffinity-target.yaml 
pod/pod-podaffinity-target created
[root@master ~]# kubectl get pod -n dev
NAME                     READY   STATUS    RESTARTS   AGE
pod-podaffinity-target   1/1     Running   0          9s

 2)創(chuàng)建pod-podaffinity-required.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-nodeaffinity-preferred
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
  affinity:        # 親和性設(shè)置
    podAffinity:     # 設(shè)置pod親和性
      requiredDuringSchedulingIgnoredDuringExecution:   # 硬限制
        - labelSelector:
            matchExpressions:      # 匹配env的值在["xxx","yyy"]中的標(biāo)簽
            - key: nodeenv
              operator: In
              values: ["xxx","yyy"]
           topologyKey: kubernetes.io/hostname  # 如果找不到,調(diào)度到目標(biāo)pod同一個(gè)節(jié)點(diǎn)上

# 創(chuàng)建并查看
[root@master ~]# kubectl create -f pod-podaffinity-required.yaml 
pod/pod-podaffinity-required created
[root@master ~]# kubectl get pod -n dev -o wide
NAME                       READY   STATUS    RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
pod-podaffinity-required   0/1     Pending   0          8s    <none>         <none>      <none>           <none>
pod-podaffinity-target     1/1     Running   0          14m   10.244.36.94   k8s-node1   <none>           <none>
[root@master ~]# kubectl describe pod pod-podaffinity-required -n dev
Events:
  Type     Reason            Age                 From               Message
  ----     ------            ----                ----               -------
  Warning  FailedScheduling  13s (x2 over 101s)  default-scheduler  0/3 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate, 2 node(s) didn't match pod affinity rules.

有一個(gè)節(jié)點(diǎn)上有污點(diǎn)(taint)---主節(jié)點(diǎn)

2.3 podAntiAffinity 反親和性案例

還是將剛才設(shè)置的target作為參照,反親和這個(gè)pod那應(yīng)該被調(diào)度到node2上

apiVersion: v1
kind: Pod
metadata:
  name: pod-podantiaffinity-required
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
  affinity:        # 親和性設(shè)置
    podAntiAffinity:     # 設(shè)置pod反親和性
      requiredDuringSchedulingIgnoredDuringExecution:   # 硬限制
        - labelSelector:
            matchExpressions:      # 匹配podenv的值在["target"]中的標(biāo)簽
            - key: podenv
              operator: In
              values: ["target"]
          topologyKey: kubernetes.io/hostname  # 如果找不到,調(diào)度到目標(biāo)pod同一個(gè)節(jié)點(diǎn)上

# 創(chuàng)建并查看pod
[root@master ~]# kubectl create -f pod-podantiaffinity-required.yaml 
pod/pod-podantiaffinity-required created
[root@master ~]# kubectl get pod -n dev -o wide  
NAME                           READY   STATUS    RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
pod-podaffinity-required       1/1     Running   0          10m   10.244.36.95     k8s-node1   <none>           <none>
pod-podaffinity-target         1/1     Running   0          28m   10.244.36.94     k8s-node1   <none>           <none>
pod-podantiaffinity-required   1/1     Running   0          43s   10.244.169.165   k8s-node2   <none>           <none>

3、 污點(diǎn)調(diào)度--站在Node的角度

3.1 污點(diǎn)(Taints)

前面的調(diào)度方式都是站在pod的角度上,通過(guò)在Pod上添加屬性,來(lái)確定Pod是否需要調(diào)度到指定的Node上,其實(shí)我們也可以站在Node的角度上面,通過(guò)在Node上添加污點(diǎn)屬性,來(lái)決定是否允許Pod調(diào)度過(guò)來(lái)。

Node被設(shè)置上污點(diǎn)之后就和Pod之間存在了一種相斥的關(guān)系,進(jìn)而拒絕Pod調(diào)度進(jìn)來(lái),設(shè)置可以將已經(jīng)調(diào)度進(jìn)來(lái)的Pod驅(qū)逐出去。

污點(diǎn)的格式為:key=value:effect,key和value是污點(diǎn)的標(biāo)簽,effect描述污點(diǎn)的作用,支持如下的三個(gè)選項(xiàng):

  • PreferNoScheduler:Kubernetes盡量避免把Pod調(diào)度到具有該污點(diǎn)的Node上,除非沒(méi)有其他節(jié)點(diǎn)可調(diào)度
  • NoScheduler:Kubernetes將不會(huì)把Pod調(diào)度到具有該污點(diǎn)的Node上,但不影響當(dāng)前node上已經(jīng)存在的pod
  • NoExecute:Kubernetes將不會(huì)把Pod調(diào)度到具有該污點(diǎn)的Node上,同時(shí)也會(huì)講Node上已存在的pod驅(qū)離
# 設(shè)置污點(diǎn)
kubectl taint nodes k8s-node1 key=value:effect

# 去除污點(diǎn)
kubectl taint nodes k8s-node1 key:effect-

# 去除所有污點(diǎn)
kubectl taint nodes k8s-node1 key-

接下來(lái),演示一下污點(diǎn)的效果:

  • 1、準(zhǔn)備節(jié)點(diǎn)node1(暫時(shí)停止node2節(jié)點(diǎn))
  • 2、為node1設(shè)置一個(gè)污點(diǎn):tag=qty:PreferNoSchedule;然后創(chuàng)建pod1(可以)
  • 3、修改為node1節(jié)點(diǎn)設(shè)置一個(gè)污點(diǎn):tag=qty:NoSchedule;然后創(chuàng)建pod2(pod1正常 pod2失?。?/li>
  • 4、修改為node1節(jié)點(diǎn)設(shè)置一個(gè)污點(diǎn):tag=qty:noExecute;創(chuàng)建pod3,全失敗
[root@master ~]# kubectl get node
NAME        STATUS     ROLES                  AGE   VERSION
k8s-node1   Ready      <none>                 13d   v1.23.5
k8s-node2   NotReady   <none>                 13d   v1.23.5
master      Ready      control-plane,master   13d   v1.23.5
# 為node1設(shè)置污點(diǎn)
[root@master ~]# kubectl taint nodes k8s-node1 tag=qty:PreferNoSchedule
node/k8s-node1 tainted
# 創(chuàng)建pod1
[root@master ~]# kubectl run taint1 --image=naginx:1.17.1 -n dev
pod/taint1 created
[root@master ~]# kubectl get pod -n dev
NAME                           READY   STATUS        RESTARTS   AGE
taint1                         1/1     Running       0          53s
# 為node1設(shè)置污點(diǎn),改為NoScheduler
[root@master ~]# kubectl taint nodes k8s-node1 tag:PreferNoSchedule-
node/k8s-node1 untainted
[root@master ~]# kubectl taint nodes k8s-node1 tag=qty:NoSchedule
node/k8s-node1 tainted

# 創(chuàng)建pod2
[root@master ~]# kubectl run taint2 --image=nginx -n dev
pod/taint2 created
[root@master ~]# kubectl get pod -n dev
NAME                           READY   STATUS        RESTARTS   AGE
taint1                         1/1     Running       0          7m14s
taint2                         0/1     Pending       0          11s

# 為node1設(shè)置污點(diǎn)
[root@master ~]# kubectl taint nodes k8s-node1 tag:NoSchedule-
node/k8s-node1 untainted
[root@master ~]# kubectl taint nodes k8s-node1 tag=qty:NoExecute
node/k8s-node1 tainted

# 創(chuàng)建pod3
[root@master ~]# kubectl run taint3 --image=nginx -n dev
pod/taint3 created
[root@master ~]# kubectl get pod -n dev
NAME                           READY   STATUS        RESTARTS   AGE
taint3                         0/1     Pending       0          4s

# 刪除所有污點(diǎn)
[root@master ~]# kubectl taint nodes k8s-node1 tag-
node/k8s-node1 untainted

3.2 容忍(Toleration)

污點(diǎn)就是拒絕,容忍就是忽略,Node通過(guò)污點(diǎn)拒絕pod調(diào)度上去,pod通過(guò)容忍忽略拒絕

創(chuàng)建pod-toleration.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-toleration
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
  tolerations:        # 添加容忍
  - key: "tag"         # 要容忍的污點(diǎn)的key
    operator: "Equal"   # 操作符
    value: "qty"        # 容忍的污點(diǎn)的value
    effect: "NoExecute"    # 添加容忍的規(guī)則,要和污點(diǎn)的規(guī)則相同

#創(chuàng)建pod查看
[root@master ~]# kubectl create -f pod-toleration.yaml 
pod/pod-toleration created
[root@master ~]# kubectl get pod -n dev
NAME                           READY   STATUS        RESTARTS   AGE
pod-toleration                 1/1     Running       0          39s

                                                                         

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Jenkins打包、發(fā)布、部署完整驟記錄

    Jenkins打包、發(fā)布、部署完整驟記錄

    這篇文章主要介紹了Jenkins的基本概念,服務(wù)器環(huán)境檢查,以及如何安裝和配置Jenkins,包括安裝FTP服務(wù)、Maven、Git和Jenkins本身,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • Kubernetes集群調(diào)度詳解(節(jié)點(diǎn)親和性、Pod親和性、Taint與Toleration)

    Kubernetes集群調(diào)度詳解(節(jié)點(diǎn)親和性、Pod親和性、Taint與Toleration)

    Kubernetes調(diào)度器負(fù)責(zé)將Pod分配到節(jié)點(diǎn),兼顧資源合理分配、調(diào)度效率及用戶策略,通過(guò)預(yù)選、優(yōu)選、選擇三階段決策,支持自定義調(diào)度器、節(jié)點(diǎn)親和性(軟硬策略)、Taint/Toleration機(jī)制及直接指定節(jié)點(diǎn),實(shí)現(xiàn)靈活調(diào)度與容錯(cuò)
    2025-09-09
  • k8s中kubeconfig的配置以及使用詳解

    k8s中kubeconfig的配置以及使用詳解

    每當(dāng)與集群交互的時(shí)候少不了的是身份認(rèn)證,使用kubeconfig(即證書(shū))和token兩種認(rèn)證方式是最簡(jiǎn)單也最通用的認(rèn)證方式,下面這篇文章主要給大家介紹了關(guān)于k8s中kubeconfig的配置以及使用的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • 詳解K8S apiVersion對(duì)照表

    詳解K8S apiVersion對(duì)照表

    k8s更新迭代比較快,apiVersion也在不斷變化中,每個(gè)版本的對(duì)應(yīng)的apiVersion略有不同,這篇文章主要介紹了K8S apiVersion對(duì)照表,需要的朋友可以參考下
    2022-07-07
  • k8s容器反復(fù)重啟問(wèn)題及解決

    k8s容器反復(fù)重啟問(wèn)題及解決

    這篇文章主要介紹了k8s容器反復(fù)重啟問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-07-07
  • 非root用戶管理k8s和docker容器詳解

    非root用戶管理k8s和docker容器詳解

    文章介紹了如何通過(guò)創(chuàng)建非root用戶(如ops用戶)并配置kubectl權(quán)限,結(jié)合RBAC限制訪問(wèn)范圍,實(shí)現(xiàn)安全管理K8s集群;同時(shí)通過(guò)將用戶加入docker組,無(wú)需root權(quán)限即可操作Docker容器
    2025-09-09
  • 通過(guò)kubernetes部署nginx+php網(wǎng)站環(huán)境過(guò)程

    通過(guò)kubernetes部署nginx+php網(wǎng)站環(huán)境過(guò)程

    本文詳細(xì)介紹了如何在Kubernetes中部署Nginx+PHP網(wǎng)站環(huán)境,包括環(huán)境準(zhǔn)備、部署步驟、Service、ConfigMap、Ingress等配置,并提供了具體的YAML文件示例和命令,通過(guò)這些步驟,可以實(shí)現(xiàn)高可用、可擴(kuò)展的Web服務(wù)
    2026-01-01
  • Kubernetes(K8S)中強(qiáng)制刪除命名空間的實(shí)現(xiàn)方式

    Kubernetes(K8S)中強(qiáng)制刪除命名空間的實(shí)現(xiàn)方式

    本文介紹了在Kubernetes中刪除處于Terminating狀態(tài)的命名空間mysql-operator的步驟,包括檢查并清理殘留資源、強(qiáng)制刪除命名空間等方法
    2026-01-01
  • 超詳細(xì)的Kubernetes?(k8s)常用命令整理

    超詳細(xì)的Kubernetes?(k8s)常用命令整理

    這篇文章主要介紹了Kubernetes?(k8s)常用命令整理的相關(guān)資料,講解了Kubernetes集群管理、節(jié)點(diǎn)資源查看、Pod管理、部署管理、命名空間管理、服務(wù)負(fù)載均衡、調(diào)試排錯(cuò)以及備份恢復(fù)等操作的命令,需要的朋友可以參考下
    2025-03-03
  • 詳解Rainbond云原生平臺(tái)簡(jiǎn)化Kubernetes業(yè)務(wù)問(wèn)題排查

    詳解Rainbond云原生平臺(tái)簡(jiǎn)化Kubernetes業(yè)務(wù)問(wèn)題排查

    這篇文章主要介紹了詳解Rainbond云原生平臺(tái)簡(jiǎn)化Kubernetes業(yè)務(wù)問(wèn)題排查,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03

最新評(píng)論

弥勒县| 湘阴县| 阳新县| 个旧市| 邓州市| 瑞安市| 山东省| 武义县| 长顺县| 阜阳市| 平潭县| 镇江市| 九龙城区| 云林县| 华阴市| 望城县| 阜新市| 德昌县| 河曲县| 遂川县| 犍为县| 金川县| 泾源县| 五原县| 无极县| 太保市| 镇巴县| 西藏| 墨脱县| 唐海县| 渝北区| 玉山县| 隆林| 河池市| 景德镇市| 名山县| 乡城县| 伊金霍洛旗| 神木县| 祁门县| 阳曲县|