Trident: Плагин Trident CSI Node не зарегистрирован после обновления версии Kubernetes

Созданный на 25 нояб. 2020  ·  4Комментарии  ·  Источник: NetApp/trident

Опишите ошибку

Плагин узла Trident CSI Node ( csi.trident.netapp.io ) на одном узле теперь не зарегистрирован после обновления версии Kubernetes с версии 1.18.9 до версии 1.19.4. Поды на этом узле больше не могут монтировать и размонтировать тома Trident.

Сообщения об ошибках

В логе kubelet видим следующие сообщения.

csi.trident.netapp.io не зарегистрирован, так как регистрационный сокет ( /var/lib/kubelet/plugins_registry/csi.trident.netapp.io-reg.sock ) был удален.

I1119 05:47:54.246972 6550 plugin_watcher.go:212] Удаление пути сокета /var/lib/kubelet/plugins_registry/csi.trident.netapp.io-reg.sock из кеша желаемого состояния
I1119 05:47:53.162305 6550 reconciler.go:139] OperationExecutor.UnregisterPlugin запущен для плагина в "/var/lib/kubelet/plugins_registry/csi.trident.netapp.io-reg.sock" (сведения о плагине: &{/var /lib/kubelet/plugins_registry/csi.trident.netapp.io-reg.sock 2020-11-04 05:08:19.553684094 +0000 UTC m=+38.893901704 0x704c200 csi.trident.netapp.io})
I1119 05:47:53.163390 6550 csi_plugin.go:177] kubernetes.io/csi: RegistrationHandler.DeRegisterPlugin запрос на плагин csi.trident.netapp.io

Поду не удалось размонтировать том, поскольку csi.trident.netapp.io не найден.

E1119 09:02:52.819122 6550 nestedpendingoperations.go:301] Операция для "{ volumeName:kubernetes.io/csi/csi.trident.netapp.io ^pvc-75a6fd7f-7aee-45e8-a5fa-d4500272528e podName:ad18a7d1-4090 -4e0c-9e71-cba46dfc3657 имя_узла:}" не удалось. Повторные попытки не разрешены до 2020-11-19 09:04:54,819071328 +0000 UTC m=+1310234,159288938 (durationBeforeRetry 2 м2 с). Ошибка: «Не удалось выполнить UnmountVolume.TearDown для тома data» (UniqueName: «kubernetes.io/csi/csi.trident.netapp.io^pvc-75a6fd7f-7aee-45e8-a5fa-d4500272528e») pod «ad18a7d1-4090-4e0c -9e71-cba46dfc3657" (UID: "ad18a7d1-4090-4e0c-9e71-cba46dfc3657"): kubernetes.io/csi: mounter.SetUpAt не удалось получить клиент CSI: имя драйвера csi.trident.netapp.io не найдено в списке зарегистрированных водителей CSI"

Два трезубца-csi работали одновременно

Мы обнаружили, что два trident-csi (плагин узла) на этом узле работали одновременно в течение очень короткого времени, и что старый driver-registrar остановился после запуска нового.

driver-registrar удаляет регистрационный сокет ( /var/lib/kubelet/plugins_registry/csi.trident.netapp.io-reg.sock ) при получении SIGTERM ( node_register.go#L113-L116 ). Удаление сокета приводит к тому, что kubelet отменяет регистрацию плагина Trident. Я считаю, что это является причиной проблемы.

image

DaemonSet был воссоздан после обновления

Модули Trident-csi (Node Plugin) управляются DaemonSet. Обычно на каждом узле работает только один модуль. Но после обновления Kubernetes набор демонов trident-csi был воссоздан trident-operator . Удаление DaemonSet позволяет одновременно запускать два модуля (старый и новый).

Мы подтвердили это в журнале trident-operator .

Здесь набор демонов trident-csi был удален.

time="2020-11-19T05:47:45Z" level=debug msg="Удаленный набор демонов Kubernetes." DaemonSet=трезубец-csi namespace=трезубец

Вскоре после этого был создан набор демонов trident-csi .

time="2020-11-19T05:47:45Z" level=debug msg="Создание объекта." kind=DaemonSet name=trident-csi namespace=trident

После обновления Kubernetes для флага shouldUpdate было установлено значение true ( controller.go#L1110 ). Похоже, что флаг shouldUpdate приводит к удалению набора демонов trident-csi ( installer.go#L1489-L1494 ).

Окружающая обстановка

  • Версия Trident: 20.10.0 с трезубцем-оператором
  • Используемые флаги установки Trident: silenceAutosupport: true (оператор Trident)
  • Время выполнения контейнера: Docker 19.03.13
  • Версия Kubernetes: v1.19.4
  • Оркестратор Kubernetes: Kubernetes
  • Шлюзы функций с поддержкой Kubernetes:
  • ОС: Убунту 18.04
  • Типы бэкенда NetApp: ONTAP AFF 9.1P14
  • Другой:

Воспроизвести

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

Два trident-csi заставляют kubelet отменить регистрацию плагина Trident.

  1. Убедитесь, что драйвер Trident CSI зарегистрирован на узле.
$ kubectl describe csinodes.storage.k8s.io <NODE_NAME>
...
Spec:
  Drivers:
    csi.trident.netapp.io:
      Node ID:        <NODE_NAME>
      Topology Keys:  [topology.kubernetes.io/zone]
  1. Скопируйте trident-csi DaemonSet, чтобы запустить два модуля trident-csi на каждом узле.
$ kubectl get ds -n trident trident-csi -o json | jq '.metadata.name|="trident-csi-2"' | kubectl apply -f -
  1. Подождите, пока они запустятся, затем удалите скопированный trident-csi-2 DaemonSet.
$ kubectl delete ds -n trident trident-csi-2
  1. Убедитесь, что драйвер Trident CSI исчез в разделе «Драйверы» на узле. (Это займет некоторое время)
$ kubectl describe csinodes.storage.k8s.io <NODE_NAME>
Spec:

Повторное создание DaemonSet позволяет одновременно запускать два модуля (старый и новый).

  1. Удалить набор демонов trident-csi . DaemonSet будет воссоздан вскоре после этого оператором трезубца.
$ kubectl delete ds -n trident trident-csi
  1. Вы увидите два trident-csi на каждом узле.
$ kubectl get pods -n trident -o wide

Ожидаемое поведение
Поды могут подключать и отключать тома Trident после обновления версии Kubernetes.

Дополнительный контекст
Никто

bug tracked

Самый полезный комментарий

Мы включим это исправление в выпуск Trident v21.01.

Все 4 Комментарий

Привет @tksm

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

Из любопытства не возражаете, если я спрошу, сколько кластеров столкнулись с этой проблемой во время обновления?

Спасибо!

Привет, @ntap-arorar

Спасибо за подтверждение. Я думаю, что ваша идея решит эту проблему.

Пока мы столкнулись с этой проблемой только на одном кластере, так как мы обновили только несколько кластеров в качестве теста.

Мы включим это исправление в выпуск Trident v21.01.

Эта проблема была исправлена ​​с коммитом 820579d .

Была ли эта страница полезной?
0 / 5 - 0 рейтинги