在 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>
0 Comments:
張貼留言