K8S学习之基础七:k8s中node污点和pod容忍度

发布于:2025-03-06 ⋅ 阅读:(12) ⋅ 点赞:(0)

污点和容忍度

污点就是定义在节点上的键值属性数据,可以决定拒绝哪些pod

taints是键值数据,用在节点上,定义污点。

tolerations是键值数据,用在pod上,定义容忍度,能容忍哪些污点。

查看node污点:

NoSchedule:仅影响pod调度过程,当pod能容忍这个节点的污点,就可以调度到该节点。如果这个节点污点改了,之 对以后新的pod产生影响,对已存在的pod不影响

NoExecute:既影响调度过程,又影响现存pod

PreferNoSchedule:最好不,也可以。是NoSchedule的不强制版本

mast的污点是NoSchedule,所以如果创建的pod没有容忍度,都不会调度到master,只会调度到node节点

kube-system命名空间中的pod,是由定义容忍度的:

# 给node02打上污点

kubectl taint node node02 node-type=production:NoSchedule

vi pod-taints.yaml
kind: Pod
metadata:
  name: taint-pod
  namespace: default
  labels:
    app:  nginx-pod
spec:
  containers:
  - name:  taint-pod
    image: 172.16.80.140/nginx/nginx:1.26
    imagePullPolicy: IfNotPresent
kubectl apply -f pod-taints.yaml
kubectl get pods -owide

# 该pod无法调度到node02上,只能调度到node01上

# 给node01也打上污点  NoExecute,发现pod不见了,重新应用,也只能是pending状态

kubectl taint node node01 node-type=dev:NoExecute

# 给pod打上容忍度,node-type=dev:NoExecute,发现pod又可以调度到node01上了

vi pod-tolerations.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-tole
  namespace: default
  labels:
    app: nginx
    release: canary
spec:
      containers:
      - name: nginx-tole
        image: 172.16.80.140/nginx/nginx:1.26
        imagePullPolicy: IfNotPresent
      tolerations:
      - key: "node-type"
        operator: "Equal"
        value: "dev"
        effect: "NoExecute"
        tolerationSeconds: 3600
kubectl apply -f pod-tolerations.yaml
kubectl get pods -owide