Мастер kubernetes не может присоединиться к кластеру

Мы используем k8s 1.9.3, управляемый через kops 1.9.3 в AWS с DNS на основе Gossip, используя сетевой плагин weave cni.

Я выполнял непрерывное обновление основных IG, чтобы включить некоторые дополнительные контроллеры доступа. (PodNodeSelector и PodTolerationRestriction) Я сделал это в двух других кластерах без проблем. Когда кластер перешел к работе с третьим мастером (мы запускаем наш кластер в конфигурации с тремя мастерами), он отключил экземпляр и попытался запустить новый мастер-экземпляр, но новый мастер-экземпляр не смог присоединиться к кластеру. После дальнейших исследований и последующих попыток свернуть третий мастер, чтобы ввести его в кластер, я обнаружил, что третий, не сумев присоединиться к мастеру, продолжает пытаться присоединиться к кластеру в качестве IP-адреса старого мастера. Даже если это IP-адрес что-то другое. Наблюдение за kubectl get nodes | grep master показывает, что кластер считает, что это старый IP-адрес, и он терпит неудачу, потому что это уже не тот IP-адрес. Кажется, что по какой-то причине DNS кластера, основанный на сплетнях, не получает уведомления об IP-адресе нового мастера.

Это вызывает проблемы, потому что в kubernetes svc все еще есть IP-адрес старого мастера, что приводит к сбою любых запросов API, которые направляются этому несуществующему серверному мастеру. Это также вызывает проблемы для etcd, который продолжает пытаться связаться с ним по старому IP-адресу. Таких журналов много:

018-10-29 22:25:43.326966 W | etcdserver: failed to reach the peerURL(http://etcd-events-f.internal.kops-prod.k8s.local:2381) of member 3b7c45b923efd852 (Get http://etcd-events-f.internal.kops-prod.k8s.local:2381/version: dial tcp 10.34.6.51:2381: i/o timeout)
2018-10-29 22:25:43.327088 W | etcdserver: cannot get the version of member 3b7c45b923efd852 (Get http://etcd-events-f.internal.kops-prod.k8s.local:2381/version: dial tcp 10.34.6.51:2381: i/o timeout)

Одна странность заключается в том, что если я запускаю etcdctl cluster-health на доступных мастер-экземплярах etcd, все они показывают неработоспособный идентификатор участника как f90faf39a4c5d077, но когда я смотрю журналы etcd-events, я вижу, что он видит неработоспособный идентификатор участника как 3b7c45b923efd852. Так что, кажется, есть некоторое несоответствие с etcd.

Поскольку мы работаем в конфигурации с тремя ведущими узлами, один из которых не работает, мы не хотим перезапускать какие-либо другие главные узлы, чтобы попытаться решить проблему, потому что мы боимся потерять кворум в кластере etcd.

Мы используем weave 2.3.0 в качестве нашего сетевого провайдера CNI.

Заметил на неисправном мастере, что weave cni config /etc/cni/net.d/10-weave.conf не создается, а файлы /etc/hosts на рабочих мастерах не обновляются должным образом новым IP-адресом мастера. Похоже, kube-proxy по какой-то причине не получает обновления.

Запуск образа Debian 8 (jessie) по умолчанию, поставляемого с kops 1.9.

Как мы можем заставить мастера правильно обновить DNS с помощью нового IP-адреса?


person user1522264    schedule 30.10.2018    source источник
comment
Я хотел бы посоветовать вам потратить больше времени на исследование, чтобы определить причины ваших проблем, а затем отредактировать свой вопрос, чтобы придать конкретную форму одной конкретной проблеме, потому что в настоящее время она выглядит очень сложной.   -  person Konstantin Vustin    schedule 30.10.2018


Ответы (1)


Мой коллега обнаружил, что исправление заключается в перезапуске модулей kube-dns и kube-dns-autoscaler. Мы до сих пор не уверены, почему им не удалось обновить DNS с новым основным IP-адресом, но после перезапуска добавление нового мастера в кластер сработало нормально.

person user1522264    schedule 30.10.2018