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, я сделал следующее
- kubectl -n kube-system редактировать configmaps coredns -o yaml
- изменить раздел вперед. /etc/resolv.conf с форвардом. 172.16.232.1 (в моем случае я установил 8.8.8.8 для времени)
- Удалите один из модулей 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