Рейтинг:1

Сбой CoreDNS из-за цикла: как скормить kubelet с правильным resolvConf?

флаг in

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

$ kubectl получить модули --all-namespaces
ПРОСТРАНСТВО ИМЕН ИМЯ ГОТОВ СТАТУС ПЕРЕЗАПУСКА ВОЗРАСТ
ingress-nginx ingress-nginx-controller-8xcl9 1/1 Работает 0 11h
ingress-nginx ingress-nginx-controller-hwhvk 1/1 Работает 0 11h
ingress-nginx ingress-nginx-controller-xqdqx 1/1 Выполняется 2 (10 ч назад) 11 ч
kube-system calico-kube-controllers-684bcfdc59-cr7hr 1/1 Работает 0 11h
kube-system calico-node-62p58 1/1 Выполняется 2 (10 ч назад) 11 ч
kube-system calico-node-btvdh 1/1 Работает 0 11h
kube-system calico-node-q5bkr 1/1 Работает 0 11h
kube-system coredns-8474476ff8-dnt6b 0/1 CrashLoopBackOff 1 (3 с назад) 5 с
kube-system coredns-8474476ff8-ftcbx 0/1 Ошибка 1 (2 с назад) 5 с
kube-system dns-autoscaler-5ffdc7f89d-4tshm 1/1 Работает 2 (10 ч назад) 11 ч
kube-system kube-apiserver-hyzio 1/1 Работает 4 (10ч назад) 11ч
kube-system kube-controller-manager-hyzio 1/1 Работает 4 (10ч назад) 11ч
kube-system kube-proxy-2d8ls 1/1 Работает 0 11h
kube-system kube-proxy-c6c4l 1/1 Работает 4 (10 ч назад) 11 ч
kube-system kube-proxy-nzqdd 1/1 Работает 0 11h
kube-system kube-scheduler-hyzio 1/1 Работает 5 (10ч назад) 11ч
kube-system kubernetes-dashboard-548847967d-66dwz 1/1 Работает 0 11h
kube-system kubernetes-metrics-scraper-6d49f96c97-r6dz2 1/1 Работает 0 11h
kube-system nginx-proxy-dyzio 1/1 Работает 0 11h
kube-system nginx-proxy-zyzio 1/1 Работает 0 11h
kube-system nodelocaldns-g9wxh 1/1 Работает 0 11h
kube-system nodelocaldns-j2qc9 1/1 Работает 4 (10 ч назад) 11 ч
kube-system nodelocaldns-vk84j 1/1 Выполняется 0 11h
kube-системный реестр-j5prk 1/1 Работает 0 11h
kube-systemRegistry-proxy-5wbhq 1/1 Выполняется 0 11h
kube-systemRegistry-proxy-77lqd 1/1 Работает 0 11h
kube-system register-proxy-s45p4 1/1 Выполняется 2 (10 ч назад) 11 ч

kubectl описать на этом стручке не привнес многого в картину:

События:
  Тип Причина Возраст от сообщения
  ---- ------ ---- ---- -------
  Обычный Запланировано 67s default-scheduler Успешно назначено kube-system/coredns-8474476ff8-dnt6b для zyzio
  Обычный Получено 25 с (x4 поверх 68 с) kubelet Образ контейнера "k8s.gcr.io/coredns/coredns:v1.8.0" уже присутствует на машине
  Обычный Создан 25 с (x4 по сравнению с 68 с) kubelet Создан контейнер coredns
  Нормально Запущено 25 с (x4 за 68 с) kubelet Запущен контейнер coredns
  Предупреждение BackOff 6s (x11 over 66s) kubelet Back-off перезапуск неудачного контейнера

А вот просмотр логов сделал:

$ kubectl регистрирует coredns-8474476ff8-dnt6b -n kube-system
.:53
[INFO] плагин/перезагрузка: рабочая конфигурация MD5 = 5b233a0166923d642fdbca0794b712ab
CoreDNS-1.8.0
Linux/AMD64, go1.15.3, 054c9ae
[FATAL] плагин/цикл: обнаружен цикл (127.0.0.1:49048 -> :53) для зоны ".", см. https://coredns.io/plugins/loop#troubleshooting.Запрос: «ИНФО 2906344495550081187.9117452939332601176».

Здорово, что документация по устранению неполадок была связана! Я начал просматривать эту страницу и обнаружил, что действительно мой /etc/resolv.conf содержал проблемный локальный IP сервер имен 127.0.0.53.

Кроме того, я нашел настоящий IP-адреса DNS в /run/systemd/разрешение/resolv.conf, но теперь вопрос: как выполнить действие, описанное в документации по устранению неполадок, говоря:

Добавьте в yaml конфигурации kubelet следующее: resolvConf: (или с помощью флага командной строки --resolv-conf устарело в версии 1.10). Ваш «настоящий» файл resolv.conf содержит фактические IP-адреса ваших вышестоящих серверов и не содержит локального/петлевого адреса. Этот флаг указывает kubelet передать подам альтернативный файл resolv.conf. Для систем, использующих systemd-resolve, /run/systemd/resolve/resolv.conf обычно является расположением «настоящего» resolv.conf, хотя это может отличаться в зависимости от вашего дистрибутива.

Итак, вопросы:

  • как найти или где создать упомянутый конфиг kubelet yaml,
  • на каком уровне я должен указать resolvConf значение и
  • может ли он принимать несколько значений? У меня есть два сервера имен. Должны ли они быть заданы как отдельные записи или массив?
Рейтинг:1
флаг us

/etc/resolv.conf/ находится в каждом из ваших узлов. Вы можете отредактировать его, SSHвход в узел.
Затем вы должны перезапустить кубелет чтобы изменения вступили в силу.

sudo systemctl перезапустить кубелет

(Если это не сработает, перезапустите узлы с помощью судо перезагрузка)


/home/kubernetes/kubelet-config.yaml (также находится на каждом из ваших узлов) файл, содержащий конфигурацию kubelet. Вы можете создавать новые resolv.conf файл и указать на него с помощью resolvConf поле

apiVersion: kubelet.config.k8s.io/v1beta1
...
вид: KubeletConfiguration
...
resolvConf: <расположение файла>

Важный: новая конфигурация будет применяться только к модулям, созданным после обновления.Настоятельно рекомендуется слить ноду перед изменением конфигурации.


может ли он принимать несколько значений? У меня есть два сервера имен. Должны ли они быть заданы как отдельные записи или массив?

Конфигурация Кубелета в документации указано resolvConf имеет тип нить, поэтому, вероятно, принимается только одно значение.

AbreQueVoy avatar
флаг in
Перезапуск только kubelet не помог; Мне пришлось выполнить брутальную `sudo reboot` узлов, но благодаря вашим подсказкам все наконец-то заработало как надо.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.