Kubernetes coredns pod 陷入待处理状态。无法启动仪表板

标签 kubernetes coredns

我正在按照此构建 Kubernetes 集群 tutorial ,并且我无法访问 Kubernetes 仪表板。我已经创建了另一个关于它的问题,你可以看到 here ,但是在深入研究我的集群时,我认为问题可能出在其他地方,这就是我创建一个新问题的原因。

我通过运行以下命令来启动我的 master:

> kubeadm reset 
> kubeadm init --apiserver-advertise-address=[MASTER_IP] > file.txt
> tail -2 file.txt > join.sh # I keep this file for later

> kubectl apply -f https://git.io/weave-kube/

> kubectl -n kube-system get pod
NAME                                READY   STATUS  RESTARTS    AGE
coredns-fb8b8dccf-kb2zq             0/1     Pending 0           2m46s
coredns-fb8b8dccf-nnc5n             0/1     Pending 0           2m46s
etcd-kubemaster                     1/1     Running 0           93s
kube-apiserver-kubemaster           1/1     Running 0           93s
kube-controller-manager-kubemaster  1/1     Running 0           113s
kube-proxy-lxhvs                    1/1     Running 0           2m46s
kube-scheduler-kubemaster           1/1     Running 0           93s

在这里我们可以看到我有两个 coredns Pod 永远停留在 Pending 状态,当我运行命令时:

> kubectl -n kube-system describe pod coredns-fb8b8dccf-kb2zq

我可以在事件部分看到以下警告:

Failed Scheduling : 0/1 nodes are available 1 node(s) had taints that the pod didn't tolerate.

因为它是一个警告而不是错误,并且作为 Kubernetes 新手,taints对我来说没有多大意义,我尝试将节点连接到主节点(使用之前保存的命令):

> cat join.sh
kubeadm join [MASTER_IP]:6443 --token [TOKEN] \
    --discovery-token-ca-cert-hash sha256:[ANOTHER_TOKEN]

> ssh [USER]@[WORKER_IP] 'bash' < join.sh

This node has joined the cluster.

在主服务器上,我检查节点是否已连接:

> kubectl get nodes 
NAME        STATUS      ROLES   AGE     VERSION
kubemaster  NotReady    master  13m     v1.14.1
kubeslave1  NotReady    <none>  31s     v1.14.1

我检查了我的 pod:

> kubectl -n kube-system get pod
NAME                                READY   STATUS              RESTARTS    AGE
coredns-fb8b8dccf-kb2zq             0/1     Pending             0           14m
coredns-fb8b8dccf-nnc5n             0/1     Pending             0           14m
etcd-kubemaster                     1/1     Running             0           13m
kube-apiserver-kubemaster           1/1     Running             0           13m
kube-controller-manager-kubemaster  1/1     Running             0           13m
kube-proxy-lxhvs                    1/1     Running             0           14m
kube-proxy-xllx4                    0/1     ContainerCreating   0           2m16s
kube-scheduler-kubemaster           1/1     Running             0           13m

我们可以看到另一个 kube-proxy pod 已创建,并且停留在 ContainerCreating 状态。

当我再次进行描述时:

kubectl -n kube-system describe pod kube-proxy-xllx4

我可以在事件部分看到多个相同的警告:

Failed create pod sandbox : rpx error: code = Unknown desc = failed pulling image "k8s.gcr.io/pause:3.1": Get https://k8s.gcr.io/v1/_ping: dial tcp: lookup k8s.gcr.io on [::1]:53 read up [::1]43133->[::1]:53: read: connection refused

这是我的存储库:

docker image ls
REPOSITORY                          TAG     
k8s.gcr.io/kube-proxy               v1.14.1 
k8s.gcr.io/kube-apiserver           v1.14.1 
k8s.gcr.io/kube-controller-manager  v1.14.1 
k8s.gcr.io/kube-scheduler           v1.14.1 
k8s.gcr.io/coredns                  1.3.1   
k8s.gcr.io/etcd                     3.3.10  
k8s.gcr.io/pause                    3.1 

因此,对于仪表板部分,我尝试使用命令启动它

> kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml

但是仪表板 Pane 卡在待处理状态。

kubectl -n kube-system get pod
NAME                                    READY   STATUS              RESTARTS    AGE
coredns-fb8b8dccf-kb2zq                 0/1     Pending             0           40m
coredns-fb8b8dccf-nnc5n                 0/1     Pending             0           40m
etcd-kubemaster                         1/1     Running             0           38m
kube-apiserver-kubemaster               1/1     Running             0           38m
kube-controller-manager-kubemaster      1/1     Running             0           39m
kube-proxy-lxhvs                        1/1     Running             0           40m
kube-proxy-xllx4                        0/1     ContainerCreating   0           27m
kube-scheduler-kubemaster               1/1     Running             0           38m
kubernetes-dashboard-5f7b999d65-qn8qn   1/1     Pending             0           8s

所以,尽管我最初的问题是我无法访问我的仪表板,但我想真正的问题比这更深。

我知道我只是在这里提供了很多信息,但我是一个 k8s 初学者,我对此完全迷失了。

最佳答案

我在设置自己的集群时遇到了 coredns Pod 陷入挂起模式的问题;我通过添加 pod 网络来解决这个问题。

看起来因为没有安装网络插件,节点被污染为未就绪。安装 Addon 将消除污点,并且 Pod 将能够进行调度。就我而言,添加法兰绒解决了问题。

编辑:官方 k8s documentation - Create cluster with kubeadm 中有关于此的说明:

The network must be deployed before any applications. Also, CoreDNS will not start up before a network is installed. kubeadm only supports Container Network Interface (CNI) based networks (and does not support kubenet).

关于Kubernetes coredns pod 陷入待处理状态。无法启动仪表板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55609377/

相关文章:

kubernetes - Minikube 的 CoreDNS 无法解析来自 JVM 的名称

kubernetes - 是否可以在Google容器引擎中打开ABAC模式(授权)?

docker - Kubernetes V1.11.0 HA群集CoreDNS PODS未出现

amazon-web-services - Kubernetes CoreDNS 间歇性解析名称

kubernetes - Kube-proxy是否在ubuntu上安装了标准的k8s,还是单独包装?

某些查询中附加了 kubernetes dns 搜索域

kubernetes - MySQL 与 Kubernetes 集群集成的 DNS 错误

kubernetes - 使用 Persistent Volume Claim 时是否必须显式创建 Persistent Volume?

ssl - 在 NGINX-Ingress 上使用 session 关联性 (Cookie) 和 SSL 直通

azure - Argo 工作流程中的卷节点关联性冲突