Проблема с запуском gcsfuse в Google App Engine - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь запустить Airflow Webserver на App Engine Flexible, но для его работы мне нужно смонтированное ведро GCS.Я использую пользовательскую среду выполнения.Причина, по которой я это делаю, заключается в том, чтобы получить защищенную конечную точку, которую приложение Engine предоставляет вместе с IAP.

Мой app.yaml - это простой файл с именем службы, env и временем выполнения. Мой Dockerfile - это много apt-get install с, а в CMD есть gcsfuse, монтирующий и работающий с веб-сервером airflow, это не имеет большого значения.

Ошибка при попытке использовать gcsfuse в App Engine:

daemonize.Run: readFromProcess: sub-process: mountWithArgs: mountWithConn: Mount: mount: running fusermount: exit status 1

stderr:
fusermount: fuse device not found, try 'modprobe fuse' first

Я знаю, что Google Composer существует, но он слишком дорог для моих нужд.Поэтому я предпочитаю создавать виртуальную машину с планировщиком и веб-сервером на GAE, совместно используя корзину GCS, аналогично тому, что дает Composer, но без всей этой высокой доступности и безумных затрат на простые вещи, которые я хочу запустить.

Я ищучтобы сделать это в App Engine, во всех ответах, которые я нашел до сих пор, по какой-то причине упоминается GKE.

Я знаю, что это проблема с привилегиями, однако в App Engine я не вижу никакой опции для установки привилегий, аспособ сделать это был бы очень полезен.

Можно ли вообще делать то, что я хочу делать в App Engine?

1 Ответ

5 голосов
/ 23 мая 2019

Это возможно.Я покажу вам, как это сделать вручную, вам может понадобиться использовать сценарий оболочки для работы с несколькими экземплярами.

  1. определить несколько переменных, используемых в этом руководстве
service=YOUR_APPENGINE_VERSION
version=YOUR_APPENGINE_VERSION
project=PROJECTID
получить список экземпляров
gcloud app instances list  --project $project
SERVICE  VERSION          ID                                VM_STATUS  DEBUG_MODE
default  ***************  instance-id-1                     RUNNING    YES
default  ***************  instance-id-2                     RUNNING
SSH в один экземпляр
gcloud app instances ssh instance-id-1 --service $service --version $version --project $project
получить идентификатор изображения
docker ps | grep gaeapp | awk '{print $2}'

вы получите идентификатор изображения

env of gaeapp
docker exec gaeapp env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=*****
GAE_MEMORY_MB=614
GAE_INSTANCE=****
GAE_SERVICE=default
PORT=8080
GCLOUD_PROJECT=*****
GAE_VERSION=*****
GOOGLE_CLOUD_PROJECT=*****
перезапустить gaeapp с привилегией
docker rm -f gaeapp
docker run --privileged -d -p 8080:8080 --name gaeapp -e GAE_MEMORY_MB=614 -e GAE_INSTANCE=instance-id-1 -e GAE_SERVICE=$service -e PORT=8080 -e GCLOUD_PROJECT=$project -e GAE_VERSION=$version -e GOOGLE_CLOUD_PROJECT=$project $imageid
введите gaeapp (предположим, что у вас установлен gcsfuse и у вас есть ключ учетной записи службы json: /test-service-account.json)
$ docker exec -it gaeapp bash
[in gaeapp] # GOOGLE_APPLICATION_CREDENTIALS=/test-service-account.json gcsfuse BUCKET /mnt/
Using mount point: /mnt
Opening GCS connection...
Opening bucket...
Mounting file system...
File system has been successfully mounted.
...