0

Практическая работа. Создание виртуальных машин с помощью yc

26.04.2022

Создание ВМ — одна из самых сложных команд CLI, потому что в ней очень много параметров. Давайте потренируемся работать с ней.  Но сначала подготовим окружение.Мы будем работать в каталоге по умолчанию. Создадим в нём сеть, в ней — три подсети, а затем по ВМ в каждой подсети.

  1. Создайте сеть my-network в Virtual Private Cloud. Эта команда относится к группе vpc.

Проверьте синтаксис команды

yc vpc network create --name my-network 

Выполнение операции займёт какое-то время. В итоге сеть появится в каталоге, который вы выбрали в начале урока.

  1. Теперь создадим три подсети в разных зонах доступности. Чтобы проще было выполнять задания дальше, назовите их my-subnet-1my-subnet-2 и my-subnet-3. А пространства IP-адресов для подсетей укажите, соответственно, как 192.168.1.0/24, 192.168.2.0/24 и 192.168.3.0/24.

При создании подсетей не забудьте указать, что вы создаете их в новой сети, созданной на предыдущем шаге. Иначе они появятся в сети по умолчанию, которая есть в каждом каталоге.Вот так выглядит команда создания подсети в зоне доступности ru-central1-a:

yc vpc subnet create --name my-subnet-1 \
  --zone ru-central1-a \
  --range 192.168.1.0/24 \
  --network-name my-network 

Создайте две другие подсети сами.Проверьте синтаксис команд

yc vpc subnet create --name my-subnet-2 \
  --zone ru-central1-b \
  --range 192.168.2.0/24 \
  --network-name my-network
 
yc vpc subnet create --name my-subnet-3 \
  --zone ru-central1-c \
  --range 192.168.3.0/24 \
  --network-name my-network 
  1. Осталось создать три ВМ в нужных зонах доступности и привязать к ним подсети.

Пусть машины работают под управлением ОС Ubuntu 20.04 LTS, имеют диски объёмом 30 Гб, 4 Гб оперативной памяти и два виртуальных процессорных ядра.ВМ могут создаваться долго, поэтому запускайте команды в асинхронном режиме.Пример команды для первой ВМ:

yc compute instance create --name my-instance-1 \
  --hostname my-instance-1 \
  --zone ru-central1-a \
  --create-boot-disk image-family=ubuntu-2004-lts,size=30,type=network-nvme \
  --image-folder-id standard-images \
  --memory 4 --cores 2 --core-fraction 100 \
  --network-interface subnet-name=my-subnet-1,nat-ip-version=ipv4 \
  --async 

Посмотрите внимательно на все параметры. Поймите, какой из них за что отвечает.Создайте две другие машины сами.Проверьте синтаксис команд

yc compute instance create --name my-instance-2 \
  --hostname my-instance-2 \
  --zone ru-central1-b \
  --create-boot-disk image-family=ubuntu-2004-lts,size=30,type=network-nvme \
  --image-folder-id standard-images \
  --memory 4 --cores 2 --core-fraction 100 \
  --network-interface subnet-name=my-subnet-2,nat-ip-version=ipv4 \
  --async
 
yc compute instance create --name my-instance-3 \
  --hostname my-instance-3 \
  --zone ru-central1-c \
  --create-boot-disk image-family=ubuntu-2004-lts,size=30,type=network-nvme \
  --image-folder-id standard-images \
  --memory 4 --cores 2 --core-fraction 100 \
  --network-interface subnet-name=my-subnet-3,nat-ip-version=ipv4 \
  --async 

После выполнения каждой команды благодаря флагу --async вы получите идентификатор операции и ее описание в виде:

id: c9q9v4bsn1hs9api4b13
description: Create compute instance
folder_id: b1go1t87o152ggv814h5
created_at: "2021-03-01T03:23:00.079888Z"
done: false 
  1. Проследите за статусом одной из операций, используя ее идентификатор.

Проверьте синтаксис команды

yc operation get c9q9v4bsn1hs9api4b13 
  1. Дождитесь, пока операция завершится. Используйте для этого команду wait.

Проверьте синтаксис команды

yc operation wait c9q9v4bsn1hs9api4b13 
  1. Убедитесь, что ВМ созданы. Для этого выведите их список.
yc compute instance list 

По умолчанию список выдается в виде таблицы:

+----------------------+---------------------------+---------------+---------+----------------+-------------+
|          ID          |           NAME            |    ZONE ID    | STATUS  |  EXTERNAL IP   | INTERNAL IP |
+----------------------+---------------------------+---------------+---------+----------------+-------------+
| fhm0qntkoj32qr6sqipa | my-instance-1             | ru-central1-a | RUNNING |                | 10.130.0.14 |
| fhm2p20bifmg3k3voda7 | my-instance-2             | ru-central1-b | RUNNING |                | 10.130.0.24 |
| fhmv1dkhd5o494d97cch | my-instance-3             | ru-central1-c | RUNNING |                | 10.130.0.34 |
+----------------------+---------------------------+---------------+---------+----------------+-------------+ 

Список можно вывести в формате YAML или JSON (эта возможность пригодится вам на следующих уроках):

yc compute instance list --format json 

Список в формате JSON содержит больше информации, чем таблица.Посмотрите результат

[
  {
    "id": "ef3rutmaas72bsujcja7",
    "folder_id": "b1gfdbij3ijgopgqv9m9",
    "created_at": "2021-06-21T12:41:10Z",
    "name": "my-instance-3",
    "zone_id": "ru-central1-c",
    "platform_id": "standard-v2",
    "resources": {
      "memory": "4294967296",
      "cores": "2",
      "core_fraction": "100"
    },
    "status": "RUNNING",
    "boot_disk": {
      "mode": "READ_WRITE",
      "device_name": "ef3v2lor1u4pfn3ce1al",
      "auto_delete": true,
      "disk_id": "ef3v2lor1u4pfn3ce1al"
    },
    "network_interfaces": [
      {
        "index": "0",
        "mac_address": "d0:0d:1b:f7:6c:a5",
        "subnet_id": "b0c4h992tbuodl5hudpu",
        "primary_v4_address": {
          "address": "10.128.0.32",
          "one_to_one_nat": {
            "address": "178.154.212.5",
            "ip_version": "IPV4"
          }
        }
      }
    ],
    "fqdn": "my-instance-3.ru-central1.internal",
    "scheduling_policy": {},
    "network_settings": {
      "type": "STANDARD"
    },
    "placement_policy": {}
  },
  {
    "id": "epd928ffks7m8ssc4i3k",
    "folder_id": "b1gfdbij3ijgopgqv9m9",
    "created_at": "2021-06-21T12:40:35Z",
    "name": "my-instance-2",
    "zone_id": "ru-central1-b",
    "platform_id": "standard-v2",
    "resources": {
      "memory": "4294967296",
      "cores": "2",
      "core_fraction": "100"
    },
    "status": "RUNNING",
    "boot_disk": {
      "mode": "READ_WRITE",
      "device_name": "epddf7t0ljn9i1jp2pbs",
      "auto_delete": true,
      "disk_id": "epddf7t0ljn9i1jp2pbs"
    },
    "network_interfaces": [
      {
        "index": "0",
        "mac_address": "d0:0d:91:21:ef:a7",
        "subnet_id": "e2l1fgq2fbhnp6b929t7",
        "primary_v4_address": {
          "address": "10.129.0.9",
          "one_to_one_nat": {
            "address": "84.201.176.134",
            "ip_version": "IPV4"
          }
        }
      }
    ],
    "fqdn": "my-instance-2.ru-central1.internal",
    "scheduling_policy": {},
    "network_settings": {
      "type": "STANDARD"
    },
    "placement_policy": {}
  },
  {
    "id": "fhm1op9id0dc6bubfags",
    "folder_id": "b1gfdbij3ijgopgqv9m9",
    "created_at": "2021-06-21T12:39:43Z",
    "name": "my-instance-1",
    "zone_id": "ru-central1-a",
    "platform_id": "standard-v2",
    "resources": {
      "memory": "4294967296",
      "cores": "2",
      "core_fraction": "100"
    },
    "status": "RUNNING",
    "boot_disk": {
      "mode": "READ_WRITE",
      "device_name": "fhmms7r7ia4uteikv1to",
      "auto_delete": true,
      "disk_id": "fhmms7r7ia4uteikv1to"
    },
    "network_interfaces": [
      {
        "index": "0",
        "mac_address": "d0:0d:1c:65:32:68",
        "subnet_id": "e9bcvlanhbum9ggdvkh2",
        "primary_v4_address": {
          "address": "10.130.0.6",
          "one_to_one_nat": {
            "address": "178.154.225.167",
            "ip_version": "IPV4"
          }
        }
      }
    ],
    "fqdn": "my-instance-1.ru-central1.internal",
    "scheduling_policy": {},
    "network_settings": {
      "type": "STANDARD"
    },
    "placement_policy": {}
  }
] 
  1. Чтобы не тратить ресурсы облака понапрасну, в веб-консоли удалите три созданные ВМ: на следующих практических работах они вам не понадобятся.

Свежие комментарии

Подписка

Лучшие статьи


Fatal error: Uncaught Error: Call to a member function have_posts() on null in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php:380 Stack trace: #0 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/widget.php(257): fox56_blog_grid(NULL, Array) #1 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/register.php(33): include('/home/host18670...') #2 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/class-wp-widget.php(394): Wi_Widget_Latest_Posts->widget(Array, Array) #3 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/widgets.php(837): WP_Widget->display_callback(Array, Array) #4 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(417): dynamic_sidebar('sidebar') #5 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(136): fox56_single_sidebar() #6 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(7): fox56_single_inner() #7 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/single.php(23): fox56_single() #8 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/template-loader.php(106): include('/home/host18670...') #9 /home/host1867038/the-devops.ru/htdocs/www/wp-blog-header.php(19): require_once('/home/host18670...') #10 /home/host1867038/the-devops.ru/htdocs/www/index.php(17): require('/home/host18670...') #11 {main} thrown in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php on line 380