эта ошибка
[FATAL] plugin/loop: Seen "HINFO IN 6900627972087569316.7905576541070882081." more than twice, loop detected
вызывается, когда CoreDNS обнаруживает цикл в конфигурации разрешения, и это предполагаемое поведение. Вы столкнулись с этой проблемой:
https://github.com/kubernetes/kubeadm/issues/1162
https://github.com/coredns/coredns/issues/2087
Хакерское решение: отключить обнаружение петли CoreDNS
Редактировать конфигурационную карту CoreDNS:
kubectl -n kube-system edit configmap coredns
Удалить или закомментировать строку с loop
, сохранить и выйти.
Затем удалите модули CoreDNS, чтобы можно было создавать новые с новой конфигурацией:
kubectl -n kube-system delete pod -l k8s-app=kube-dns
После этого все должно быть в порядке.
Предпочтительное решение: удалить петлю в конфигурации DNS
Сначала проверьте, используете ли вы systemd-resolved
. Если вы работаете в Ubuntu 18.04, возможно, это так.
systemctl list-unit-files | grep enabled | grep systemd-resolved
Если это так, проверьте, какой resolv.conf
файл используется вашим кластером в качестве ссылки:
ps auxww | grep kubelet
Вы можете увидеть строку вроде:
/usr/bin/kubelet ... --resolv-conf=/run/systemd/resolve/resolv.conf
Важная часть - --resolv-conf
- мы выясним, используется ли systemd resolv.conf или нет.
Если это resolv.conf
из systemd
, выполните следующие действия:
Проверьте содержимое /run/systemd/resolve/resolv.conf
, чтобы увидеть, есть ли такая запись:
nameserver 127.0.0.1
Если есть 127.0.0.1
, именно он вызывает цикл.
Чтобы избавиться от него, вам не нужно редактировать этот файл, но проверьте другие места, чтобы он был правильно сгенерирован.
Проверьте все файлы в /etc/systemd/network
, и если вы найдете запись типа
DNS=127.0.0.1
удалить эту запись. Также проверьте /etc/systemd/resolved.conf
и сделайте то же самое при необходимости. Убедитесь, что у вас настроен хотя бы один или два DNS-сервера, например
DNS=1.1.1.1 1.0.0.1
После всего этого перезапустите службы systemd, чтобы изменения вступили в силу:
systemctl перезапустить systemd-networkd systemd-resolved
После этого убедитесь, что в файле resolv.conf
больше нет DNS=127.0.0.1
:
cat /run/systemd/resolve/resolv.conf
Наконец, запустить повторное создание модулей DNS
kubectl -n kube-system delete pod -l k8s-app=kube-dns
Резюме: Решение включает в себя избавление от того, что похоже на цикл поиска DNS, из конфигурации DNS хоста. Шаги могут быть разными в разных менеджерах / реализациях resolv.conf.