мастер kubernetes не может присоединиться к кластеру - PullRequest
0 голосов
/ 30 октября 2018

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

Я выполнял непрерывное обновление основных IG, чтобы включить некоторые дополнительные контроллеры доступа. (PodNodeSelector и PodTolerationRestriction) Я сделал это в двух других кластерах без проблем. Когда кластер начал работу с третьим мастером (мы запускаем наш кластер в 3 основных настройках), он выключил экземпляр и попытался вызвать новый мастер-экземпляр, но новый мастер-экземпляр не смог присоединиться к кластеру. После дальнейших исследований и последующих попыток свернуть третий мастер, чтобы перенести его в кластер, я обнаружил, что третий, не присоединяясь к мастеру, продолжает пытаться присоединиться к кластеру как 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 на доступных экземплярах master и т. Д., То все они показывают идентификатор нездорового члена как f90faf39a4c5d077, но когда я просматриваю журналы событий etcd, я вижу, что он видит идентификатор участника нездоровья как 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-адресом?

1 Ответ

0 голосов
/ 30 октября 2018

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

...