Я загрузил образ докера в реестр контейнеров GCP, который содержит веб-приложение, запущенное на TomEE, и postgres для сохранения данных.Я создал экземпляр вычислительного механизма и открыл доступ HTTPS на порт 8443. С помощью команд, подобных следующим:
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
Это работает для развертывания приложения и делает его доступным через открытый адрес экземпляра GCE на порту 8443, но когдаэкземпляр GCE перезапускается, любые данные, созданные приложением в базе данных postgres контейнера, теряются.Я хотел бы смонтировать постоянный диск в контейнер для данных postgres, чтобы данные не были потеряны и иметь возможность делать моментальные снимки для целей резервного копирования, что поддерживается GCE на основании того, что я прочитал в документации.
Основываясь на документации для GCE, я думаю, что это двухэтапный процесс.
- Создайте диск и подключите его к экземпляру GCE.
- Смонтируйте прикрепленный диск в док-контейнерс этой опцией при создании экземпляра GCE: --container-mount-host-path mount-path = / mnt / disks / appdata, host-path = / var / lib / postgresql / data, mode = rw
Я застрял на первом шаге.Я создал диск, подключил его к экземпляру GCE, отформатировал новый диск, установил его и обновил / etc / fstab, чтобы диск перемонтировался при загрузке, следуя инструкциям GCE «Добавление или изменение размера постоянных дисков».Все шаги работали до изменений в fstab.Содержимое / etc / fstab не было сохранено, когда я остановил и перезапустил экземпляр GCE с помощью следующих команд (пробовал весь процесс пару раз) ...
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
Есть ли ограничение для экземпляров GCE на основе контейнера с / etc / fstab?
Если это должно сработать, как отладить потерю / etc / fstab при перезапуске?
Есть ли лучший подход для добавления постоянного хранилища в контейнер, работающий в экземпляре GCE?