Estoy tratando de ejecutar Airflow Webserver en App Engine Flexible, sin embargo, para que funcione, necesito un cubo GCS montado. Estoy usando tiempo de ejecución personalizado. La razón por la que lo hago es para obtener un punto final seguro que App Engine proporciona junto con IAP.
Mi app.yaml es un archivo simple con nombre de servicio, entorno y tiempo de ejecución. Mi Dockerfile es un montón de apt-get install s y en CMD hay gcsfuse montando y ejecutando el servidor web de flujo de aire, no es un gran problema.
El error que recibo cuando intento usar gcsfuse en App Engine es:
daemonize.Run: readFromProcess: sub-process: mountWithArgs: mountWithConn: Mount: mount: running fusermount: exit status 1 stderr: fusermount: fuse device not found, try 'modprobe fuse' firstSé que existe Google Composer, pero es demasiado caro para mis necesidades. Así que prefiero crear una máquina virtual con un programador y un servidor web en GAE, compartiendo un grupo de GCS, similar a lo que ofrece Composer, pero sin toda esa alta disponibilidad y el costo insano de las cosas simples que quiero ejecutar.
Estoy buscando hacer esto en App Engine, todas las respuestas que he encontrado hasta ahora mencionan GKE por alguna razón.
Sé que es un problema de privilegios, sin embargo en App Engine no veo ninguna opción para establecer privilegios, una forma de hacerlo sería muy útil.
¿Es posible hacer lo que quiero hacer en App Engine?
Esto es posible. Le mostraré cómo hacerlo manualmente, es posible que deba utilizar un script de shell para tratar con varias instancias.
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 gcloud app instances ssh instance-id-1 --service $service --version $version --project $project docker ps | grep gaeapp | awk '{print $2}'obtendrás un ID de imagen
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=***** 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/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.Para ser honesto, he probado todas las soluciones posibles. y finalmente la solución anterior funcionó. Desafortunadamente, funcionó solo durante 2-3 días. Después de un tiempo, App Engine reinicia las instancias automáticamente, sin fallas en la aplicación. Por lo tanto, todos los cambios para gcsfuse desaparecieron.
Lo principal para que gcsfuse funcione en un contenedor es ejecutar la imagen de la ventana acoplable en modo privilegiado. Y App Engine no lo permite.
La solución final que estamos usando es GKE, que funciona bien.
Nota: Se esperaba que GAE tuviera alguna provisión para el modo privilegiado, pero ahora no la tiene. En el futuro, el equipo de Google puede presentarlo. ¡Gracias!