首页 文章

如何在GCE和容器映像上使用持久存储

提问于
浏览
1

我有一个上传到GCP容器注册表的docker镜像,其中包含在TomEE上运行的Web应用程序和用于数据持久性的postgres . 我创建了一个计算引擎实例,并使用如下命令在端口8443上公开了HTTPS访问 .

gcloud beta compute instances create-with-container MY_VM --tags MY_TAG --machine-type=n1-standard-2 --container-image IMAGE_ID
gcloud compute firewall-rules create MY_VM-8443 --allow tcp:8443 --source-ranges 0.0.0.0/0 --target-tags MY_TAG

这可以部署应用程序并使其可以通过端口8443上的GCE实例的公共地址访问,但是当重新启动GCE实例时,应用程序创建的任何数据都会丢失到容器的postgres数据库中 . 我想将持久性磁盘挂载到容器中以获取postgres数据,这样数据就不会丢失,并且可以根据我读过的文档,为GCE支持的备份目的拍摄快照 .

根据GCE的文档,我认为这是一个两步的过程 .

  • 创建磁盘并将其附加到GCE实例 .

  • 在创建GCE实例时,使用此选项将附加磁盘挂载到docker容器: - container-mount-host-path mount-path = / mnt / disks / appdata,host-path = / var / lib / postgresql / data ,模式= RW

我坚持第一步 . 我创建了一个磁盘,将其连接到GCE实例,格式化新磁盘,安装它,并更新/ etc / fstab,以便在GCE“添加或调整持久磁盘”操作方法后,在启动时重新安装磁盘 . 所有步骤都适用于fstab更改 . 当我停止并使用以下命令重新启动GCE实例时,未保留/ etc / fstab的内容(尝试了整个过程几次)...

gcloud compute instances stop MY_VM
gcloud compute instances start MY_VM

为了验证我的进程是否正确,我尝试使用使用如下命令创建的非容器GCE实例进行相同的磁盘设置 . 这可以按预期工作,当实例停止并启动时,将恢复/ etc / fstab并装入磁盘 .

gcloud compute instances create test-host --tags test-server --machine-type=f1-micro

要完成,以下是用于设置连接磁盘的命令类型 .

gcloud beta compute ssh MY_VM
     sudo lsblk  # List the attached disks
     sudo mkfs.ext4 -m 0 -F -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/sdb
     sudo mkdir -p /mnt/disks/appdata
     sudo mount -o discard,defaults /dev/sdb /mnt/disks/appdata
     sudo chmod a+w /mnt/disks/appdata
     sudo cp /etc/fstab /etc/fstab.backup
     sudo blkid /dev/sdb  # Get the block ID for the disk
     sudo vi /etc/fstab   # Add the line below
       UUID=[UUID_VALUE] /mnt/disks/appdata ext4 discard,defaults 0 2

使用/ etc / fstab对基于GCE容器的实例是否有限制?

如果这应该工作如何调试重启时/ etc / fstab的丢失?

是否有更好的方法将持久存储添加到GCE实例中运行的容器中?

1 回答

  • 0

    由于您正在运行基于容器的GCE实例,因此您必须以不同的方式创建和装入卷 . 并不是说使用/ etc / fstab对基于GCE容器的实例有限制,它只是一种不同的方法 .

    要在容器中创建和装入卷,您必须使用docker命令 . 您可以通过运行以下命令来创建卷:

    $ docker volume create [volume_name]

    我在官方的docker页面上附上了一篇关于如何在容器中创建卷的文章here . 它还包括有关如何从容器备份和还原数据卷的步骤 . 本文建议使用卷,因为它更容易备份 .

    编辑:从我的研究来看,这似乎是Docker的一个问题 . 您可以阅读有关该问题的更多信息here .

相关问题