欧美1区2区3区激情无套,两个女人互添下身视频在线观看,久久av无码精品人妻系列,久久精品噜噜噜成人,末发育娇小性色xxxx

22. 資源的調(diào)度——污點(diǎn)與容忍

本章講解知識點(diǎn)

  • 前言
  • Taints 和 Tolerations 概念
  • 實(shí)驗(yàn)
  • 污點(diǎn)的常用場景

<br>

1. 前言

假如我們有一種場景,我們希望某些節(jié)點(diǎn)是專用節(jié)點(diǎn),比如 Kubernetes master 節(jié)點(diǎn),就不希望業(yè)務(wù)應(yīng)用 Pod 調(diào)度過來。或者防止一些非關(guān)鍵的 Pod 占用一些特殊的節(jié)點(diǎn)資源,如大頁內(nèi)存。這個(gè)時(shí)候我們就希望這些節(jié)點(diǎn)有一些“污點(diǎn)”,這樣專用 Pod 能容忍這些污點(diǎn),就可以實(shí)現(xiàn)調(diào)度,不能容忍的,不讓其調(diào)度過來。為了實(shí)現(xiàn)這一場景,Kubernetes 涉及到污點(diǎn)與容忍(Taints 和 Tolerations)。

<br>

2. Taints 和 Tolerations 概念

NodeAffinity 是一種屬性,用于讓 Pod 被調(diào)度到特定的 Node 上,Taint 反過來則表示讓 Node 拒絕 Pod 運(yùn)行。一般情況下,標(biāo)記為 Taint 的節(jié)點(diǎn)可能存在問題,如資源緊缺、安全漏洞等,因此不希望 Pod 被調(diào)度到這些節(jié)點(diǎn)上。但是有些情況下仍需要將 Pod 調(diào)度到 Taint 節(jié)點(diǎn)上,這時(shí)可以使用 Toleration 屬性。需要注意的是,Taint 標(biāo)記的節(jié)點(diǎn)仍然是有效的工作節(jié)點(diǎn)。

在默認(rèn)情況下,在 Node 上設(shè)置一個(gè)或多個(gè) Taint 之后,除非 Pod 明確聲明能夠容忍這些污點(diǎn),否則無法在這些 Pod 上運(yùn)行??梢杂妹顏碓O(shè)置 Node 的 Taint 信息:

kubectl taint node node1 key=value:NoSchedule

這個(gè)設(shè)置為 node1 加上了一個(gè) Taint。該 Taint 的鍵為 key,值為 value,Taint 的效果是 NoSchedule。這意味著除非 Pod 明確聲明可以容忍這個(gè) Taint,否則不會被調(diào)度到 node1 上。除了 NoSchedule,還有 PreferNoSchedule 或 NoExecute,分別表示盡量不可調(diào)度和不可容忍(即立馬將 Pod 驅(qū)逐)

如果 Pod 需要調(diào)度到該帶污點(diǎn)的節(jié)點(diǎn),就需要加入 Toleration 的設(shè)置。舉例如下:

	tolerations:
	- key: "key"
	  operator: Equal
	  value: "value"
	  effect: NoSchedule

	tolerations:
	- key: "key"
	  operator: Exists
	  effect: NoSchedule

Pod 的 Toleration 聲明中的 key 和 effect 需要與 Taint 的設(shè)置保持一致,并且滿足:

  • operator 的值是 Exists 時(shí),無需指定 value
  • operator 的值是 Equal 時(shí)并且 value 相等。

有兩個(gè)特例:

  • 空的 key 配合 Exists 操作符能夠匹配所有鍵和值
  • 空的 effect 匹配所有 effect

<br>

3. 實(shí)驗(yàn)

3.1 簡單示例

比如我們之前的 my-first-deploy.yaml 中,就設(shè)置了 Toleration,以便于創(chuàng)建出來的 Pod 可以調(diào)度到 master 節(jié)點(diǎn)上,如果沒有這個(gè) Toleration,業(yè)務(wù) Pod 一般是不允許調(diào)度到 master 上的:

apiVersion: apps/v1
kind: Deployment
...
    spec:
      containers:
      - name: my-first-container
        image: nginx:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
      tolerations:
      - key: CriticalAddonsOnly
        operator: Exists
      - effect: NoSchedule
        key: node-role.kubernetes.io/master

我們再看看 master 節(jié)點(diǎn)的污點(diǎn):

[root@master mtuser]# kubectl describe node master | grep -i taint
Taints:             node-role.kubernetes.io/master:NoSchedule

可以看到,master 節(jié)點(diǎn)打上的污點(diǎn),key=node-role.kubernetes.io/master,effect 是 NoSchedule,即不帶 Toleration 的業(yè)務(wù) Pod 不允許調(diào)度到 master 節(jié)點(diǎn)上。

NoSchedule、PreferNoSchedule 和 NoExecute 是 Taints 和 Tolerations 機(jī)制中用于描述節(jié)點(diǎn)污點(diǎn)和 Pod 容忍度效果的三種效果(Effect)類型。

具體來說,它們的含義如下:

  • NoSchedule:表示該污點(diǎn)節(jié)點(diǎn)上不允許調(diào)度新的 Pod,已經(jīng)運(yùn)行在該節(jié)點(diǎn)上的 Pod 不受影響。
  • PreferNoSchedule:表示調(diào)度程序盡可能地避免將新的 Pod 調(diào)度到該污點(diǎn)節(jié)點(diǎn)上,但可以容忍一定程度的 Pod 在該節(jié)點(diǎn)上運(yùn)行。已經(jīng)運(yùn)行在該節(jié)點(diǎn)上的 Pod 不受影響。
  • NoExecute:表示該污點(diǎn)節(jié)點(diǎn)上不允許運(yùn)行新的 Pod,并且已經(jīng)運(yùn)行在該節(jié)點(diǎn)上的 Pod 將被立即終止并刪除。

我們來做個(gè)實(shí)驗(yàn),來驗(yàn)證一下上面的不同的 effect 效果:

我們重新定義 my-first-deploy.yaml,去掉 Toleration 定義,并且指定 Pod 調(diào)度到 master 節(jié)點(diǎn)上:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-first-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-first-deploy
  template:
    metadata:
      labels:
        app: my-first-deploy
    spec:
      containers:
      - name: my-first-container
        image: nginx:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
      nodeSelector:
        app: my-first-deploy

這里我們指定了創(chuàng)建出來的 Pod 調(diào)度到帶標(biāo)簽 app=my-first-deploy 的節(jié)點(diǎn),我們創(chuàng)建應(yīng)用:

[root@master mtuser]# kubectl create -f my-first-deploy.yaml
deployment.apps/my-first-deploy created
[root@master mtuser]#
[root@master mtuser]# kubectl get pod
NAME                              READY   STATUS    RESTARTS   AGE
my-first-deploy-97497d6db-slk8s   0/1     Pending   0          5s
[root@master mtuser]#
[root@master mtuser]# kubectl get node -l app=my-first-deploy
No resources found.

我們發(fā)現(xiàn) Pod 處于 Pending 狀態(tài),這是因?yàn)闆]有節(jié)點(diǎn)帶有標(biāo)簽 app=my-first-deploy。好,這時(shí)我們給 master 節(jié)點(diǎn)打上標(biāo)簽 app=my-first-deploy。

[root@master mtuser]# kubectl label node master app=my-first-deploy
node/master labeled
[root@master mtuser]# kubectl get pod
NAME                              READY   STATUS    RESTARTS   AGE
my-first-deploy-97497d6db-slk8s   0/1     Pending   0          101s
[root@master mtuser]#
[root@master mtuser]#  kubectl get node -l app=my-first-deploy
NAME     STATUS   ROLES    AGE    VERSION
master   Ready    master   6d1h   v1.15.5

我們打完標(biāo)簽后,發(fā)現(xiàn) Pod 依然沒有調(diào)度過去,這說明污點(diǎn)的優(yōu)先級高于 nodeSelector 的。

然后我們?nèi)サ?master 的污點(diǎn) kubectl taint node master node-role.kubernetes.io/master-,key- 就代表去除:

[root@master mtuser]# kubectl describe node master | grep -i taint
Taints:             node-role.kubernetes.io/master:NoSchedule
[root@master mtuser]#
[root@master mtuser]# kubectl taint node master node-role.kubernetes.io/master-
node/master untainted
[root@master mtuser]# kubectl describe node master | grep -i taint
Taints:             <none>
[root@master mtuser]#
[root@master mtuser]# kubectl get pod -owide
NAME                              READY   STATUS    RESTARTS   AGE    IP            NODE     NOMINATED NODE   READINESS GATES
my-first-deploy-97497d6db-slk8s   1/1     Running   0          5m5s   10.244.0.23   master   <none>           <none>

這時(shí)我們就發(fā)現(xiàn) Pod 成功調(diào)度到 master 節(jié)點(diǎn)了

然后這時(shí),我們又重新打回去污點(diǎn):

[root@master mtuser]# kubectl taint node master node-role.kubernetes.io/master=:NoSchedule
node/master tainted
[root@master mtuser]# kubectl get pod -owide
NAME                              READY   STATUS    RESTARTS   AGE     IP            NODE     NOMINATED NODE   READINESS GATES
my-first-deploy-97497d6db-slk8s   1/1     Running   0          8m35s   10.244.0.23   master   <none>           <none>

我們發(fā)現(xiàn)即使打上去了新的污點(diǎn),但是 NoSchedule 只是影響需要調(diào)度過來的 Pod,但是已經(jīng)成功調(diào)度的 Pod 并不會有影響。我們擴(kuò)容一個(gè) Pod 來驗(yàn)證一下:

[root@master 

剩余60%內(nèi)容,訂閱專欄后可繼續(xù)查看/也可單篇購買

云計(jì)算面試題全解析 文章被收錄于專欄

本??m合于立志轉(zhuǎn)行云計(jì)算的小白,有一定的編程、操作系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)、數(shù)據(jù)結(jié)構(gòu)、算法基礎(chǔ)。 本??瑫r(shí)也適合于面向云計(jì)算(Docker + Kubernetes)求職的從業(yè)者。 本??依嗽朴?jì)算、VMWare、Docker、Kubernetes、Containerd等一系列知識點(diǎn)的講解,并且最后總

全部評論

相關(guān)推薦

ResourceUtilization:差不多但是估計(jì)不夠準(zhǔn)確,一面沒考慮到增長人口,另一方面也沒考慮到能上大學(xué)的人數(shù)比例,不過我猜肯定只多不少
點(diǎn)贊 評論 收藏
分享
評論
點(diǎn)贊
收藏
分享

創(chuàng)作者周榜

更多
??途W(wǎng)
??推髽I(yè)服務(wù)