После удаления ситца новые поды застревают в состоянии создания контейнера. - PullRequest
1 голос
/ 08 мая 2020

После удаления calico, kubectl -f calico.yaml не удалось создать новые поды в кластере. Все новые модули в кластере застревают в состоянии создания контейнера. Kubectl describe показывает следующие ошибки:

Предупреждение FailedCreatePodSandBox 2m kubelet, 10.0.12.2 Failed create pod sandbox: rp c error: code = Unknown des c = [не удалось настроить контейнер песочницы "f15743177fd70c5eabf70c60be5b8b354e5346837d1b5d59bf99d1d1b5d6416 c" сеть для пода "test-9465-768b57b5df-fv9d4": NetworkPlugin cni не удалось установить podb57b5df-fv9d4 ошибка неавторизованной сети. чтобы очистить контейнер песочницы "f15743177fd70c5eabf70c60be5b8b354e5346837d1b5d59bf99d1d1b5d6416 c" сеть для pod "test-9465-768b57b5df-fv9d4": NetworkPlugin cni не удалось удалить соединение с кластером isobdddddd-9465-de-pod-data-дескриптор-дескриптор pod : Unauthorized]

1 Ответ

2 голосов
/ 08 мая 2020

Основная проблема вызвана тем, что в calico есть контейнер инициализации, но нет контейнера очистки. T

Чтобы отменить развертывание calico, мы должны выполнить обычную операцию kubectl delete -f <yaml>, а затем удалить файл конфигурации calico в каждом из узлов /etc/cni/net.d/. Этот файл конфигурации вместе с другими двоичными файлами загружается на хост контейнером инициализации.

https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/

По этой ссылке мы видим, что kubelet считывает конфигурацию файл из каталога по умолчанию, и если есть несколько файлов конфигурации, то он применяет подключаемый модуль CNI из файла конфигурации, который появляется первым в алфавитном порядке (почему, боже, почему ??).

Итак, в В нашем случае после удаления calico он будет удален из всех прав администратора, но узлы все равно будут пытаться применять правила calico на основе файла конфигурации, который он получил из каталога по умолчанию. Затем перезапустите узел, чтобы избавиться от правил iptable.

Удаление файла и перезапуск узла решают проблему, и мы возвращаемся к нормальному поведению. Другой способ решить ту же проблему - просто отключить узел из кластера, если вы находитесь в управляемом кластере Kubernetes. Поскольку облачная инфраструктура publi c автоматически загружает другой узел, чтобы сохранить то же состояние, у него больше нет файла конфигурации calico.

...