【问题标题】:Kubernetes CoreDNS in CrashLoopBackOffCrashLoopBackOff 中的 Kubernetes CoreDNS
【发布时间】:2019-05-02 17:06:32
【问题描述】:

我知道这个问题被问了几十次,但没有任何帮助我通过互联网搜索。

我的设置:

CentOS Linux release 7.5.1804 (Core)
Docker Version: 18.06.1-ce
Kubernetes: v1.12.3

由官方指南和这个安装:https://www.techrepublic.com/article/how-to-install-a-kubernetes-cluster-on-centos-7/

CoreDNS pod 处于 Error/CrashLoopBackOff 状态。

kube-system   coredns-576cbf47c7-8phwt                 0/1     CrashLoopBackOff   8          31m
kube-system   coredns-576cbf47c7-rn2qc                 0/1     CrashLoopBackOff   8          31m

我的 /etc/resolv.conf:

nameserver 8.8.8.8

还尝试使用我的本地 dns-resolver(router)

nameserver 10.10.10.1

设置和初始化:

kubeadm init --apiserver-advertise-address=10.10.10.3 --pod-network-cidr=192.168.1.0/16
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

我尝试通过以下方式解决此问题: 编辑 coredns:root@kub~]# kubectl edit cm coredns -n kube-system 和改变

proxy . /etc/resolv.conf

直接发给

proxy . 10.10.10.1

或 代理 。 8.8.8.8

也尝试过:

kubectl -n kube-system get deployment coredns -o yaml |   sed 's/allowPrivilegeEscalation: false/allowPrivilegeEscalation: true/g' |   kubectl apply -f -

仍然没有任何帮助。

日志中的错误:

plugin/loop: Seen "HINFO IN 7847735572277573283.2952120668710018229." more than twice, loop detected

另一个线程 - coredns pods have CrashLoopBackOff or Error state 根本没有帮助,因为我没有找到那里描述的任何解决方案。没有任何帮助。

【问题讨论】:

  • 你能发布日志吗?例如,您可以通过kubectl logs coredns-576cbf47c7-8phwt 获取它们
  • 已更新,是的,抱歉,忘记添加实际错误。
  • 除了“hacky”——删除循环插件之外,我没有遇到任何提出的解决方案。

标签: docker kubernetes centos7 coredns


【解决方案1】:

即使我遇到了这样的错误,我也成功地按照以下步骤工作。

但是,你错过了 8.8.4.4

sudo nano /etc/resolv.conf

nameserver 8.8.8.8
nameserver 8.8.4.4

运行以下命令重启守护进程和docker服务

sudo systemctl daemon-reload

sudo systemctl restart docker

如果您使用的是 kubeadm,请确保从 master 中删除整个集群并再次配置集群。

kubectl drain <node_name> --delete-local-data --force --ignore-daemonsets
kubectl delete node <node_name>
kubeadm reset

配置新集群后

kubectl get pods --all-namespaces

它应该给出低于预期的结果

NAMESPACE     NAME                       READY   STATUS    RESTARTS   AGE
kube-system   calico-node-gldlr          2/2     Running   0          24s
kube-system   coredns-86c58d9df4-lpnj6   1/1     Running   0          40s
kube-system   coredns-86c58d9df4-xnb5r   1/1     Running   0          40s
kube-system   kube-proxy-kkb7b           1/1     Running   0          40s
kube-system   kube-scheduler-osboxes     1/1     Running   0          10s

【讨论】:

  • 我只解决:nameserver 8.8.8.8nameserver 8.8.4.4sudo systemctl daemon-reloadsudo systemctl restart docker
  • 嘿@Altieres de Matos 即使我提到了同样的命令!
  • @NarendranathReddy 太棒了!为我工作。
  • @SahilGulati 祝朋友快乐,Kubernetes 快乐!!
  • 我刚刚在这里找到了一个可行的解决方案,github.com/coredns/coredns/issues/2087#issuecomment-432387727 尝试和测试。
【解决方案2】:

$kubectl 编辑 cm coredns -n kube-system 删除‘循环’,保存退出 重启主节点。这对我有用。

【讨论】:

  • 这意味着 coredns 无法检测到循环——我做了这个并且它有效(coredns 可以运行并且主机名可以解析),但是 coredns 的 CPU 利用率非常高
  • @Hk 你能把你的答案写成可以理解的格式吗?
【解决方案3】:

通常发生在 coredns 无法与 kube-apiserver 通信时:

检查您的kubernetes 服务是否在默认命名空间中:

$ kubectl get svc kubernetes
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        130d

然后(您可能必须创建一个 pod):

$ kubectl -n kube-system exec -it <any-pod-with-shell> sh
# ping kubernetes.default.svc.cluster.local
PING kubernetes.default.svc.cluster.local (10.96.0.1): 56 data bytes

另外,尝试从端口访问端口443

# telnet kubernetes.default.svc.cluster.local 443 # or
# curl kubernetes.default.svc.cluster.local:443

【讨论】:

    【解决方案4】:

    我在 Docker (KIND) 设置中的本地 k8s 中遇到了同样的问题。 CoreDns pod 出现 crashloop 退避错误。

    使 pod 进入运行状态的步骤:

    正如 Tim Chan 在这篇文章中所说,并通过引用 github 问题链接,我做了以下操作

    1. kubectl -n kube-system edit configmaps coredns -o yaml
    2. 修改部分 forward . /etc/resolv.confforward . 172.16.232.1(我的情况我暂时设置为 8.8.8.8)
    3. 删除其中一个 Coredns Pod,或者可以等待一段时间 - 这些 Pod 将处于运行状态。

    【讨论】:

      【解决方案5】:

      我得到的错误是:

      连接:没有到主机的路由","time":"2021-03-19T14:42:05Z"} crashloopbackoff

      kubectl -n kube-system logs coredns-d9fdb9c9f-864rz显示的日志中

      https://github.com/coredns/coredns/tree/master/plugin/loop#troubleshooting-loops-in-kubernetes-clusters中提到了这个问题

      tldr; 原因:/etc/resolv.conf 以某种方式更新。原文地址为/run/systemd/resolve/resolv.conf: 例如:

      域名服务器 172.16.232.1

      快速修复,编辑Corefile:

      $ kubectl -n kube-system edit configmaps coredns -o yaml
      

      forward . 172.16.232.1 替换forward . /etc/resolv.conf 例如:

      apiVersion: v1
      data:
        Corefile: |
          .:53 {
              errors
              health {
                 lameduck 5s
              }
              ready
              kubernetes cluster.local in-addr.arpa ip6.arpa {
                 pods insecure
                 fallthrough in-addr.arpa ip6.arpa
                 ttl 30
              }
              prometheus :9153
              forward . 172.16.232.1 {
                 max_concurrent 1000
              }
              cache 30
              loop
              reload
              loadbalance
          }
      kind: ConfigMap
      metadata:
        creationTimestamp: "2021-03-18T15:58:07Z"
        name: coredns
        namespace: kube-system
        resourceVersion: "49996"
        uid: 428a03ff-82d0-4812-a3fa-e913c2911ebd
      

      完成后,可能需要重启docker

      sudo systemctl restart docker
      

      更新:只需sudo systemctl restart docker即可修复

      【讨论】:

        猜你喜欢
        • 2019-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-28
        • 1970-01-01
        • 2022-08-08
        • 2019-04-04
        • 2018-09-02
        相关资源
        最近更新 更多