我有一个上传到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实例中运行的容器中?