Обновление StatefulSet: воссоздать ЗАТЕМ удалить поды

RollingUpdate стратегия Kubernetes удаляет и воссоздает каждый под в порядок. Я заинтересован в обновлении StatefulSet путем воссоздания модуля , а затем удаления старого модуля (обратите внимание на изменение направления) один за другим.

Мне это интересно, потому что:

  1. Количество готовых модулей не уменьшается. Я понимаю, что именно так работает и обычное обновление развертывания (то есть модуль удаляется только после того, как новый модуль, заменяющий его, готов).
  2. Что еще более важно, это позволяет мне выполнять динамическую миграцию для конкретного приложения во время обновления StatefulSet. Я хотел бы перенести данные из (old) pod-i в (new) pod-i до завершения работы (old) pod-i (я бы реализовал это в логике готовности (new) pod-i).

Возможна ли такая стратегия обновления?


person nurxg    schedule 10.06.2021    source источник


Ответы (2)


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

Вы можете достичь своей цели, используя несколько StatefulSets, например вместо StatefulSet из 3 реплик используйте 3 StatefulSet по 1 реплике в каждой. Затем разверните дополнительный StatefulSet для миграции данных перед удалением одного из предыдущих.

В качестве альтернативы это может быть вариант использования Operator для управления приложением. .

person Dharma Bellamkonda    schedule 11.06.2021

Нет, потому что модули имеют определенные имена на основе их порядковых номеров (-0, -1 и т. Д.), И одновременно может быть только один модуль с заданным именем. Развертывания и DaemonSet могут быстро обновляться, потому что их имена рандомизированы, поэтому не имеет значения, в каком порядке вы что-то делаете.

person coderanger    schedule 10.06.2021