我正在尝试在App Engine Flexible上运行Airflow Webserver,但是要使其正常工作,我需要安装一个GCS存储桶。我正在使用自定义运行时。 我这样做的原因是为了获得App Engine与IAP一起提供的安全端点。
我的app.yaml是一个简单的文件,带有服务名称,环境和运行时
我的Dockerfile有很多apt-get install
,在CMD中有gcsfuse安装和运行气流Web服务器,这没什么大不了的。
尝试在App Engine中使用gcsfuse时遇到的错误是:
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上创建一个具有调度程序和Web服务器的VM,共享一个GCS存储桶,类似于Composer提供的功能,但没有HA以及我想运行的简单东西的所有疯狂费用。
我正在App Engine上进行搜索,到目前为止,由于某种原因,我找到的所有答案都提到了GKE。
我知道这是一个特权问题,但是在App Engine中,我看不到任何设置特权的选项,这样做的方式将非常有帮助。
甚至可以在App Engine上做我想做的事吗?
答案 0 :(得分:3)
这是可能的。我将向您展示如何手动执行操作,您可能需要利用shell脚本来处理多个实例。
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}'
您将获得一个图像ID
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.
答案 1 :(得分:1)
说实话,我已经尝试了所有可能的解决方案。最终上述解决方案成功了。不幸的是,它只能工作2-3天。一段时间后,App Engine会自动重新启动实例,而应用程序不会出现任何故障。因此,gcsfuse的所有更改都消失了。
使gcsfuse在容器中工作的主要事情是在特权模式下运行docker映像。而且 App Engine不允许
我们使用的最终解决方案是运行良好的GKE。
注意:预计GAE应该为特权模式提供一些准备,但现在还没有。将来Google团队可能会介绍它。谢谢!