Создание прерываемой ВМ на базе CentOS 7
Перед тем как приступим к созданию ВМ необходимо установить на локальный компьютер несколько программ без которых будет невозможно продолжить работу.
Установку утилиты ус можно произвести используя мануал:
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 srv1 \ --description "Test machine" \ --hostname srv1 \ --zone $ZONE_ID \ --platform standard-v2 \ --create-boot-disk image-family=centos-7,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. Именем srv1;
2. CentOS 7;
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 srv2 \ --description "Test machine_2" \ --hostname srv2 \ --zone $ZONE_ID \ --platform standard-v3 \ --create-boot-disk image-family=centos-7,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-24T20:35:53.404902200Z" created_by: aje25tpsqnkoaoccda0h modified_at: "2022-08-24T20:35:53.404902200Z" metadata: '@type': type.googleapis.com/yandex.cloud.compute.v1.CreateInstanceMetadata instance_id: ef3ijolk0ranltscfe9h
Посмотрим информацию по этому идентификатору. Нам необходимо будет узнать статус ВМ (запущена она или нет) и ip адрес, чтобы можно было бы подключиться.
yc compute instance get ef3ijolk0ranltscfe9h --format=json | jq -r '.status' yc compute instance get ef3ijolk0ranltscfe9h --format=json | jq -r '.network_interfaces' | grep address
В выхлопе первой команды будет всего одно слово, показывающее текущий статус работы ВМ. У меня это RUNNING. Значит можно подключаться.
В выхлопе второй команды будет внешний адрес ВМ. К нему и подключимся по ssh. Но сначала на всякий случай проверим доступность 22 порта.
telnet 51.250.37.154 22 ssh -i ~/.ssh/id_rsa yc-user@51.250.37.154
Если соединение с помощью telnet устанавливается, то всё в порядке. Можно подключаться.
Подключение происходит от стандартного пользователя yc-user. Необходимо будет ввести ключевое слово, которое устанавливалось на приватный ключ, если устанавливалось. И всё на ВМ зашли!
sudo -i
Подключиться сразу под root не получится.
Посмотреть полную информацию о ВМ
yc compute instance get ef3laci4am386thopt88
Если необходимо определеить является ли данная ВМ прерываемой или нет, то в выводе этой команды должны быть строчки:
scheduling_policy: preemptible: true
Операции с инстансом (ВМ)
yc compute instance start ef3ijolk0ranltscfe9h yc compute instance stop ef3ijolk0ranltscfe9h yc compute instance restart ef3ijolk0ranltscfe9h
Для удаления ВМ можно воспользоваться командой:
yc compute instance delete srv1 yc compute instance delete srv2
Полезные ссылки:
Про прерываемые ВМ я ранее писал здесь: 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