Создание группы виртуальных машин с Container Optimized Image и несколькими Docker-контейнерами
Вы можете создать группу виртуальных машин на базе образа Container Optimized Image с несколькими Docker-контейнерами внутри.
Для создания Docker-контейнеров будет использоваться Docker Compose спецификация.
Внимание
Создавая группы ВМ, учитывайте лимиты. Чтобы не нарушить работу компонента Instance Groups, не изменяйте и не удаляйте вручную созданные им ресурсы: целевую группу Network Load Balancer, ВМ и диски. Вместо этого измените или удалите группу полностью.
Перед началом работы
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Подготовьте окружение
-
Создайте сервисный аккаунт с именем
group-coi
и назначьте ему рольeditor
:Консоль управленияCLIAPI- В консоли управления
выберите каталог, в котором вы хотите создать сервисный аккаунт. - В списке сервисов выберите Identity and Access Management.
- Нажмите кнопку Создать сервисный аккаунт.
- Введите имя
group-coi
. - Чтобы назначить сервисному аккаунту роль на текущий каталог, нажмите Добавить роль и выберите роль
editor
. - Нажмите кнопку Создать.
-
Создайте сервисный аккаунт:
yc iam service-account create --name group-coi
Результат:
id: ajeabccde01d******** folder_id: b0g12ga82bcv******** created_at: "2023-03-13T14:32:18.900092Z" name: group-coi
-
Назначьте роль сервисному аккаунту:
yc resource-manager folder add-access-binding b0g12ga82bcv******** \ --role editor \ --subject serviceAccount:ajeabccde01d********
Воспользуйтесь методом Create для ресурса
ServiceAccount
. - В консоли управления
-
Создайте сеть с именем
yc-auto-network
и подсеть в одной зоне доступности:Консоль управленияCLIAPI- В консоли управления
выберите каталог, в котором вы хотите создать сеть. - Выберите сервис Virtual Private Cloud.
- Нажмите кнопку Создать сеть.
- Задайте имя сети
yc-auto-network
. - Выберите дополнительную опцию Создать подсети.
- Нажмите кнопку Создать сеть.
-
Создайте сеть:
yc vpc network create --name yc-auto-network
Результат:
id: enpabce123hd******** folder_id: b0g12ga82bcv******** created_at: "2023-03-13T14:57:15Z" name: yc-auto-network
-
Создайте подсеть в зоне доступности
ru-central1-a
:yc vpc subnet create --network-id enpabce123hd******** --range 192.168.1.0/24 --zone ru-central1-a
Результат:
id: e1lnabc23r1c******** folder_id: b0g12ga82bcv******** created_at: "2023-03-13T16:23:12Z" network_id: enpabce123hd******** zone_id: ru-central1-a v4_cidr_blocks: - 192.168.1.0/24
- В консоли управления
Создайте группу ВМ с Container Optimized Image и несколькими Docker-контейнерами
-
Узнайте идентификатор последней версии публичного образа 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 и выберите образ с нужной конфигурацией:
- В блоке Идентификаторы продукта скопируйте значение
image_id
.
-
Сохраните спецификацию группы ВМ с Container Optimized Image и несколькими Docker-контейнерами в файл
specification.yaml
:name: group-coi-containers # Имя группы ВМ, уникальным в рамках каталога. service_account_id: ajeabccde01d******** # Идентификатор сервисного аккаунта. instance_template: service_account_id: ajeabccde01d******** # Идентификатор сервисного аккаунта для доступа к приватным Docker-образам. platform_id: standard-v3 # Идентификатор платформы. resources_spec: memory: 2G # Количество памяти (RAM). cores: 2 # Количество ядер процессора (vCPU). boot_disk_spec: mode: READ_WRITE # Режим доступа к диску: чтение и запись. disk_spec: image_id: <идентификатор_последней_версии_COI> type_id: network-hdd # Тип диска. size: 32G # Размер диска. Должен быть не менее 30 ГБ. network_interface_specs: - network_id: enpabce123hd******** # Идентификатор сети. subnet_ids: - e1lnabc23r1c******** # Идентификатор подсети. primary_v4_address_spec: { one_to_one_nat_spec: { ip_version: IPV4 # Спецификация версии интернет-протокола IPv4 для публичного доступа к ВМ. } } metadata: # Значения, которые будут переданы в метаданные ВМ. docker-compose: |- # Ключ в метаданных ВМ, при котором используется Docker Compose спецификация. version: '3.7' services: app1: container_name: nginx image: "nginx" ports: - "80:80" restart: always app2: container_name: redis image: "redis" restart: always ssh-keys: | # Параметр для передачи SSH-ключа на ВМ. yc-user:ssh-ed25519 ABC...d01 user@desktop.ru # Имя пользователя для подключения к ВМ. deploy_policy: # Политика развертывания ВМ в группе. max_unavailable: 1 max_expansion: 0 scale_policy: # Политика масштабирования ВМ в группе. fixed_scale: size: 2 allocation_policy: # Политика распределения ВМ по зонам доступности. zones: - zone_id: ru-central1-a
Примечание
Передать SSH-ключ в метаданных ВМ можно с помощью параметра
ssh-keys
или в строке с пользовательскими метаданнымиuser-data
. В этом практическом руководстве используется первый вариант. -
Создайте группу ВМ с именем
group-coi-containers
с помощью спецификацииspecification.yaml
:CLIAPIВыполните команду:
yc compute instance-group create --file=specification.yaml
Результат:
done (48s) id: cl0q12abcd4e******** folder_id: b0g12ga82bcv******** ... target_size: "2" service_account_id: ajeabccde01d******** status: ACTIVE
Воспользуйтесь методом CreateFromYaml для ресурса
InstanceGroup
. -
Убедитесь, что группа ВМ с Container Optimized Image и несколькими Docker-контейнерами создана:
Консоль управленияCLIAPI- В консоли управления
выберите каталог, в котором вы создали группу ВМ. - Выберите сервис Compute Cloud.
- Перейдите в раздел Группы виртуальных машин.
- Нажмите на имя группы ВМ
group-coi-containers
.
yc compute instance-group list-instances group-coi-containers
Результат:
+----------------------+---------------------------+----------------------------------+-------------+------------------------+----------------+ | INSTANCE ID | NAME | EXTERNAL IP | INTERNAL IP | STATUS | STATUS MESSAGE | +----------------------+---------------------------+----------------------------------+-------------+------------------------+----------------+ | fhmabcv0de12******** | cl0q12abcs4g********-fmar | 84.201.155.117 | 10.130.0.14 | RUNNING_ACTUAL [2h35m] | | | fhmab0cdqj12******** | cl0q12abcs4g********-fqeg | 84.252.131.221 | 10.130.0.47 | RUNNING_ACTUAL [2h35m] | | +----------------------+---------------------------+----------------------------------+-------------+------------------------+----------------+
Посмотрите список созданных ВМ с помощью метода List для ресурса
InstanceGroup
. - В консоли управления
Проверьте группу ВМ с Container Optimized Image и несколькими Docker-контейнерами
-
Подключитесь к одной из созданных ВМ по SSH:
CLIssh yc-user@84.201.155.117
Результат:
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-54-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage Last login: Mon Mar 13 15:23:28 2023 from 123.456.789.101
-
Посмотрите список запущенных на ВМ Docker-контейнеров:
CLIsudo docker ps -a
Результат:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c0a125a1765a redis "docker-entrypoint.s…" About a minute ago Up About a minute 6379/tcp redis 01288d7e382f nginx "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp nginx