Создать группу ВМ с Container Optimized Image
Примечание
В регионе Казахстан доступна только зона доступности kz1-a.
Для запуска нескольких экземпляров сервиса в Docker-контейнерах вы можете создать группу виртуальных машин на базе образа Container Optimized Image. В такой группе обновлять Docker-контейнер можно с помощью метаданных ВМ используя COI или Docker Compose спецификацию.
Внимание
Создавая группы ВМ, учитывайте лимиты. Чтобы не нарушить работу компонента Instance Groups, не изменяйте и не удаляйте вручную созданные им ресурсы: целевую группу Network Load Balancer, ВМ и диски. Вместо этого измените или удалите группу полностью.
По умолчанию все операции в Instance Groups выполняются от имени сервисного аккаунта. Если сервисного аккаунта нет, создайте его.
Чтобы иметь возможность создавать, обновлять и удалять ВМ в группе назначьте сервисному аккаунту роль compute.editor.
Чтобы создать группу ВМ на базе Container Optimized Image:
-
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
-
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду
yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров--folder-nameили--folder-id. -
Посмотрите описание команды CLI для создания группы ВМ:
CLIyc compute instance-group create --help -
Проверьте, есть ли в каталоге сети:
CLIyc vpc network listЕсли нет ни одной сети, создайте ее.
-
Создайте YAML-файл с именем, например,
specification.yaml. -
Узнайте идентификатор последней версии публичного образа Container Optimized Image.
Образ Container Optimized Image в реестре Container Registry может обновляться и меняться в соответствии с релизами. При этом образ на виртуальной машине не обновится автоматически до последней версии. Чтобы создать группу ВМ с последней версией Container Optimized Image, необходимо самостоятельно проверить ее наличие:
CLIYandex Cloud Marketplaceyc compute image get-latest-from-family container-optimized-image --folder-id standard-imagesРезультат:
id: <идентификатор_последней_версии_COI> folder_id: standard-images ...- Перейдите на страницу Cloud Marketplace и выберите образ с нужной конфигурацией:
- Container Optimized Image.
- Container Optimized Image GPU.
- В блоке Идентификаторы продукта скопируйте значение
image_id.
- Перейдите на страницу Cloud Marketplace и выберите образ с нужной конфигурацией:
-
Опишите в YAML-файле
specification.yaml, который вы создали:-
Общую информацию о группе:
name: container-optimized-group service_account_id: <идентификатор_сервисного_аккаунта> description: "This instance group was created from YAML config."Где:
-
name— произвольное имя группы ВМ. Имя должно быть уникальным в рамках каталога. Имя может содержать строчные буквы латинского алфавита, цифры и дефисы. Первый символ должен быть буквой. Последний символ не может быть дефисом. Максимальная длина имени — 63 символа. -
service_account_id— идентификатор сервисного аккаунта.Чтобы иметь возможность создавать, обновлять и удалять ВМ в группе назначьте сервисному аккаунту роль compute.editor.
Сервисный аккаунт нельзя удалить, пока он связан с группой виртуальных машин.
-
description— произвольное описание группы ВМ.
-
-
instance_template: platform_id: standard-v3 resources_spec: memory: 2G cores: 2 boot_disk_spec: mode: READ_WRITE disk_spec: image_id: <идентификатор_последней_версии_COI> type_id: network-hdd size: 32G network_interface_specs: - network_id: c64mknqgnd8a******** primary_v4_address_spec: {} security_group_ids: - enps0ar5s3ti******** placement_policy: placement_group_id: rmppvhrgm77g******** metadata: docker-container-declaration: |- spec: containers: - name: nginx image: cr.yandexcloud.kz/mirror/nginx:1.17.4-alpine securityContext: privileged: false tty: false stdin: falseПо умолчанию размер диска указывается в байтах. Вы можете указать другую единицу измерения с помощью соответствующего суффикса.
Суффикс Приставка и множитель Пример kкило- (210) 640k= 640 × 210 =655360mмега- (220) 48m= 48 × 220 =50331648gгига- (230) 10g= 10 × 230 =10737418240tтера- (240) 4t= 4 × 240 =4398046511104pпета- (250) 2p= 2 × 250 =2251799813685248Где:
platform_id— идентификатор платформы.memory— количество памяти (RAM).cores— количество ядер процессора (vCPU).mode— режим доступа к диску:READ_ONLY— доступ на чтение.READ_WRITE— доступ на чтение и запись.
image_id— идентификатор публичного образа Container Optimized Image.type_id— тип диска.size— размер диска. Должен быть не менее 30 ГБ.network_id— идентификатор сетиdefault-net.primary_v4_address_spec— спецификация версии интернет протокола IPv4. На данный момент доступен только протокол IPv4. Вы можете предоставить публичный доступ к ВМ группы, указав версию IP для публичного IP-адреса.security_group_ids— список идентификаторов групп безопасности.metadata— значения, которые будут переданы в метаданные ВМ.docker-container-declaration— ключ в метаданных ВМ, при котором используется COI спецификация Docker-контейнера. Вы можете использовать в метаданных Docker Compose спецификацию, для этого вместо ключаdocker-container-declarationукажите ключdocker-compose.placement_policy— (опционально) параметры группы размещения ВМ:placement_group_id— идентификатор группы размещения.
-
deploy_policy: max_unavailable: 1 max_expansion: 0 scale_policy: fixed_scale: size: 3 allocation_policy: zones: - zone_id: kz1-a instance_tags_pool: - first - second - thirdГде:
deploy_policy— политика развертывания ВМ в группе.scale_policy— политика масштабирования ВМ в группе.allocation_policy— политика распределения ВМ по зонам доступности.
Полный код файла
specification.yaml:name: container-optimized-group service_account_id: <идентификатор_сервисного_аккаунта> description: "This instance group was created from YAML config." instance_template: service_account_id: <идентификатор_сервисного_аккаунта> # Идентификатор сервисного аккаунта для доступа к приватным Docker-образам. platform_id: standard-v3 resources_spec: memory: 2G cores: 2 boot_disk_spec: mode: READ_WRITE disk_spec: image_id: <идентификатор_последней_версии_COI> type_id: network-hdd size: 32G network_interface_specs: - network_id: c64mknqgnd8a******** primary_v4_address_spec: {} security_group_ids: - enps0ar5s3ti******** placement_policy: placement_group_id: rmppvhrgm77g******** metadata: docker-container-declaration: |- spec: containers: - name: nginx image: cr.yandexcloud.kz/mirror/nginx:1.17.4-alpine securityContext: privileged: false tty: false stdin: false deploy_policy: max_unavailable: 1 max_expansion: 0 scale_policy: fixed_scale: size: 3 allocation_policy: zones: - zone_id: kz1-a instance_tags_pool: - first - second - thirdПримечание
Чтобы использовать в
specification.yamlDocker Compose спецификацию, вместо ключаdocker-container-declarationукажите ключdocker-compose.
-
-
Создайте группу ВМ в каталоге по умолчанию:
CLIyc compute instance-group create --file specification.yamlКоманда создаст группу из трех однотипных ВМ со следующими характеристиками:
- С именем
container-optimized-group. - Из последней версии публичного образа Container Optimized Image.
- С запущенным Docker-контейнером на основе
cr.yandexcloud.kz/mirror/nginx:1.17.4-alpine. - В сети
default-net. - В зоне доступности
kz1-a. - С 2 vCPU и 2 ГБ RAM.
- С сетевым HDD-диском объемом 32 ГБ.
- С именем