Creating an instance group with a Container Optimized Image
To run multiple instances of the service in Docker containers, you can create an instance group from a Container Optimized Image. In such groups, you can update Docker containers with VM metadata using the COI or Docker Compose specification.
Alert
When creating instance groups, keep the limits in mind. Not to disrupt the component Instance Groups, do not update or delete manually created resources: target group Network Load Balancer, VMs, and disks. Instead of this, change or delete the entire group.
By default, all operations in Instance Groups are performed on behalf of a service account. If you don't have a service account, create one.
To create an instance group based on a Container Optimized Image:
-
If you don't have the Nebius Israel command line interface yet, install and initialize it.
-
The folder specified in the CLI profile is used by default. You can specify a different folder using the
--folder-name
or--folder-id
parameter. -
View a description of the CLI command to create an instance group:
CLIyc compute instance-group create --help
-
Check whether there are networks in the folder:
CLIyc vpc network list
If there aren't any, create one.
-
Create a YAML file with a name like
specification.yaml
. -
Find out the ID of the latest version of the public Container Optimized Image.
The Container Optimized Image in the Container Registry can be updated and changed according to releases. This will not automatically update the VM image to the latest version. To create an instance group with the latest Container Optimized Image version, you need to check whether it's available yourself:
CLIMarketplaceyc compute image get-latest-from-family container-optimized-image --folder-id standard-images
Result:
id: <ID of latest COI version> folder_id: standard-images ...
- Go to the page Cloud Marketplace and select the image with the desired configuration:
- Under Product IDs, copy the value of
image_id
.
-
In the
specification.yaml
file you created, specify the following:-
General information about the group:
name: container-optimized-group service_account_id: aje3932acd8a******** description: "This instance group was created from YAML config."
Where:
-
name
: Name of the instance group. The name must be unique within the folder. It may contain lowercase Latin letters, numbers, and hyphens. The first character must be a letter. The last character cannot be a hyphen. The name may not be longer than 63 characters. -
service_account_id
: Service account ID.You cannot delete a service account while it is linked to an instance group.
-
description
: Description of the instance group.
-
-
instance_template: platform_id: standard-v3 resources_spec: memory: 2G cores: 2 boot_disk_spec: mode: READ_WRITE disk_spec: image_id: <ID_of_latest_COI_version> type_id: network-hdd size: 32G network_interface_specs: - network_id: c64mknqgnd8a******** primary_v4_address_spec: {} metadata: docker-container-declaration: |- spec: containers: - name: nginx image: cr.il.nebius.cloud/mirror/nginx:1.17.4-alpine securityContext: privileged: false tty: false stdin: false
By default, the disk size is specified in bytes. You can specify a different unit of measurement using the applicable suffix.
Suffix Prefix and multiplier Example k
kilo- (210) 640k
= 640 × 210 =655360
m
mega- (220) 48m
= 48 × 220 =50331648
g
giga- (230) 10g
= 10 × 230 =10737418240
t
tera- (240) 4t
= 4 × 240 =4398046511104
p
peta- (250) 2p
= 2 × 250 =2251799813685248
Where:
platform_id
: Platform ID.memory
: Amount of RAM.cores
: Number of processor cores (vCPUs).mode
: Disk access mode:READ_ONLY
: Read-only access.READ_WRITE
: Read/write access.
image_id
: ID of the public Container Optimized Image.type_id
: Disk type.size
: Disk size. It must be at least 30 GB.network_id
: ID ofdefault-net
.primary_v4_address_spec
: IPv4 specification. Only IPv4 is currently available. You can allow public access to group instances by specifying the IP version for the public IP address.metadata
: Values to send to the VM metadata.docker-container-declaration
: Key in the VM metadata that is used with the COI specification of the Docker container. In the metadata, you can use the Docker Compose specification. To do this, specify thedocker-compose
key instead of thedocker-container-declaration
key.
-
deploy_policy: max_unavailable: 1 max_expansion: 0 scale_policy: fixed_scale: size: 3 allocation_policy: zones: - zone_id: il1-a instance_tags_pool: - first - second - third
Where:
deploy_policy
: Deployment policy for instances in the group.scale_policy
: Scaling policy for instances in the group.allocation_policy
: Allocation policy of the instances by zone and region.
Full code for the
specification.yaml
file:name: container-optimized-group service_account_id: aje3932acd8a******** description: "This instance group was created from YAML config." instance_template: service_account_id: aje3932acd8a******** # ID of the service account to access private Docker images. platform_id: standard-v3 resources_spec: memory: 2G cores: 2 boot_disk_spec: mode: READ_WRITE disk_spec: image_id: <ID_of_latest_COI_version> type_id: network-hdd size: 32G network_interface_specs: - network_id: c64mknqgnd8a******** primary_v4_address_spec: {} metadata: docker-container-declaration: |- spec: containers: - name: nginx image: cr.il.nebius.cloud/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: il1-a instance_tags_pool: - first - second - third
Note
To use the Docker Compose specification in
specification.yaml
, specify thedocker-compose
key instead of thedocker-container-declaration
key.
-
-
Create an instance group in the default folder:
CLIyc compute instance-group create --file specification.yaml
This command creates a group of three similar instances with the following characteristics:
- Named
container-optimized-group
. - From the latest version of the public Container Optimized Image.
- With a running Docker container based on
cr.il.nebius.cloud/mirror/nginx:1.17.4-alpine
. - In the
default-net
network. - In the
il1-a
availability zone. - With 2 vCPUs and 2 GB of RAM.
- With a 32 GB network HDD.
- Named