Создать группу ВМ с Container Optimized Image
Для запуска нескольких экземпляров сервиса в Docker-контейнерах вы можете создать группу виртуальных машин на базе образа Container Optimized Image. В такой группе обновлять Docker-контейнер можно с помощью метаданных ВМ используя COI или Docker Compose спецификацию.
Внимание
Создавая группы, учитывайте лимиты. Чтобы не нарушить работу компонента Instance Groups, не изменяйте и не удаляйте вручную созданные им ресурсы: целевую группу Load Balancer, виртуальные машины и диски. Для этого измените или удалите группу полностью.
По умолчанию все операции в Instance Groups выполняются от имени сервисного аккаунта. Если сервисного аккаунта нет, создайте его.
Чтобы создать группу ВМ на базе Container Optimized Image:
-
Если у вас еще нет интерфейса командной строки Yandex.Cloud, установите и инициализируйте его.
-
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра
--folder-name
или--folder-id
. -
Посмотрите описание команды CLI для создания группы ВМ:
CLIyc compute instance-group create --help
-
Проверьте, есть ли в каталоге сети:
CLIyc vpc network list
Если нет ни одной сети, создайте ее.
-
Создайте YAML-файл с именем, например,
specification.yaml
. -
Выберите последнюю версию образа Container Optimized Image из публичных образов.
Узнайте идентификатор последней версии образа Container Optimized Image:
CLIyc compute image get-latest-from-family container-optimized-image --folder-id standard-images id: <ID образа> folder_id: standard-images ...
-
Опишите в YAML-файле
specification.yaml
, который вы создали:-
Общую информацию о группе:
name: container-optimized-group service_account_id: aje3932acd8avp6edhbt description: "This instance group was created from YAML config."
Где:
name
— произвольное имя группы ВМ. Имя должно быть уникальным в рамках каталога. Имя может содержать строчные буквы латинского алфавита, цифры и дефисы. Первый символ должен быть буквой. Последний символ не может быть дефисом. Максимальная длина имени — 63 символа.service_account_id
— идентификатор сервисного аккаунта.description
— произвольное описание группы ВМ.
-
instance_template: platform_id: standard-v1 resources_spec: memory: 2G cores: 2 boot_disk_spec: mode: READ_WRITE disk_spec: image_id: fd81a49qficqvt0dthu8 type_id: network-hdd size: 32G network_interface_specs: - network_id: c64mknqgnd8avp6edhbt primary_v4_address_spec: {} metadata: docker-container-declaration: |- spec: containers: - name: nginx image: cr.yandex/mirror/nginx:1.17.4-alpine securityContext: privileged: false tty: false stdin: false
По умолчанию размер диска указывается в байтах. Вы можете указать другую единицу измерения с помощью соответствующего суффикса.
Название Пример написания в YAML-файле Килобайт 1073741824k Мегабайт 1048576m Гигабайт 1024g Терабайт 1t Где:
platform_id
— идентификатор платформы.memory
— количество памяти (RAM).cores
— количество ядер процессора (vCPU).mode
— режим доступа к диску.
-READ_ONLY
— доступ на чтение.
-READ_WRITE
— доступ на чтение и запись.image_id
— идентификатор публичного образа Container Optimized Image.type_id
— тип диска.size
— размер диска.network_id
— идентификатор сетиdefault-net
.primary_v4_address_spec
— спецификация версии интернет протокола IPv4. На данный момент доступен только протокол IPv4. Вы можете предоставить публичный доступ к ВМ группы, указав версию IP для публичного IP-адреса.metadata
— значения, которые будут переданы в метаданные ВМ.docker-container-declaration
— ключ в метаданных ВМ, при котором используется COI спецификация Docker-контейнера. Вы можете использовать в метаданных Docker Compose спецификацию, для этого вместо ключаdocker-container-declaration
укажите ключdocker-compose
.
-
deploy_policy: max_unavailable: 1 max_expansion: 0 scale_policy: fixed_scale: size: 3 allocation_policy: zones: - zone_id: ru-central1-a
Где:
deploy_policy
— политика развертывания ВМ в группе.scale_policy
— политика масштабирования ВМ в группе.allocation_policy
— политика распределения ВМ по зонам и регионам.
Полный код файла
specification.yaml
:name: container-optimized-group service_account_id: aje3932acd8avp6edhbt description: "This instance group was created from YAML config." instance_template: service_account_id: aje3932acd8avp6edhbt # Идентификатор сервисного аккаунта для доступа к приватным Docker-образам. platform_id: standard-v1 resources_spec: memory: 2G cores: 2 boot_disk_spec: mode: READ_WRITE disk_spec: image_id: fd81a49qficqvt0dthu8 type_id: network-hdd size: 32G network_interface_specs: - network_id: c64mknqgnd8avp6edhbt primary_v4_address_spec: {} metadata: docker-container-declaration: |- spec: containers: - name: nginx image: cr.yandex/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: ru-central1-a
Примечание
Чтобы использовать в
specification.yaml
Docker Compose спецификацию, вместо ключаdocker-container-declaration
укажите ключdocker-compose
.
-
-
Создайте группу ВМ в каталоге по умолчанию:
CLIyc compute instance-group create --file specification.yaml
Команда создаст группу из трех однотипных ВМ со следующими характеристиками:
- С именем
container-optimized-group
. - Из последней версии публичного образа Container Optimized Image.
- С запущенным Docker-контейнером на основе
cr.yandex/mirror/nginx:1.17.4-alpine
. - В сети
default-net
. - В зоне доступности
ru-central1-a
. - С 2 vCPU и 2 ГБ RAM.
- С сетевым HDD-диском объемом 32 ГБ.
- С именем