Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
Yandex Container Solution
  • Сопоставление с другими сервисами Yandex Cloud
  • Начало работы
  • Практические руководства
    • Все руководства
    • Создать ВМ с Container Optimized Image
    • Создать ВМ с Container Optimized Image и дополнительным томом для Docker-контейнера
    • Создать ВМ с Container Optimized Image и несколькими Docker-контейнерами
    • Создать группу ВМ с Container Optimized Image
    • Создать группу ВМ с Container Optimized Image и несколькими Docker-контейнерами
    • Изменить ВМ с Container Optimized Image
    • Настройка вывода информации из Docker-контейнера в серийный порт
    • Создать ВМ и группу ВМ с Container Optimized Image с помощью Terraform
    • Передача логов с COI в Cloud Logging
  • Концепции
    • Образ Container Optimized Image
    • Особенности работы с загрузочным диском
    • Особенности работы с сетью
    • Docker-образ
    • Политики перезапуска Docker-контейнера
    • Спецификации Docker-контейнера
    • Квоты и лимиты
  • Релизы COI
  • Правила тарификации
  • Вопросы и ответы
  • Решение проблем
  1. Практические руководства
  2. Создать ВМ и группу ВМ с Container Optimized Image с помощью Terraform

Создание ВМ и группы ВМ с Container Optimized Image с помощью Terraform

Статья создана
Yandex Cloud
  • Перед началом работы
  • Создание и запуск виртуальной машины с образом Container Optimized Image
    • Создайте файлы конфигурации ВМ
    • Создайте ВМ с Container Optimized Image
  • Создание и запуск группы виртуальных машин с образом Container Optimized Image
    • Создайте файлы конфигурации группы ВМ
    • Создайте группу ВМ с Container Optimized Image

Чтобы с помощью Terraform создать конфигурации и запустить виртуальную машину или группу виртуальных машин на базе образа Container Optimized Image, выполните следующие действия.

Перед началом работы

Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud. В сценарии используется конфигурационный файл с названием example.tf в директории ~/cloud-terraform.

Создание и запуск виртуальной машины с образом Container Optimized Image

Создайте файлы конфигурации ВМ

  1. Используйте образ Container Optimized Image из семейства образов Yandex Cloud. Для этого в конфигурационный файл example.tf добавьте строки:

    data "yandex_compute_image" "container-optimized-image" {
      family = "container-optimized-image"
    }
    
  2. Опишите ВМ, добавив в конфигурационный файл example.tf строки:

    resource "yandex_compute_instance" "instance-based-on-coi" {
      boot_disk {
        initialize_params {
          image_id = data.yandex_compute_image.container-optimized-image.id
        }
      }
      network_interface {
        subnet_id = "<идентификатор подсети>"
        nat = true
      }
      resources {
        cores = 2
        memory = 2
      }
      metadata = {
        docker-container-declaration = file("${path.module}/declaration.yaml")
        user-data = file("${path.module}/cloud_config.yaml")
      }
    }
    

    Где subnet_id — идентификатор подсети.

  3. Создайте файл спецификации облака cloud_config.yaml в директории ~/cloud-terraform. Опишите спецификацию:

    #cloud-config
    ssh_pwauth: no
    users:
      - name: yc-user
        sudo: ALL=(ALL) NOPASSWD:ALL
        shell: /bin/bash
        ssh_authorized_keys:
          - "<публичный SSH-ключ>"
    

    Где ssh_authorized_keys — значение публичного SSH-ключа.

  4. Создайте файл спецификации Container Optimized Image с именем declaration.yaml в директории ~/cloud-terraform. Опишите спецификацию:

    spec:
      containers:
      - image: cr.yandex/yc/demo/coi:v1
        securityContext:
          privileged: false
        stdin: false
        tty: false
    
  5. Создайте файл output.tf в директории ~/cloud-terraform, чтобы отобразить публичный IP-адрес ВМ:

    output "external_ip" {
      value = yandex_compute_instance.instance-based-on-coi.network_interface.0.nat_ip_address
    }
    

Создайте ВМ с Container Optimized Image

Запустите ВМ с Container Optimized Image, используя конфигурацию Terraform.

CLI
  1. Проверьте корректность конфигурационных файлов.

    1. В командной строке перейдите в директорию ~/cloud-terraform с конфигурационными файлами:

      cd /Users/<имя пользователя>/cloud-terraform
      
    2. Выполните проверку с помощью команды:

      terraform plan
      

      Результат:

      Refreshing Terraform state in-memory prior to plan...
      The refreshed state will be used to calculate this plan, but will not be
      persisted to local or remote state storage.
      ...
      Note: You didn't specify an "-out" parameter to save this plan, so Terraform
      can't guarantee that exactly these actions will be performed if
      "terraform apply" is subsequently run.
      
  2. Разверните ресурсы в Yandex Cloud.

    1. Выполните команду:

      terraform apply
      

      Результат:

      data.yandex_compute_image.container-optimized-image: Refreshing state...
      
      An execution plan has been generated and is shown below.
      Resource actions are indicated with the following symbols:
      ...
        Terraform will perform the actions described above.
        Only 'yes' will be accepted to approve.
      
        Enter a value:
      
    2. Подтвердите создание ресурсов. Для этого введите значение yes:

      Enter a value: yes
      

      Результат:

      yandex_compute_instance.instance-based-on-coi: Creating...
      yandex_compute_instance.instance-based-on-coi: Still creating... [10s elapsed]
      yandex_compute_instance.instance-based-on-coi: Still creating... [20s elapsed]
      ...
      Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
      
      Outputs:
      
      external_ip = <публичный IP-адрес>
      

      В каталоге будут созданы требуемые ресурсы. При создании ВМ назначаются публичный IP-адрес и имя хоста (FQDN).

  3. Проверьте ресурсы и их настройки в консоли управления.

  4. Подключитесь к ВМ с образом Container Optimized Image.

    1. Выполните команду:

      ssh yc-user@<публичный IP-адрес>
      

      Результат:

      The authenticity of host '<публичный IP-адрес> (<публичный IP-адрес>)' can't be established.
      ECDSA key fingerprint is SHA256:JPq....
      Are you sure you want to continue connecting (yes/no/[fingerprint])?
      
    2. Подтвердите подключение к ВМ. Для этого введите значение yes:

      Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
      

      Результат:

      Warning: Permanently added '<публичный IP-адрес>' (ECDSA) to the list of known hosts.
      Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-52-generic x86_64)
      
       * Documentation:  https://help.ubuntu.com
      ...
      Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
      applicable law.
      
  5. Выполните HTTP-запрос к ВМ:

    curl <публичный IP-адрес>
    

    Результат:

    <!DOCTYPE html>
    <html lang="en">
    <head>
     <meta http-equiv="refresh" content="3">
      <title>Yandex.Scale</title>
    </head>
    <body>
    <h1>Hello v1</h1>
    </body>
    </html>
    

Создание и запуск группы виртуальных машин с образом Container Optimized Image

Создайте файлы конфигурации группы ВМ

  1. Сохраните конфигурационный файл с именем example.tf в директории ~/cloud-terraform:

    provider "yandex" {
      token     = "<OAuth-токен>"
      cloud_id  = "<идентификатор облака>"
      folder_id = "<идентификатор каталога>"
      zone      = "ru-central1-a"
    }
    data "yandex_compute_image" "container-optimized-image" {
      family = "container-optimized-image"
    }
    resource "yandex_compute_instance_group" "ig-with-coi" {
      name = "ig-with-coi"
      folder_id = "<идентификатор каталога>"
      service_account_id = "<идентификатор сервисного аккаунта>"
      instance_template {
        platform_id = "standard-v3"
        resources {
          memory = 2
          cores  = 2
        }
        boot_disk {
          mode = "READ_WRITE"
          initialize_params {
            image_id = data.yandex_compute_image.container-optimized-image.id
          }
        }
        network_interface {
          network_id = "<идентификатор сети>"
          subnet_ids = ["<идентификаторы подсетей>"]
          nat = true
        }
        metadata = {
          docker-container-declaration = file("${path.module}/declaration.yaml")
          user-data = file("${path.module}/cloud_config.yaml")
        }
        service_account_id = "<идентификатор сервисного аккаунта>"
      }
      scale_policy {
        fixed_scale {
          size = 2
        }
      }
      allocation_policy {
        zones = ["<зоны доступности>"]
      }
      deploy_policy {
        max_unavailable = 2
        max_creating = 2
        max_expansion = 2
        max_deleting = 2
      }
    }
    

    Где:

    • token — OAuth-токен для доступа к Yandex Cloud.
    • name — имя группы ВМ.
    • folder_id — идентификатор каталога.
    • instance_template.network_interface.network_id — идентификатор сети.
    • instance_template.network_interface.subnet_ids — список идентификаторов подсетей.
    • instance_template.service_account_id — идентификатор сервисного аккаунта, авторизованного для данной группы ВМ.
    • allocation_policy.zones — список зон доступности.
  2. Используйте файлы cloud_config.yaml и declaration.yaml из раздела Создайте файлы конфигурации ВМ.

  3. Создайте файл output.tf в директории ~/cloud-terraform, чтобы отобразить публичные IP-адреса каждой ВМ из группы:

    output "external_ip" {
     value = [yandex_compute_instance_group.ig-with-coi.instances[*].network_interface[0].nat_ip_address]
    }
    

Создайте группу ВМ с Container Optimized Image

Запустите группу ВМ с Container Optimized Image, используя конфигурацию Terraform.

CLI
  1. Проверьте корректность конфигурационных файлов.

    1. В командной строке перейдите в директорию ~/cloud-terraform с конфигурационными файлами:

      cd /Users/<имя пользователя>/cloud-terraform
      
    2. Выполните проверку с помощью команды:

      terraform plan
      

      Результат:

      Refreshing Terraform state in-memory prior to plan...
      The refreshed state will be used to calculate this plan, but will not be
      persisted to local or remote state storage.
      ...
      Note: You didn't specify an "-out" parameter to save this plan, so Terraform
      can't guarantee that exactly these actions will be performed if
      "terraform apply" is subsequently run.
      
  2. Разверните ресурсы в Yandex Cloud.

    1. Выполните команду:

      terraform apply
      

      Результат:

      data.yandex_compute_image.container-optimized-image: Refreshing state...
      
      An execution plan has been generated and is shown below.
      Resource actions are indicated with the following symbols:
      ...
        Terraform will perform the actions described above.
        Only 'yes' will be accepted to approve.
      
        Enter a value:
      
    2. Подтвердите создание ресурсов. Для этого введите значение yes:

      Enter a value: yes
      

      Результат:

      yandex_compute_instance_group.ig-with-coi: Creating...
      yandex_compute_instance_group.ig-with-coi: Still creating... [10s elapsed]
      yandex_compute_instance_group.ig-with-coi: Still creating... [20s elapsed]
      ...
      external_ip = [
        [
          "<публичный IP-адрес ВМ1>",
          "<публичный IP-адрес ВМ2>",
        ],
      ]
      

      В каталоге будут созданы требуемые ресурсы. При создании каждой ВМ назначаются публичный IP-адрес и имя хоста (FQDN).

  3. Проверьте ресурсы и их настройки в консоли управления.

  4. Подключитесь к одной из ВМ с образом Container Optimized Image.

    1. Выполните команду:

      ssh yc-user@<публичный IP-адрес ВМ1>
      

      Результат:

      The authenticity of host '<публичный IP-адрес ВМ1> (<публичный IP-адрес ВМ1>)' can't be established.
      ECDSA key fingerprint is SHA256:JPq....
      Are you sure you want to continue connecting (yes/no/[fingerprint])?
      
    2. Подтвердите подключение к ВМ. Для этого введите значение yes:

      Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
      

      Результат:

      Warning: Permanently added '<публичный IP-адрес ВМ1>' (ECDSA) to the list of known hosts.
      Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-52-generic x86_64)
      
       * Documentation:  https://help.ubuntu.com
      ...
      Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
      applicable law.
      
  5. Выполните HTTP-запрос к одной из ВМ группы:

    curl <публичный IP-адрес ВМ1>
    

    Результат:

    <!DOCTYPE html>
    <html lang="en">
    <head>
     <meta http-equiv="refresh" content="3">
      <title>Yandex.Scale</title>
    </head>
    <body>
    <h1>Hello v1</h1>
    </body>
    </html>
    

Была ли статья полезна?

Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
В этой статье:
  • Перед началом работы
  • Создание и запуск виртуальной машины с образом Container Optimized Image
  • Создайте файлы конфигурации ВМ
  • Создайте ВМ с Container Optimized Image
  • Создание и запуск группы виртуальных машин с образом Container Optimized Image
  • Создайте файлы конфигурации группы ВМ
  • Создайте группу ВМ с Container Optimized Image