Как использовать постоянное хранилище на GCE и образ контейнера - PullRequest
0 голосов
/ 09 июня 2018

Я загрузил образ докера в реестр контейнеров 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, я думаю, что это двухэтапный процесс.

  1. Создайте диск и подключите его к экземпляру GCE.
  2. Смонтируйте прикрепленный диск в док-контейнерс этой опцией при создании экземпляра 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?

1 Ответ

0 голосов
/ 16 июня 2018

Поскольку вы запускаете экземпляр GCE на основе контейнера, вам придется создать и смонтировать том другим способом.Дело не в том, что для экземпляров, основанных на контейнерах GCE, есть ограничение / etc / fstab, это просто другой метод.

Чтобы создать и смонтировать том в контейнере, вам придется использовать команды docker,Вы можете создать том, выполнив следующую команду:

$ docker volume create [имя_тома]

Я прикрепил статью со страницы официального докера о том, как создавать тома в контейнере здесь .Он также включает шаги по резервному копированию и восстановлению томов данных из контейнера.В статье предлагается использовать тома, так как их проще резервировать.

РЕДАКТИРОВАТЬ: По моим исследованиям, это похоже на проблему с Docker.Подробнее о проблеме можно прочитать здесь .

...