Node污点是Pod在部署到Kubernetes集群时不会容忍错误

时间:2019-12-26 06:14:15

标签: 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

我的尝试

当我探索该错误时,我在论坛中找到了一些有关在节点等中重启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

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

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

我的问题

此错误是由于群集问题引起的吗?因为我找不到集群工作节点。只有主节点。

5 个答案:

答案 0 :(得分:5)

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

例如,在Mac上的Docker Desktop中,在首选项中分配更多内存/ cpu /交换,这可能会解决您的问题。

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

答案 1 :(得分:1)

您可以运行以下命令从主节点上移除异味,然后应该可以将Pod部署在该节点上

kubectl taint nodes  mildevkub020 node-role.kubernetes.io/master-
kubectl taint nodes  mildevkub040 node-role.kubernetes.io/master-

现在关于为什么将其显示为主节点,请检查您运行的将kubeadm加入节点的命令。主节点和工作节点的加入有单独的命令。

答案 2 :(得分:1)

由于我的 Kubernetes 工作节点宕机(关闭)而遇到的同样问题

Manjunath-MacBook-Air:manjunath$ kubectl get nodes
NAME                       STATUS     ROLES   AGE   VERSION
aks-agentpool-****-*   NotReady   agent   31d   v1.18.10

启动虚拟机(Kubernetes worker 实例)后,问题得到解决

Manjunath-MacBook-Air: manjunath$ kubectl get nodes
NAME                       STATUS   ROLES   AGE   VERSION
aks-agentpool-****-*   Ready    agent   31d   v1.18.1

答案 3 :(得分:0)

我在文档中找到了这个。

https://kubernetes.io/docs/tasks/administer-cluster/running-cloud-controller/

<块引用>

请记住,将集群设置为使用云控制器 manager 将通过以下几种方式改变您的集群行为:

kubelets 指定 --cloud-provider=external 将添加污点 node.cloudprovider.kubernetes.io/uninitialized with an effect 初始化期间的 NoSchedule。这将节点标记为需要一个 外部控制器的第二次初始化,然后才能被 预定的工作。请注意,如果云控制器管理器 不可用,集群中的新节点将无法调度。 污点很重要,因为调度程序可能需要特定于云的 有关节点的信息,例如其区域或类型(高 cpu、gpu、 高内存、现货实例等)。

答案 4 :(得分:0)

当我重新启动运行我的“集群”的机器时,我用 microk8s 得到了这个。足够多的 microk8s 重新上线,让我相信它“已启动”,但 pod 因此错误而卡在等待中。

我只需要运行 microk8s start,任何卡住的东西都会解开(直到下次重新启动)。