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,

Другие вопросы по тегам