Kubernetes CoreDNS в CrashLoopBackOff

Я понимаю, что этот вопрос задают десятки раз, но ничто не помогло мне в поиске в Интернете.

Моя настройка:

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 находятся в состоянии 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(роутером)

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 имеют CrashLoopBackOff или состояние Error вообще не помогло, потому что я не нашел ни одного решения, которое там было описано. Ничего не помогло

5 ответов

Даже у меня появилась такая ошибка, и я успешно сумел работать по нижеуказанным шагам.

Тем не менее, вы пропустили 8.8.4.4

sudo nano и т. д. /resolv.conf

nameserver 8.8.8.8
nameserver 8.8.4.4

выполните следующие команды для перезапуска службы демона и докера

sudo systemctl daemon-reload

sudo systemctl restart docker

Если вы используете kubeadm, убедитесь, что вы снова удалили весь кластер из основного и подготовительного кластера.

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

$kubectl edit cm coredns -n kube-system удалить "цикл", сохранить и выйти перезапустить главный узел. Это была работа для меня.

Я столкнулся с той же проблемой в моем локальном k8s в настройке Docker (KIND). Модуль CoreDns получает ошибку отката аварийного завершения.

Выполненные шаги по приведению модуля в рабочее состояние:

Как сказал Тим Чан в этом посте и, сославшись на ссылку проблем github, я сделал следующее

  1. kubectl -n kube-system редактировать configmaps coredns -o yaml
  2. изменить раздел вперед. /etc/resolv.conf с форвардом. 172.16.232.1 (в моем случае я установил 8.8.8.8 для времени)
  3. Удалите один из модулей Coredns или подождите некоторое время - модули будут в рабочем состоянии.

Обычно случается, когда cornns не может общаться с 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

Затем (возможно, вам придется создать модуль):

$ 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

Я получил ошибку:

connect: нет маршрута к хосту ","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 . /etc/resolv.conf с forward . 172.16.232.1 например:

      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

Готово, после этого вы можете масштабировать coredns вверх или вниз, чтобы увидеть, как он работает:

      kubectl scale -n kube-system deployment coredns --replicas=3
Другие вопросы по тегам