人们在创建在群集环境中运行的应用程序时,人们在哪里存储数据?
我创建了一个从主机上的目录中读取XSLT的应用程序。但是,如果我想在容器(Docker)中的Google Cloud Engine中运行相同的应用程序,那么如果我使用服务(负载平衡),我会遇到很大的问题。必须有一个所有读/写的公共数据存储。它应该安装在每个吊舱上(对吗?)。
我该怎么用?我尝试使用Hadoop,但无法挂载(所有指南都已过时,我正在运行Ubuntu 14.04)。
我无法成为世界上第一个尝试在群集环境中读取/存储数据的人。这是怎么做到的?
答案 0 :(得分:3)
坦率地说,这是所有Docker编排系统(AFAIK)的常见弱点。 Google容器引擎具有persistent disk功能,因此可以创建在容器重新启动时保持不变的卷。但是,每个永久磁盘只应附加到设计为在单个实例上运行的容器。这违背了分布式环境的目的。
Amazon在弹性bean-stalk上有一个类似的docker设置,你可以将ebs卷挂载到一个实例上,但是它再次与docker volume的概念不相称。
CoreOS通过在所有集群之间提供共享键值存储来为此目的使用etcd。这并不像分布式文件系统那么有用,但您至少可以在容器之间共享一些数据。
如果您想要在容器之间共享数据,那么现在就可以了解事态,您必须推出自己的解决方案。
编辑:以特权模式运行容器我能够使用s3fs将s3桶装入容器中,因此这可以是滚动自己的解决方案的一个选项。虽然我不会用它来编写繁重的工作负载。
docker run -privileged -it ubuntu bash
apt-get install build-essential git libfuse-dev libcurl4-openssl-dev
libxml2-dev mime-support automake libtool
apt-get install pkg-config libssl-dev # See (*3)
git clone https://github.com/s3fs-fuse/s3fs-fuse
cd s3fs-fuse/
./autogen.sh
./configure --prefix=/usr --with-openssl # See (*1)
make
sudo make install
echo AWS_KEY:AWS_SECRET>/etc/passwd-s3fs
chmod 400 /etc/passwd-s3fs
s3fs my-bucket /mnt
答案 1 :(得分:0)
您可以使用Google Cloud Storage存储该数据,这些数据可供任何应用使用,甚至可以在Google网络之外使用。
特别是从GCE访问时,请参阅中的相应行 Integration with Google Cloud Platform表:
在Compute Engine实例中使用云存储: