gcsfuse для монтирования сегмента в GKE и / или python3 boto для потоковой записи?
Я ищу способ "записать поток" некоторых видеофайлов.mp4 - поскольку они генерируются каким-либо приложением python - в хранилище облачного хранилища Google. Приложение python упаковано и развернуто в GKE и в настоящее время прекрасно работает как веб-сервис. Но проблема в том, что все видеофайлы локально генерируются и хранятся в пути (tmp/processed
внутри стручка
Однако я хочу, чтобы видеофайлы были записаны в файлы в хранилище Google с именем my_bucket
,
Я прочитал руководство по gcsfuse ( https://github.com/maciekrb/gcs-fuse-sample) о том, как смонтировать ведро в модулях Kubernetes, а также прочитал о boto ( https://cloud.google.com/storage/docs/boto-plugin), который используется для передачи потоков в сегменты памяти.
Монтировать my_bucket
в tmp/processed
Я добавил следующие строки в файл развертывания моего приложения (YAML):
lifecycle:
postStart:
exec:
command:
- gcsfuse
- -o
- nonempty
- my_bucket
- tmp/processed
preStop:
exec:
command:
- fusermount
- -u
- tmp/processed/
securityContext:
capabilities:
add:
- SYS_ADMIN
Я еще не использовал boto и подумал, что может быть достаточно просто монтажа! Но мое приложение выдает ошибку ввода / вывода при попытке создать видеофайл.
Теперь мой вопрос заключается в том, нужно ли мне использовать gcsfuse и boto, или достаточно просто вставить ведро в мой модуль GKE? И я делаю монтаж правильно?
ОБНОВЛЕНИЕ: я проверил, что я сделал монтирование правильно, используя следующую команду:
kubectl exec -it [POD_NAME] bash
1 ответ
Задача решена! Я только должен был смонтировать свое ведро в капсуле, и это было все. Сценарий монтирования (как написано выше в моем вопросе) был сделан правильно. Но проблема, которая вызвала input/output error
был из-за моего кластера GKE, который имел недостаточные разрешения. По сути, у кластера не было разрешения на чтение / запись в хранилище, и проекту потребовалось несколько других разрешений. Итак, я создал новый кластер, используя следующую команду:
gcloud container clusters create [MY_CLUSTER_NAME] \
--scopes=https://www.googleapis.com/auth/userinfo.email,cloud-platform,https://www.googleapis.com/auth/devstorage.read_write,storage-rw,trace,https://www.googleapis.com/auth/trace.append,https://www.googleapis.com/auth/servicecontrol,compute-rw,https://www.googleapis.com/auth/compute,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/taskqueue \
--num-nodes 4 --zone "us-central1-c"
чтобы иметь возможность читать / записывать из / в хранилище, кластер должен иметь https://www.googleapis.com/auth/devstorage.read_write
разрешение.
Кроме того, мне не нужно было использовать boto, и монтирования через gcsfuse было достаточно, чтобы я мог записывать потоковые видеофайлы в my_bucket
,