︿
Top

Kubernetes 的污點與容忍測試


在 Kubernetes Cluster 中會有多台 nodes 可佈署容器,但有些時候我們希望部分 nodes 上是不允許被隨機佈署上容器的,就會在這些 nodes 上加上汙點,當在 K8S 上面創建容器時,因為容器嫌這些有汙點的 nodes 太髒就不會過去了。

以下是關於汙點策略的參數說明

PreferNoSchedule: 盡量不要來,除非沒辦法 

NoSchedule: 新的不要來,在這的就別動了 

NoExecute: 新的不要來,在這的趕緊走 


本次測試基於 Rancher 2.5.1/CentOS 7.9 作為說明範例,比如現況的 K8S ,除了 Master Node 自帶汙點以避免被佈署 workload ...


也可以對 Worker node 增加汙點,比如在 rke-node02 上增加汙點

[root@localhost ~]# kubectl taint node rke-node02 key=pod-rule:NoSchedule
node/rke-node02 tainted

此時於 K8S 中佈署任一 pod(容器),是絕對不會被佈署到有汙點的 rke-node02 上

[root@localhost k8s-yaml]# kubectl create ns dev
[root@localhost k8s-yaml]# kubectl run taint-pod --image=nginx:1.17.1 -n dev
pod/taint-pod created
[root@localhost k8s-yaml]# kubectl get pod -n dev -o wide
NAME        READY   STATUS    RESTARTS   AGE   IP           NODE         NOMINATED NODE   READINESS GATES
taint-pod   1/1     Running   0          12s   10.42.1.10   rke-node01   <none>           <none>

但偏偏有人就愛這麼髒,臭味相投,只要在 pod 建立文檔中指定好相關toleration參數,能夠 容忍這個汙點的 pod 就會往該 node 上佈署容器

[root@localhost ~]# nano pod-toleration.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-toleration
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
  tolerations:      # 添加容忍
  - key: "key"        # 要容忍的點的key
    value: "pod-rule"    # 容忍的點的value
    operator: "Equal" # 操作符
    effect: "NoSchedule"   # 添加容忍的規則,這裏必須和標記的點規則相同

從結果來看,新增的 pod 只會按照臭味相投的 pod-rule:NoSchedule 配置創建於 rke-node02 節點上

[root@localhost ~]# kubectl apply -f ./pod-toleration.yaml 
pod/pod-toleration created
[root@localhost ~]# kubectl get pod -n dev -o wide
NAME             READY   STATUS    RESTARTS   AGE   IP          NODE         NOMINATED NODE   READINESS GATES
pod-toleration   1/1     Running   0          3s    10.42.2.6   rke-node02   <none>           <none>



tomy

來自台灣的系統工程師,一直熱衷於 Open source 相關技術的學習、建置、應用與分享。

  • Image
  • Image
  • Image
  • Image
  • Image

0 Comments:

張貼留言