Превышен лимит сервера имен K8s coredns и flannel

Я пытался настроить k8s в одном узле, все было установлено нормально. но когда я проверяю статус своих модулей kube-system,

Под CNI -> flannel произошел сбой, причина -> превышены ограничения сервера имен, некоторые серверы имен были опущены, примененная строка сервера имен: x.x.x.x x.x.x.x x.x.x.x

Статус модулей CoreDNS - Создание контейнера.

В моем офисе текущий сервер был настроен на статический IP-адрес, и когда я проверил /etc/resolv.conf

Это результат

# Generated by NetworkManager
search ORGDOMAIN.BIZ
nameserver 192.168.1.12
nameserver 192.168.2.137
nameserver 192.168.2.136
# NOTE: the libc resolver may not support more than 3 nameservers.
# The nameservers listed below may not be recognized.
nameserver 192.168.1.10
nameserver 192.168.1.11

Я не могу найти первопричину, на что мне обратить внимание?


person Sriram Arvind Lakshmanakumar    schedule 24.01.2020    source источник


Ответы (1)


Короче говоря, у вас слишком много записей в /etc/resolv.conf.

Это известная проблема:

Некоторые дистрибутивы Linux (например, Ubuntu) по умолчанию используют локальный преобразователь DNS (systemd-resolved). Systemd-resolved перемещает и заменяет /etc/resolv.conf файлом-заглушкой, который может вызвать фатальный цикл пересылки при разрешении имен на вышестоящих серверах. Это можно исправить вручную, используя флаг --resolv-conf в kubelet, чтобы указать на правильный resolv.conf (для systemd-resolved это /run/systemd/resolve/resolv.conf). kubeadm (›= 1.11) автоматически обнаруживает systemd-resolved и соответствующим образом регулирует флаги kubelet.

Также

Linux libc до невозможности завис (см. Эту ошибку 2005 года) с ограничениями всего в 3 записи DNS nameserver и 6 записей DNS search. Kubernetes должен использовать 1 nameserver запись и 3 search записей. Это означает, что если локальная установка уже использует 3 nameservers или использует более 3 searches, некоторые из этих настроек будут потеряны. В качестве частичного обходного пути узел может запустить dnsmasq, что предоставит больше nameserver записей, но не больше search записей. Вы также можете использовать флаг --resolv-conf kubelet.

Если вы используете Alpine версии 3.3 или более ранней в качестве базового образа, DNS может работать некорректно из-за известной проблемы с Alpine. Дополнительную информацию см. здесь.

Вы могли бы изменить это в коде Kubernetes, но я не уверен в функциональности. Поскольку это значение установлено с определенной целью.

Код можно найти

const (
    // Limits on various DNS parameters. These are derived from
    // restrictions in Linux libc name resolution handling.
    // Max number of DNS name servers.
    MaxDNSNameservers = 3
    // Max number of domains in search path.
    MaxDNSSearchPaths = 6
    // Max number of characters in search path.
    MaxDNSSearchListChars = 256
)
person Crou    schedule 24.01.2020