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.
Warning
When creating a group, keep the limits in mind. Not to disrupt the component Instance Groups, do not update or delete manually created resources: target group Load Balancer, virtual machines and disks. To do this, update or delete the instance 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 built on a Container Optimized Image:
-
If you don't have the Yandex.Cloud 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 create instance group command in the CLI:
$ yc compute instance-group create --help
-
Check whether there are networks in the folder:
$ yc vpc network list
If there aren't any, create one.
-
Create a YAML file with a name like
specification.yaml
. -
Select the latest version of the Container Optimized Image from the public images.
To get the ID of the latest version of the Container Optimized Image image, run the command:
$ yc compute image get-latest-from-family container-optimized-image --folder-id standard-images id: <image ID> folder_id: standard-images ...
-
In the
specification.yaml
file you created, specify the following:-
General information about the group:
name: container-optimized-group service_account_id: aje3932acd8avp6edhbt description: "This instance group was created from YAML config."
Keys:
Key Value name
A name for the instance group. The name must be unique within the folder. The name may contain lowercase Latin letters, numbers, and hyphens. The first character must be a letter. The last character can't be a hyphen. The maximum length of the name is 63 characters. service_account_id
ID of the service account. description
A description of the instance group. -
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
The disk size is specified in bytes by default. You can specify a different unit of measurement using the applicable suffix.
Name Example of a YAML file entry: Kilobyte 1073741824k Megabyte 1048576m Gigabyte 1024g Terabyte 1t Keys:
Key Value platform_id
Platform ID. memory
Amount of memory (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. network_id
The default-net
ID.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. For more information, see Template description in a YAML file. metadata
Values to pass to the VM metadata. docker-container-declaration
The 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 the docker-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: ru-central1-a
Keys:
Key Value deploy_policy
Deployment policy for instances in the group. scale_policy
Scaling policy for instances in the group. allocation_policy
Policy for allocating instances across zones and regions. Full code for the
specification.yaml
file:name: container-optimized-group service_account_id: aje3932acd8avp6edhbt description: "This instance group was created from YAML config." instance_template: service_account_id: aje3932acd8avp6edhbt # ID of the service account to access private Docker images. 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
Note
To use in
specification.yaml
the Docker Compose specification, specify thedocker-compose
key instead of thedocker-container-declaration
key.
-
-
Create an instance group in the default folder:
$ yc 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.yandex/mirror/nginx:1.17.4-alpine
. - In the
default-net
network. - In the
ru-central1-a
availability zone. - With 2 vCPUs and 2 GB of RAM.
- With a 32 GB network HDD.
- Named