Как я могу перенести диск Persistence из одного проекта в другой, в Compute Engine?
Я хотел бы знать, как я могу перенести диск Persistence (Google Compute Engine) из одного проекта в другой? Если это возможно.
Ответы
Ответ 1
В GCE нет простого способа сделать это, единственный способ - пройти процесс создания пользовательского образа, экспортировать его в ведро хранилища облаков (на который оба разрешения имеют разрешения), а затем создать новый используя новый пользовательский образ в новом проекте.
Следуйте этим инструкциям: https://developers.google.com/compute/docs/images#installinganimage
Ответ 2
Если вы хотите скопировать (не root) постоянный диск, выполните следующие действия:
- Перейдите в Google Developer Console и отсоедините диск
<disk-name>
от компьютера.
- Используйте утилиту командной строки
gcloud
для переключения на старый проект:
-
gcloud config set project <old-project>
- Создайте образ диска
<disk-name>
:
-
gcloud compute images create <image-name> --source-disk=<disk-name> --source-disk-zone=<zone>
- Вывод указанной выше команды даст вам полную ссылку на изображение (в форме
https://www.googleapis.com/compute/v1/projects/<project-name>/global/images/<image-name>
). Альтернативно, запустите:
gcloud compute images list --no-standard-images --uri | grep <image-name>
, чтобы найти ссылку.
- Переключиться на новый проект:
-
gcloud config set project <new-project>
- Создайте новый диск из образа:
-
gcloud compute disks create <new-disk-name> --image=<link-to-the-image> --zone=<zone>
Ответ 3
Как указано выше, Майк Лутц отвечает, кроме gcutil
теперь устарел, но вторая команда также может быть выполнена с помощью gcloud compute instance
:
1) создайте свое изображение у вас PD (сначала прочитайте! https://cloud.google.com/compute/docs/images#creating_an_image_from_a_root_persistent_disk)
$ gcloud compute images create [example-image] --source-disk [example-disk] --source-disk-zone ZONE --project="old-project-name"
2) Создайте образ в новом проекте (но, разумеется, у вас должен быть доступ к обоим проектам)
$ gcloud compute instances create [example-instance-1] --project=[new-project-name] --image="https://www.googleapis.com/compute/v1/projects/[old-project-name]/global/images/[image-name]" --boot-disk-size [XXXGB] --machine-type=[machine-type] --network="default" --zone=[datacenter-zone]
- вы можете увидеть URL своего изображения на вкладке "Изображения" в разделе "Эквивалентный REST"
Дополнительные параметры конфигурации экземпляра см. в разделе https://cloud.google.com/sdk/gcloud/reference/compute/instances/create
Ответ 4
Если вы можете создать изображение из него. Затем вы можете сделать что-то подобное, и оно скопирует изображение на диск в новом проекте:
{gcloud compute instance create my-instance-1 --project = [new-project-id] --image = "https://www.googleapis.com/compute/v1/projects/[old-project- идентификатор]///[имя-изображения глобального изображения]" }
Ответ 5
Добавив ответ Амоса выше, чтобы избежать необходимости отсоединять pd от его экземпляра, чтобы сделать изображение из него, я использовал следующую последовательность:
В исходном проекте:
- Создайте SNAPSHOT с нужного загрузочного диска для клонирования.
- Создайте новый постоянный диск из этого моментального снимка.
- Создайте образ из нового pd.
В целевом проекте:
- Создайте экземпляр виртуальной машины, используя URL-адрес вновь созданного образа.
Когда вы закончите, вы можете удалить созданный диск и изображение в исходном проекте.
Ответ 6
В то время как следующее не будет непосредственно перенести диск Persistence Disk, он позволит вам сделать копию одного в другом проекте только с двумя командами.
Если вы комбинируете процесс в документе, ссылки на IanGSY для превращения диска в "образ" I.E:
gcloud compute images create example-image --source-disk example-disk --source-disk-zone ZONE
(выше команда работает только в том случае, если диск не находится в режиме реального времени (при подключении), если вам нужно сбросить виртуальную машину, убедитесь, что вы не позволили ему удалить диск - убедитесь, что "Удалить загрузочный диск при удалении экземпляра" не проверяется, если вы используете веб-интерфейс!)
И используйте то, что намечено Йенсом (что изложено в ответе на SO: Как поделиться изображениями Engine Engine Engine через проекты?) IE:
gcutil --service_version="v1" --project=<ID-of-your-project> addinstance <name-you-for-instance> --machine_type=<type-of-machine> --network="default" --external_ip_address="ephemeral" --zone=<datacenter-zone> --image="https://www.googleapis.com/compute/v1/projects/<ID-of-image-owners-project>/global/images/<image-id>" --persistent_boot_disk="true"
В результате вы получите копию данного диска в другом проекте.
Ответ 7
Не используйте процесс создания файла изображения в ведро Cloud Storage и обменивайтесь им. Он не очень надежный (пока). Метод Amos для создания изображения в исходном проекте и создания экземпляра из этого изображения в проекте назначения намного чище и отлично работает для меня.
Обратите внимание на параметры командной строки, поскольку утилита gcloud находится в небольшом потоке.
Ответ 8
У меня было ужасное время получать данные на диске из одного из моих проектов в другой. Пытался изо всех сил следовать всем направлениям здесь и от Google, но не смог получить новый диск, созданный без создания экземпляра. Вот что я в итоге сделал... (сильно повлиял на многие другие ответы)
В оригинальном проекте:
- Перейдите в IAM и найдите свой адрес электронной почты. В роли (-ах) добавьте роль: Compute Engine = > Compute Image User (это предполагает, что вы являетесь владельцем обоих проектов. Я также не на 100% уверен, что это был необходимый шаг в конце)
- Создайте новое изображение. Установите "Источник" как "Диск". Затем выберите свой диск.
В проекте назначения:
- Откройте Google Cloud Shell (кнопка в правом верхнем углу консоли GCE)
- Запустите эту команду для создания новой INSTANCE с диска:
gcloud compute instances create NAMEFORNEWINSTANCE --image IMAGENAMEYOUCHOSE --image-project ORIGINALPROJECTNAME
(Да, мы создаем новый экземпляр, даже если вы действительно хотите создать новый диск. Я не мог заставить его работать только с созданием новый диск.)
- Найдите экземпляр, который был только что создан. Прекрати это. Отредактируйте его. Снимите флажок "Удалить загрузочный диск при удалении экземпляра". Сохранить изменения.
Удалить экземпляр. Не устанавливайте флажок, чтобы удалить загрузочный диск.
- Перейдите на панель Диски. Вы должны увидеть диск с именем так же, как и все, что вы выбрали для
NAMEFORNEWINSTANCE
Прикрепите диск: (не совсем такая же тема, но поместив здесь шаги для тех, кто должен знать, как это сделать)
- В Google Cloud Shell запустите:
gcloud compute instances attach-disk NAMEOFINSTANCETOATTACHTO --disk=NAMEOFDISK
(Опять же, NAMEOFDISK должен совпадать с тем, что вы выбрали для NAMEFORNEWINSTANCE). Вы должны увидеть на панели Диски, которая теперь привязана к вашему новому экземпляру.
- SSH в экземпляр, который вы привязали к
- Создайте новый каталог для монтирования этого диска:
sudo mkdir /DIRECTORYNAME
- Запустите
lsblk
, чтобы просмотреть список дисков, их имена, размеры и точки монтирования. Попытайтесь найти свой прикрепленный диск там. Размер должен соответствовать тому, что вы видите на панели Диски, и не должен монтироваться на что-либо.
- Установите диск в каталог, используя:
sudo mount /dev/NAME_FOUND_IN_STEP_ABOVE /DIRECTORY
Ответ 9
Метод, описанный Amos выше, использует команду "gcloud compute экземпляры create" для решения задачи, запрошенной OP. Когда он использует флаг "-image", он предоставляет URL-адрес google (который длинный, и я должен искать его и каждый раз проверять его на синтаксис).
В той же команде "gcloud compute instance create" также принимает флаг "-image-project", в котором задача, запрошенная OP, решается одинаково, за исключением того, что она принимает ваши изображения и имена проектов, чтобы вы не нужно помнить или искать более длинный uri.
Флаги "-image" и "-image-project" также принимаются командой: "gsmoud compute discks create", поэтому вы можете перенести исходный образ проекта на постоянный диск проекта, на новый постоянный диск в новом проекте, без необходимости создания исполняемого (то есть оплачиваемого) экземпляра.
Любой из методов требует, чтобы образ перенесенного диска был создан в исходном проекте перед созданием экземпляра или диска в новом проекте.
Я просто перенес диск из моего проекта разработки в производственный проект, и мой сеанс выглядел следующим образом:
-
в моем первоначальном проекте я создал образ диска, который я хотел перенести (сначала его нужно было отделить от любых запущенных экземпляров). У кого-то другого могла быть другая зона диска, чем та, которую я использовал, поэтому соответственно изменить:
gcloud config set project originalproject
gcloud compute images create imageofmydisk --description "образ моего диска, готовый к развертыванию" - семейный "grsec-4.6.5" - исходный диск mydisk --source-disk-zone us-central1-f
-
переход на мой новый проект, я создаю новый диск, основанный на моем новом образовании моего диска в моем старом проекте:
gcloud config set project newproject
gcloud вычислить диски создать mynewdisk --description "описание mynewdisk" --type pd-ssd --image imageofmydisk --image-project originalproject
Таким образом, я выполняю задачу, запрошенную OP, без необходимости запоминать или смотреть каждый раз полный URL-адрес изображения.