您可以使用kubectl describe node <nodename>
检查污点。
kubectl describe node masternode
Name: masternode
Roles: master
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
kubernetes.io/arch=amd64
kubernetes.io/hostname=ip-10-0-0-115
kubernetes.io/os=linux
node-role.kubernetes.io/master=
Annotations: kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
node.alpha.kubernetes.io/ttl: 0
projectcalico.org/IPv4Address: 10.0.0.115/24
projectcalico.org/IPv4IPIPTunnelAddr: 192.168.217.0
volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp: Thu, 18 Jun 2020 10:21:48 +0530
Taints: node-role.kubernetes.io/master:NoSchedule
当某些条件成立时,节点控制器会自动污染节点。内置了以下污点:
node.kubernetes.io/not-ready
: 节点尚未准备好。这对应于 NodeCondition Ready 为“False”。
node.kubernetes.io/unreachable
:从节点控制器无法访问节点。这对应于 NodeCondition Ready 为“未知”。
node.kubernetes.io/out-of-disk
:节点磁盘不足。
node.kubernetes.io/memory-pressure
: 节点有内存压力。
node.kubernetes.io/disk-pressure
: 节点有磁盘压力。
node.kubernetes.io/network-unavailable
: 节点网络不可用。
node.kubernetes.io/unschedulable
: 节点不可调度。
node.cloudprovider.kubernetes.io/uninitialized
:当 kubelet 通过“外部”云提供商启动时,会在节点上设置此污点以将其标记为不可用。在 cloud-controller-manager 中的控制器初始化此节点后,kubelet 会删除此污点。
除了上面的特殊污点node-role.kubernetes.io/master:NoSchedule
默认添加到主节点。
如果存在以下情况,通常会出现该错误taint
在您没有对应的节点上toleration
在 Pod 规格中。
下面是一个具有容忍度的 Pod 示例。
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
tolerations:
- key: "example-key"
operator: "Exists"
effect: "NoSchedule"