一、 报错信息

完成k8s单节点部署后,创建了一个pod进行测试,后续该pod出现以下报错: 

Warning  FailedScheduling  3h7m (x3 over 3h18m)  default-scheduler  0/1 nodes are available: 1 node(s) had untolerated taint {node-role.kubernetes.io/control-plane: }. preemption: 0/1 nodes are available: 1 Preemption is not helpful for scheduling..

二、 原因

[root@k8s-master ~]# kubectl describe nodes k8s-master  | grep Taints   #查看node污点
Taints:             node-role.kubernetes.io/control-plane:NoSchedule

提供的污点信息中,可以看到有一个污点被添加到了节点 k8s-master 上,这个污点的键是 node-role.kubernetes.io/control-plane,它的值是 NoSchedule。这意味着,Kubernetes调度器将不会将任何新的Pod调度到这个节点上。

这个污点的主要影响有以下几点:

  1. 防止新Pod调度到该节点:由于这个节点被标记(tainted)为控制平面节点,不应该在其上调度新的Pod,以防止与现有控制平面组件发生冲突。
  2. 不影响现有Pod的运行:已经在这个节点上运行的Pod不会受到这个污点的影响,它们将继续在该节点上运行。

在单节点环境中,将节点标记为控制平面节点是有利的,因为这样可以确保该节点只用于运行控制平面组件(如API服务器、控制器管理器、Scheduler等),从而确保单节点环境的基本功能正常。

然而,这种设置也有一些潜在的风险:

  1. 单点故障:如果这个节点发生故障,整个集群可能会受到影响,因为没有任何其他节点可以接管控制平面的角色。
  2. 扩展性限制:由于这个节点被专门用于运行控制平面组件,因此在需要扩展集群容量时可能会受到限制。例如,如果你需要添加更多的工作节点,你可能需要重新配置这个节点,这可能会增加复杂性。

因此,在单节点环境中使用这种设置需要谨慎考虑其利弊和潜在风险。在生产环境中,建议使用更复杂的集群设置,例如具有多个节点和多个控制平面组件的集群。

# 解决

[root@k8s-master ~]# kubectl taint nodes k8s-master node-role.kubernetes.io/control-plane:NoSchedule-
node/k8s-master untainted


[root@k8s-master ~]# kubectl describe nodes k8s-master  | grep Taints                                
Taints:             <none> 

[root@k8s-master ~]# kubectl get pods -A
NAMESPACE      NAME                                 READY   STATUS    RESTARTS       AGE
default        nginx-deployment-7c79c4bf97-v8w8d    1/1     Running   0              3h21m

#pod状态变为Running ,报错解决完成

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐