我有一个上传到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实例,格式化新磁盘,安装它,并更新/ etc / fstab,以便在GCE"添加或调整持久磁盘后#34;#34;添加或调整持久磁盘&#34时重新启动磁盘;如何。所有步骤都适用于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实例中运行的容器中?
答案 0 :(得分:0)