我正在尝试将我的微服务部署到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/
我的问题
此错误是由于群集问题引起的吗?因为我找不到集群工作节点。只有主节点。
答案 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
,任何卡住的东西都会解开(直到下次重新启动)。