У меня есть папка корзины в Google Cloud с примерно 47GB
данными. Я запускаю новый Kubernetes StatefulSet
(в моем кластере Google Cloud Kubernetes). Первое, что делает контейнер внутри StatefulSet
, - это использует gsutil -m rsync -r gs://<BUCKET_PATH> <LOCAL_MOUNT_PATH>
для синхронизации содержимого папки корзины с локально смонтированной папкой, которая соответствует постоянному тому Kubernetes. Заявление о постоянном томе для этого StatefulSet
запрашивает 125Gi
хранилища и используется только для этого rsync
. Но синхронизация gsutil
в конечном итоге задевает стену, когда на модуле заканчивается дисковое пространство (пространство в постоянном томе), и gsutil
выдает ошибку: [Errno 28] No space left on device
. Это странно, потому что мне нужно только скопировать 47GB
данных из корзины, но постоянный том должен иметь 125Gi
доступного хранилища.
Я могу подтвердить, что заявка на постоянный том и постоянный том были предоставлены с соответствующими размерами, используя kubectl get pvc
и kubectl get pv
. Если я запустил df -h
внутри модуля (kubectl exec -it <POD_NAME> -- df -h
), я смогу увидеть, что смонтированный путь существует и имеет ожидаемый размер (125Gi
). Используя df -h
во время синхронизации, я вижу, что он действительно занимает все доступное пространство в постоянном томе, когда наконец достигает No space left on device
.
Кроме того, если я инициализирую постоянный том 200Gi
и повторяю попытку синхронизации, она завершается успешно, и df -h
показывает, что использованное пространство в постоянном томе составляет 47GB
, как и ожидалось (это происходит после завершения gsutil rsync
).
Похоже, что gsutil rsync
использует гораздо больше места при синхронизации, чем я ожидал. Почему это? Есть ли способ изменить способ gsutil rsync
, чтобы не требовался постоянный том большего размера, чем необходимо?
Следует отметить, что существует много отдельных файлов, и что модуль перезапускается примерно 8 раз во время синхронизации.