在部署到 Kubernetes 集群时,节点存在 pod 不能容忍错误的污点

Jac*_*cob 28 kubernetes

我正在尝试将我的微服务部署到 Kubernetes 集群中。我的集群有一个主节点和一个工作节点。我为 Kubernetes 部署的研发创建了这个集群。当我尝试部署时,我收到了如下所示的偶数错误消息,

Events:
 Type     Reason            Age        From               Message
  ----     ------            ----       ----               -------
 Warning  FailedScheduling  <unknown>  default-scheduler  0/2 nodes are available: 2 node(s) had taints that the pod didn't tolerate
Run Code Online (Sandbox Code Playgroud)

我的尝试

当我在探索错误时,我在论坛中发现了一些关于在节点中重新启动 docker 等的评论。所以之后我重新启动了 Docker。但错误仍然相同。

当我尝试该命令时,kubectl get nodes它显示两个节点都是主节点并且都是ready状态。

NAME           STATUS   ROLES    AGE     VERSION
 mildevkub020   Ready    master   6d19h   v1.17.0
 mildevkub040   Ready    master   6d19h   v1.17.0
Run Code Online (Sandbox Code Playgroud)

我在这里没有找到工作节点。我用一个负载均衡器创建了一个主节点 (mildevkub020) 和一个工作节点 (mildev040)。我从以下链接中遵循了 Kubernetes 的官方文档,

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/

我的问题

这个错误是因为集群问题吗?因为我没有找到集群工作节点。只有主节点。

Arg*_*dhu 32

您可以运行以下命令从主节点中删除污点,然后您应该能够在该节点上部署您的 pod

kubectl taint nodes  mildevkub020 node-role.kubernetes.io/master-
kubectl taint nodes  mildevkub040 node-role.kubernetes.io/master-
Run Code Online (Sandbox Code Playgroud)

现在关于为什么它显示为主节点检查您运行的命令以使用 kubeadm 加入节点。主节点和工作节点加入有单独的命令。

  • 当我这样做时,我收到“错误:未找到污点“node-role.kubernetes.io/master”” (9认同)
  • 谢谢!要从 **所有** 主节点中删除污点: `for node in $(kubectl getnodes --selector='node-role.kubernetes.io/master' | awk 'NR&gt;1 {print $1}' ) ; 执行 kubectl 污点节点 $node node-role.kubernetes.io/master- ;完成` (5认同)

Bra*_*rks 7

当您的 docker 环境没有分配足够的资源时,您也可以收到这种“污点”类型的消息。

比如Docker Desktop for Mac,在preferences中分配更多的memory/cpu/swap,或许可以解决你的问题。

如果 kubernetes Auto Scaling 没有足够的节点来启动新的 pod,也会发生这种情况,您可能会在描述中看到“CPU 不足”。

  • 第一次为 mac 配置 ingress-nginx 时,发生了同样的“污点”事件。入口控制器陷入待处理状态。加倍内存和交换分配解决了这个问题。 (2认同)

小智 7

删除 master 上的污点,以便您可以在其上调度 pod。

kubectl taint nodes --all node-role.kubernetes.io/master-
Run Code Online (Sandbox Code Playgroud)

它应该返回以下内容。

node/<your-hostname> untainted
Run Code Online (Sandbox Code Playgroud)


小智 5

在 k8s 版本 1.24.2 中,您必须运行以下命令:

kubectl taint nodes <node_name> dedicated=special-user:NoSchedule
Run Code Online (Sandbox Code Playgroud)

  • 通过额外的支持信息可以改进您的答案。请[编辑]添加更多详细信息,例如引文或文档,以便其他人可以确认您的答案是正确的。您可以[在帮助中心](/help/how-to-answer)找到有关如何写出好的答案的更多信息。 (4认同)