Итак коллеги, кого интересует ресайз PVC.
Диспозиция: Яндекс.облако, k8s 1.18. Есть SS, в моем случае с эластиком. К каждому поду прицеплен PVC.
Задача: расширить тома.
1. Редактируем поле
spec.resources.requests.storage
в PVC одного из подов
2. Дожидаемся в ивентах пода ошибки вида
resize volume pvc-b2bb95b4-ea0c-40c6-a7d2-e559ce9ae135 failed: rpc error: code = FailedPrecondition desc = Error updating volume=epdj6m19pobu0pmno0pr, request-id = 27801d41-9ab6-463a-8531-cec11087445c rpc error: code = FailedPrecondition desc = Disk "epdj6m19pobu0pmno0pr" has an invalid state for this operation: attached to non-stopped instance
3. Выясняем на какой ноде обитает под, который аттачит текущий PVC и делаем
kubectl cordon xxxxxxxxxxxxx-yyyy
4. Убиваем под
kubectl delete elastic-es-data-X
, после удаления под впадает в статус Pending, потому что его нода закордонена
5. Дожидаемся в статусе PVC сообщения че-т типа: запусти под, чтобы закончить ресайз ФС (не успел копирнуть). У меня этот этап иногда происходит практически мгновенно, а иногда до 15ти минут может затянуться. С чем это связано я понять не смог, в логах csi ничего криминального нет.
6. Делаем
kubectl uncordon xxxxxxxxxxxxx-yyyy
, при этом под начинает инититься и стартовать
7. (Этот пункт касается только эластика) Когда под стартанул нужно обязательно зайти в мониторинг эластика и убедиться, что все реплики индексов пришли в норму и все статусы зеленые.
8. повторять с 1п. столько раз, сколько томов нужно ресайзнуть.
Хочется отметить, что такой способ подойдет только для SS и DS, поды деплоймента скорее всего будут пытаться подняться на других нодах и там что-то другое, придется придумать. Один из коллег советовал прописать affinity, например.