Kubernetes集群中的Coredns处于挂起状态

17

我正在尝试配置一个由两个节点组成的 Kubernetes 集群。首先,我正在尝试在 CentOS 虚拟机上配置集群的主节点。我使用 'kubeadm init --apiserver-advertise-address=172.16.100.6 --pod-network-cidr=10.244.0.0/16' 初始化了集群,并在集群中部署了 flannel 网络。但是,当我执行 'kubectl get nodes' 命令时,输出结果如下 ----

[root@kubernetus ~]# kubectl get nodes
NAME         STATUS     ROLES    AGE   VERSION
kubernetus   NotReady   master   57m   v1.12.0

'kubectl get pods --all-namespaces -o wide'的输出如下 ----

[root@kubernetus ~]# kubectl get pods --all-namespaces -o wide
NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE   IP             NODE         NOMINATED NODE
kube-system   coredns-576cbf47c7-9x59x             0/1     Pending   0          58m   <none>         <none>       <none>
kube-system   coredns-576cbf47c7-l52wc             0/1     Pending   0          58m   <none>         <none>       <none>
kube-system   etcd-kubernetus                      1/1     Running   2          57m   172.16.100.6   kubernetus   <none>
kube-system   kube-apiserver-kubernetus            1/1     Running   2          57m   172.16.100.6   kubernetus   <none>
kube-system   kube-controller-manager-kubernetus   1/1     Running   1          57m   172.16.100.6   kubernetus   <none>
kube-system   kube-proxy-hr557                     1/1     Running   1          58m   172.16.100.6   kubernetus   <none>
kube-system   kube-scheduler-kubernetus            1/1     Running   1          57m   172.16.100.6   kubernetus   <none>

coredns长时间处于待处理状态。我已多次删除docker和kubectl、kubeadm、kubelet,并尝试重新创建集群,但每次都显示相同的输出。有人可以帮我解决这个问题吗?


2
解决问题的第一步是获取日志 - 使用 kubectl logs podname --namespace=kube-system 命令,并检查是否有事件记录,使用 kubectl get events --namespace=kube-system 命令。 - Praveen Sripati
1
我有两个处于挂起状态的coredns pods。因此,我尝试了'kubectl logs coredns-576cbf47c7-9x59x --namespace=kube-system'和'kubectl logs coredns-576cbf47c7-l52wc --namespace=kube-system',但没有显示任何输出。 - Aditya Datta
1
对于命令'kubectl get events --namespace=kube-system',我收到了一些警告 ---- 62m 警告 FailedScheduling Pod 0/1个节点可用:1个节点有污点,该Pod无法容忍。88m 警告 Unhealthy Pod 存活探针失败:获取https://172.16.100.6:6443/healthz:net/http:TLS握手超时。88m 警告 Unhealthy Pod 存活探针失败:HTTP探针状态码为403。 - Aditya Datta
1
这真的是“Kubernetes”吗? - Rico
命令本身就展示了它的 Kubernetes! - Aditya Datta
显示剩余3条评论
7个回答

11
尝试安装Pod网络附加组件(基于此指南)。运行以下命令:
kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml

4
无法更新cni配置:在/etc/cni/net.d中未找到任何网络..... Oct 02 19:21:32 kubernetus kubelet[19007]: E1002 19:21:32.886170 19007 kubelet.go:2167] 容器运行时网络未准备好: NetworkReady=false 原因:NetworkPluginNotReady 消息:docker: 网络插件未就绪:cni配置未初始化
根据此错误,您忘记初始化Kubernetes Pod网络附加组件。根据您的设置,我认为应该是Flannel。
这是来自官方Kubernetes文档的说明:

For flannel to work correctly, you must pass --pod-network-cidr=10.244.0.0/16 to kubeadm init.

Set /proc/sys/net/bridge/bridge-nf-call-iptables to 1 by running sysctl net.bridge.bridge-nf-call-iptables=1 to pass bridged IPv4 traffic to iptables’ chains. This is a requirement for some CNI plugins to work, for more information please see here.

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml

Note that flannel works on amd64, arm, arm64 and ppc64le, but until flannel v0.11.0 is released you need to use the following manifest that supports all the architectures:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/c5d10c8/Documentation/kube-flannel.yml

了解更多信息,请访问此链接


谢谢您提供的信息。您说得对,我使用了 flannel 网络,并且没有出现错误。我使用了 'kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml' 命令来应用 flannel 网络,但是当它不起作用时,我使用了您提供的 'kubectl apply' 命令,但情况依然如故。这是 Kubernetes 1.12 版本的问题。这就是为什么我使用了 Kubernetes 1.11.0 版本,现在它正常工作了。我不知道版本1.12的问题是什么,但旧版本仍可以成功运行。 - Aditya Datta
但是根据您的 kubectl get pods --all-namespaces -o wide 命令,您没有 Flannel Pods。 - Artem Golenyaev
是的,那就是问题所在。我使用了所有三个“kubectl apply”语法将flannel网络应用于我的集群,并且在执行此命令时没有收到任何错误,但它并未反映出来。然而,当我回溯到版本1.11.0时,集群被正确配置了。现在我有三个flannel pod——一个用于主节点和两个用于从节点。 - Aditya Datta
我正在使用 Kubernetes 1.12,并遇到了这个问题。我已经按照文档中的 kubectl apply 语法设置了 Flannel,但 coredns pods 没有启动。 - lanoxx
当一个节点还没有加入到主节点时,似乎会出现这个消息。在这种情况下,我认为文档有误导之处,因为它声明:一旦CoreDNS pod已经启动并运行,您可以继续加入您的节点。这让我理解为在将节点加入到主节点之前,我需要先设置flannel集群网络。 - lanoxx

2
为了让Kubernetes集群可用,该集群应具备容器网络接口(CNI)。必须配置一个pod-network,以使dns pod正常运行。
安装任何CNI提供者,例如: - Flannel - Calico - Canal - WeaveNet等。
如果没有这些,托管的Kubernetes集群将处于NotReady状态。

0

检查Docker和Kubernetes是否使用相同的cgroup驱动程序。 我遇到了同样的问题(CentOS 7,Kubernetes v1.14.1),将相同的cgroup驱动程序(systemd)设置为解决方案。


0

对我来说,我已经重新启动了系统并重新应用了calico.yaml,coredns和calico pods开始创建。


0

至少将此解决方案作为优先考虑,并尝试更改实例类型(最好是更高的CPU核心/内存)。 在我的情况下,我已经将Linux实例从t3.micro更改为t2.medium,它可以正常工作。


1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

0

我使用1个主节点和1个工作节点安装了Kubernetes。
在执行kubeadm init ...之后,我遇到了两个问题:

  1. 在主节点上,coredns一直处于挂起状态。
  2. 在工作节点上,kubectl命令无法正常工作。

在工作节点上,我进行了以下操作并解决了这两个问题:

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/kubelet.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config**

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接