Создание прерываемой ВМ на базе Ubuntu 20.04
Перед тем как приступим к созданию ВМ необходимо установить на локальный компьютер несколько программ без которых будет невозможно продолжить работу.
Установку утилиты ус можно произвести используя мануал:
https://cloud.yandex.ru/docs/cli/operations/install-cli
Про аутентификацию можно почитать тут: https://cloud.yandex.ru/docs/cli/operations/authentication/user
Установить утилиту jq довольно просто. В Ubuntu/CentOS это можно сделать так:
apt -y install jq yum -y install jq
Поехали!
Создадим сервисный аккаунт, который пригодится при создании ВМ. Он может быть необходим если есть надобность выполнять команды от имени сервисного аккаунта. После создания SA выдадим ему необходимые права. После создания SA создадим ВМ и прикрепим к нему наш SA.
export FOLDER_ID=$(yc config get folder-id) yc iam service-account create --name cam-instance-sa export SA=$(yc iam service-account get cam-instance-sa --format json | jq -r '.id') yc resource folder add-access-binding $FOLDER_ID --role editor --subject serviceAccount:$SA
Посмотрим какие зоны доступности есть и выберем одну из них. При настройки сети важно учитывать в какой зоне доступности будет создана ВМ. Потому что подсеть в сети привязывается к зоне доступности. ВМ может быть создана только в одной из трёх зон. Их названия приведены ниже.
yc compute zone list +---------------+--------+ | ID | STATUS | +---------------+--------+ | ru-central1-a | UP | | ru-central1-b | UP | | ru-central1-c | UP | +---------------+--------+
export ZONE_ID=ru-central1-c
Создадим ВМ:
yc compute instance create \ --folder-id $FOLDER_ID \ --name srv-1 \ --description "Test machine" \ --hostname srv-1 \ --zone $ZONE_ID \ --platform standard-v2 \ --create-boot-disk image-family=ubuntu-2004-lts,size=30,type=network-ssd \ --image-folder-id standard-images \ --memory 2 \ --cores 2 \ --core-fraction 5 \ --preemptible \ --network-settings type=standard \ --network-interface subnet-name=subnet-c,nat-ip-version=ipv4 \ --ssh-key ~/.ssh/id_rsa.pub \ --metadata serial-port-enable=1 \ --service-account-id $SA \ --async
Будет создана ВМ с:
1. Именем srv-1;
2. Ubuntu 20.04;
3. 5% мощности CPU;
4. В зоне доступности ru-central1-c;
5. Прерываемая (флаг --preemptible);
6. На ВМ можно будет зайти с помощью ssh ключа.
7. Включенной серийной консолью.
8. subnet-c - название подсети, где будут созданы ip адреса для ВМ. При копировании скрипта необходимо изменить на своё значение.
Можно создать ещё одну ВМ. Изменим ей характеристики:
yc compute instance create \ --folder-id $FOLDER_ID \ --name srv-2 \ --description "Test machine_2" \ --hostname srv-2 \ --zone $ZONE_ID \ --platform standard-v3 \ --create-boot-disk image-family=ubuntu-2004-lts,size=30,type=network-hdd \ --image-folder-id standard-images \ --memory 2 \ --cores 2 \ --core-fraction 50 \ --preemptible \ --network-settings type=standard \ --network-interface subnet-name=subnet-c,address=10.130.0.197 \ --ssh-key ~/.ssh/id_rsa.pub \ --metadata serial-port-enable=1 \ --service-account-id $SA \ --async
Здесь мы поменяем платформу на более новую и изменим процент мощности CPU, потому что standard-v3 < 20% не использует. ВМ будет без внешнего адреса и с кастомным внутренним. Также, тип диска заменил на hdd.
Подключение к ВМ .
Подключимся для примера к одной из созданных ВМ.
После запуска команды на создание ВМ будет отображён идентификатор созданной машины. Примерно это будет выглядеть так:
description: Create instance created_at: "2022-08-24T19:55:19.736838050Z" created_by: aje25tpsqnkoaoccda0h modified_at: "2022-08-24T19:55:19.736838050Z" metadata: '@type': type.googleapis.com/yandex.cloud.compute.v1.CreateInstanceMetadata instance_id: ef3laci4am386thopt88
Посмотрим информацию по этому идентификатору. Нам необходимо будет узнать статус ВМ (запущена она или нет) и ip адрес, чтобы можно было бы подключиться.
yc compute instance get ef3laci4am386thopt88 --format=json | jq -r '.status' yc compute instance get ef3laci4am386thopt88 --format=json | jq -r '.network_interfaces' | grep address
В выхлопе первой команды будет всего одно слово, показывающее текущий статус работы ВМ. У меня это RUNNING. Значит можно подключаться.
В выхлопе второй команды будет внешний адрес ВМ. К нему и подключимся по ssh. Но сначала на всякий случай проверим доступность 22 порта.
telnet 51.250.46.182 22 ssh -i ~/.ssh/id_rsa [email protected]
Если соединение с помощью telnet устанавливается, то всё в порядке. Можно подключаться.
Подключение происходит от стандартного пользователя yc-user. Необходимо будет ввести ключевое слово, которое устанавливалось на приватный ключ, если устанавливалось. И всё на ВМ зашли!
sudo -i
Подключиться сразу под root не получится.
Посмотреть полную информацию о ВМ
yc compute instance get ef3laci4am386thopt88
Если необходимо определеить является ли данная ВМ прерываемой или нет, то в выводе этой команды должны быть строчки:
scheduling_policy: preemptible: true
Операции с инстансом (ВМ)
yc compute instance start ef3laci4am386thopt88 yc compute instance stop ef3laci4am386thopt88 yc compute instance restart ef3laci4am386thopt88
Для удаления ВМ можно воспользоваться командой:
yc compute instance delete srv-1 yc compute instance delete srv-2
Полезные ссылки:
Про прерываемые ВМ я ранее писал здесь: https://teletype.in/@cameda/5mevceiYnDV
Про гарантированную долю CPU тут:
https://teletype.in/@cameda/nuI4BN9yFlB
Про публичные образы: https://cloud.yandex.ru/docs/compute/concepts/image#public
Платформы:
https://cloud.yandex.ru/docs/compute/concepts/vm-platforms
Про сеть на ВМ:
https://cloud.yandex.ru/docs/compute/concepts/network
Метаданные:
https://cloud.yandex.ru/docs/compute/concepts/vm-metadata
Статусы ВМ:
https://cloud.yandex.ru/docs/compute/concepts/vm-statuses
Информация о Cloud init: https://cloud-init.io/
Про зону доступности тут: https://teletype.in/@cameda/S34zdiTcbUM
Сеть создавали тут: https://teletype.in/@cameda/ZbTkF70KWK9
Квоты в облаке: https://teletype.in/@cameda/yTu0k42dbw0