Что такое StatefulSet в Kubernetes
Что проверяют
Различает ли кандидат идентичность пода и простое число реплик, и не тащит ли StatefulSet туда, где хватило бы Deployment. Вопрос быстро показывает, разворачивал ли человек что-то с состоянием в кластере сам или читал про это в статье.
Как отвечать
StatefulSet это контроллер, который даёт каждому поду три стабильные вещи: порядковый индекс в имени (web-0, web-1), собственный том из volumeClaimTemplates и постоянное DNS-имя внутри headless-сервиса. Под пересоздался, а имя, диск и адрес остались прежними. Deployment таких гарантий не даёт: суффиксы случайные, том общий или временный.
Порядок операций: по умолчанию поды создаются по возрастанию индекса, каждый следующий после готовности предыдущего, удаление и уменьшение числа реплик идут в обратном порядке. Политика управления подами в режиме параллельного создания снимает это ограничение, если порядок приложению не нужен. Обновление по умолчанию катится от старшего индекса к младшему, параметр partition позволяет остановить раскатку и проверить часть подов, режим OnDelete отдаёт замену подов в ручной контроль.
Сильный ответ обязательно говорит, чего StatefulSet не делает: он не реплицирует данные, не выбирает лидера, не делает бэкапов. Кластеризация это забота самого приложения или оператора.
Где спотыкаются
Забывают headless-сервис. Без сервиса с пустым clusterIP и указания его имени в спецификации стабильных DNS-имён у подов не будет, а именно ради них StatefulSet обычно и берут.
Считают, что StatefulSet сам делает базу отказоустойчивой. Он лишь расставляет поды и диски, а репликацию, кворум и переключение мастера обеспечивает либо сама СУБД, либо оператор поверх неё.
Не знают судьбу томов. Заявки на тома не удаляются ни при уменьшении числа реплик, ни при удалении самого объекта, если не настроена политика их очистки, а шаблон томов после создания менять нельзя: для смены размера или класса хранилища нужен обходной путь.