Yandex Clouds - CLI

Начало работы с интерфейсом командной строки

https://cloud.yandex.ru/docs/cli/quickstart


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


https://practicum.yandex.ru/trainer/ycloud/lesson/f5ef7735-66df-432c-ab99-2057874be107/


Создаем сеть

$ yc vpc network create --name my-network


Создаем три подсети в разных зонах доступности


$ 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


Создаем 3 ВМ в нужных зонах доступности и привязываем их к подсети.


$ 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


// Проверка статуса операции
$ yc operation get c9q9v4bsn1hs9api4b1

// Подождать завершения операции
$ yc operation wait c9q9v4bsn1hs9api4b13


// Убедитесь, что ВМ созданы
$ yc compute instance list


+----------------------+---------------+---------------+---------+---------------+--------------+
|          ID          |     NAME      |    ZONE ID    | STATUS  |  EXTERNAL IP  | INTERNAL IP  |
+----------------------+---------------+---------------+---------+---------------+--------------+
| ef3f7j9c5eojq5adlb88 | my-instance-3 | ru-central1-c | RUNNING | 130.193.57.56 | 192.168.3.12 |
| epdut6e50qi40er9051f | my-instance-2 | ru-central1-b | RUNNING | 51.250.29.39  | 192.168.2.12 |
| fhmn7928s6uu2p0ds2am | my-instance-1 | ru-central1-a | RUNNING | 51.250.4.215  | 192.168.1.16 |
+----------------------+---------------+---------------+---------+---------------+--------------+


// Вывод в json формате
$ yc compute instance list --format json


Чтобы не тратить ресурсы облака понапрасну, в веб-консоли удалите три созданные ВМ: на следующих практических работах они вам не понадобятся.


02. Практическая работа. Использование файлов спецификаций


// Создать сервисный аккаунт yandex
$ yc iam service-account create --name my-robot \
    --description "this is my favorite service account"


$ yc iam service-account list


// DELETE
// $ yc iam service-account delete my-robot


// Получить список стандартных image
$ yc compute image list --folder-id standard-images


name: my-group
service_account_id: ajeu495h1s9tn1rorulb

instance_template:
    platform_id: standard-v1
    resources_spec:
        memory: 2g
        cores: 2
    boot_disk_spec:
        mode: READ_WRITE
        disk_spec:
            image_id: fd8fosbegvnhj5haiuoq
            type_id: network-hdd
            size: 32g
    network_interface_specs:
        - network_id: enpnr4onfs6ihtoao32u
          primary_v4_address_spec: { one_to_one_nat_spec: { ip_version: IPV4 }}
    scheduling_policy:
        preemptible: false
    metadata:
      user-data: |-
        #cloud-config
          package_update: true
          runcmd:
            - [ apt-get, install, -y, nginx ]
            - [/bin/bash, -c, 'source /etc/lsb-release; sed -i "s/Welcome to nginx/It is $(hostname) on $DISTRIB_DESCRIPTION/" /var/www/html/index.nginx-debian.html']

deploy_policy:
    max_unavailable: 1
    max_expansion: 0
scale_policy:
    fixed_scale:
        size: 3
allocation_policy:
    zones:
        - zone_id: ru-central1-a

load_balancer_spec:
    target_group_spec:
        name: my-target-group


$ yc compute instance-group create --file specification.yaml


$ yc compute instance-group list


Часть 2. Балансировщик


$ yc load-balancer network-load-balancer create --region-id ru-central1 --name my-load-balancer --listener name=my-listener,external-ip-version=ipv4,port=80


$ yc load-balancer target-group list


yc load-balancer network-load-balancer attach-target-group b7r97ah2jn5rmo6k1dsk   --target-group target-group-id=b7r7cmdopr7bejtmj7dt,healthcheck-name=test-health-check,healthcheck-interval=2s,healthcheck-timeout=1s,healthcheck-unhealthythreshold=2,healthcheck-healthythreshold=2,healthcheck-http-port=80


Часть 3. Доступ к машинам группы

$ yc load-balancer network-load-balancer target-states b7rkqsnocbl7vgrbv6br --target-group-id b7r675m18nf06i36erd5


Часть 4. Обновление Instance Group

...
boot_disk_spec:
   mode: READ_WRITE
   disk_spec:
       image_id: fd87uq4tagjupcnm376a
       type_id: network-hdd
       size: 32g
...


$ yc compute instance-group update --name my-group --file specification.yaml
...
deploy_policy:
    max_unavailable: 1
    max_expansion: 0
...


Или

… deploy_policy: max_unavailable: 0 max_expansion: 1 …


Часть 5. Удаление машины из группы

$ yc compute instance delete fhmraoik1u9ur4mj0u6q


Часть 6. Удаление Instance Group

$ yc compute instance-group delete --name my-group

$ yc load-balancer network-load-balancer delete --name my-load-balancer