Как я могу перенести диск 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-адрес изображения.