• Главная
  • DataScience
  • CloudServicesEngineer
  • Поиск
Data Science

KDO. Контейнеризация

Контейнеризация

Кратко:

  • Виртуальные машины (ВМ) обеспечивают изолированную среду для приложений, но расходуют ресурсы сервера неэффективно.
  • Контейнеризация использует ресурсы хостовой ОС, экономя их и обеспечивая совместную работу нескольких контейнеров на одном сервере.
  • Контейнеры изолированы от других контейнеров и хостовой ОС, могут содержать различные приложения и работать на разных платформах.
  • Принцип "один контейнер - один сервис" упрощает обновление приложений и создание резервных копий.
  • Слоистая архитектура контейнеров позволяет оптимизировать использование ресурсов хоста и экономить место.
  • Контейнеры обеспечивают независимость, переносимость и ускоренную работу приложений.
  • Тиражирование и масштабирование упрощают развертывание и управление контейнерами.
  • Оркестрация позволяет управлять множеством контейнеров, координируя их работу.

Контейнеризация

Мы много говорили о пользе виртуальных машин. Они предоставляют изолированную среду, в которой приложения гарантированно работают, и поэтому упрощают перенос и тиражирование приложений.
Но у ВМ есть и недостаток: они создают рабочую среду полностью, включая операционную систему (ОС) и весь установленный на ней софт. Когда на одном сервере создаются несколько ВМ, каждая запускает свои отдельные экземпляры ОС и прочих приложений. В результате ресурсы сервера — вычислительная мощность процессора, дисковое пространство и т. д. — расходуются неэффективно.

Новое решение: контейнеризация

Главное и принципиальное отличие контейнера от ВМ в том, что он использует ресурсы и ядро хостовой ОС. Несколько контейнеров, размещённых на одном сервере, используют ресурсы сервера совместно, тем самым экономя их.
image
Так же, как и ВМ, контейнер изолирован от других контейнеров и хостовой ОС. Он может содержать различные приложения и запускаться на различных платформах.
Хорошей практикой считается принцип «один контейнер — один сервис». Так проще обновлять приложения и создавать резервные копии. Например, если вы написали для веб-сервера NGINX веб-приложение на Python, поместите сервер и приложение в отдельные контейнеры.

Слоистая архитектура контейнеров

Говоря о контейнерах, часто употребляют термин слой. Любое изменение окружения — установка программы, создание директории — создаёт новый слой. Эти слои накладываются друг на друга.
Если на одном сервере оказываются несколько контейнеров с общими слоями (например, библиотеками), то слои не дублируются: они устанавливаются один раз и затем используются совместно.

Преимущества контейнеров

С контейнерами разработка стала эффективнее и проще. Чем же они хороши?
  • Экономия ресурсов. Во-первых, контейнеры занимают меньший объём, чем ВМ: они не содержат отдельных копий ОС и дополнительных программ и утилит. Во-вторых, благодаря общим слоям контейнеры оптимизируют использование ресурсов хоста.
  • Независимость. Контейнер самодостаточен. Всё, что нужно для работы (библиотеки, настройки, среда запуска), находится внутри.
  • Переносимость. Контейнер независим. Платформа, на которой его запускают, неважна: он везде будет работать одинаково. Можно спокойно переносить контейнер с одной платформы на другую.
  • Скорость разворачивания контейнеров и работы в них. Это преимущество следует из предыдущих. Сервер не тратит время на эмуляцию гостевой ОС, а высвободившиеся ресурсы можно направить на увеличение производительности приложений и сервисов.
  • Тиражирование и масштабирование. Собрали контейнер однажды — копируйте его сколько угодно раз. Запускайте одновременно нужное количество копий контейнера. Всё будет работать одинаково.
  • Оркестрация. Дирижёр одновременно управляет множеством музыкантов, играющих на разных инструментах. Вы можете создавать похожие системы из контейнеров, каждый из которых выполняет узкую задачу. Оркестрация — это управление такими системами, т. е. координация работы множества контейнеров. Подробнее о ней мы поговорим на следующих уроках.
Проверьте себя
 
Контейнеризация эффективна, потому что:
 
правильный ответ:
  • оптимально использует ресурсы системы

 

 

 

Категория: Cloud Services Engineer
Просмотров: 652

T. ПР. Создаём виртуальную машину из образа и базу данных

Практическая работа. Создаём виртуальную машину из образа и базу данных

Кратко:

  • Создание кластера PostgreSQL с помощью Terraform и Yandex Cloud.
  • Установка и настройка Terraform для работы с Yandex Cloud.
  • Создание виртуальной машины и базы данных с использованием образа, созданного с помощью Packer.
  • Использование переменных в спецификации Terraform для создания разных конфигураций.
  • Создание сети и подсети с использованием Yandex Cloud.
  • Применение обновленной спецификации для создания кластера PostgreSQL.
  • Удаление инфраструктуры с использованием Terraform.

Практическая работа. Создаём виртуальную машину из образа и базу данных

В этой практической работе вы установите Terraform и подготовите спецификацию, с помощью которой создадите виртуальную машину, а затем управляемую базу данных.
Подсказки для создания спецификации смотрите в документации Yandex Cloud и в справочнике ресурсов (раздел Resources).
  1. Установите Terraform. Дистрибутив для вашей платформы можно скачать из зеркала. После загрузки добавьте путь к папке, в которой находится исполняемый файл, в переменную PATH.
    Настройте провайдер.
    Для Linux: Скачать бинарный файл  сдесь.
    Распоковать в папку /home/administrator/terraform. 
    
    Перейти в папку 
    cd /home/administrator/terraform
    
    Переместите распакованный файл в папку /usr/local/bin:
    sudo mv terraform /usr/local/bin/
    
    Установите разрешения
    chmod +x /usr/local/bin/terraform
    
    Проверьте установку Terraform
    terraform version
    
    Настройка переменных среды
    echo 'export PATH=$PATH:/usr/local/bin' >> ~/.bashrc
    source ~/.bashrc
    
    
  2. Создайте файл спецификации my-config.tf и укажите в нём Yandex Cloud в качестве провайдера.
     terraform {
       required_providers {
         yandex = {
           source = "yandex-cloud/yandex"
         }
       }
     }
      
     provider "yandex" {
       token  =  "<OAuth-токен>"
       cloud_id  = "<идентификатор_облака>"
       folder_id = "<идентификатор_каталога>"
       zone      = "<зона_доступности_по_умолчанию>"
     } 
     
    Далее мы будем считать, что в качестве зоны доступности по умолчанию выбрана ru-central1-a.
  3. Добавьте в файл блок, описывающий создание ВМ. Его сложно написать с нуля, поэтому опирайтесь на пример из документации. Чтобы вам было проще опознать в консоли управления объекты, созданные по этой спецификации, указывайте уникальные имена для ВМ, сети и подсети, а не оставляйте имена по умолчанию (default).
  4. Для создания ВМ используйте образ, созданный с помощью Packer в предыдущей практической работе.
    Можно использовать переменные в спецификации Terraform и передавать в них разные значения при запуске команд. Например, если сделать переменную для идентификатора образа image-id, тогда с помощью одного и того же файла спецификации вы сможете создавать ВМ с разным наполнением.
    Переменные Terraform хранятся в файлах с расширением .tfvars. Создайте файл my-variables.tfvars и укажите в нём идентификатор своего образа Packer (узнайте идентификатор с помощью команды yc compute image list):
    image-id = "<идентификатор_образа>"
     
    В файле спецификации my-config.tf объявите эту переменную (ключевое слово variable). Тогда в секции, где описываются настройки ВМ, вы сможете обратиться к переменной как var.image-id:
    ...
     variable "image-id" {
         type = string
     }
     
     resource "yandex_compute_instance" "vm-1" {
     ...   
     
         boot_disk {
             initialize_params {
                 image_id = var.image-id
             }
         }
     ...
     
  5. Скорректируйте описание для сети и подсети.
    Для сети достаточно указать имя:
      resource "yandex_vpc_network" "network-1" {
          name = "from-terraform-network"
      } 
     
    Для подсети укажите зону доступности и сеть, а также внутренние IP-адреса, уникальные в рамках сети. Используйте адреса из адресного пространства 10.0.0.0/16.
      resource "yandex_vpc_subnet" "subnet-1" {
          name           = "from-terraform-subnet"
          zone           = "ru-central1-a"
          network_id     = "${yandex_vpc_network.network-1.id}"
          v4_cidr_blocks = ["10.2.0.0/16"]
      } 
    Проверьте синтаксис спецификации:
    variable "image-id" {
      type = string
    }
     
    resource "yandex_compute_instance" "vm-1" {
      name = "from-terraform-vm"
      platform_id = "standard-v1"
      zone = "ru-central1-a"
     
      resources {
        cores  = 2
        memory = 2
      }
     
      boot_disk {
        initialize_params {
          image_id = var.image-id
        }
      }
     
      network_interface {
        subnet_id = yandex_vpc_subnet.subnet-1.id
        nat       = true
      }
     
      metadata = {
        ssh-keys = "ubuntu:${file("~/.ssh/id_rsa.pub")}"
      }
    }
     
    resource "yandex_vpc_network" "network-1" {
      name = "from-terraform-network"
    }
     
    resource "yandex_vpc_subnet" "subnet-1" {
      name           = "from-terraform-subnet"
      zone           = "ru-central1-a"
      network_id     = "${yandex_vpc_network.network-1.id}"
      v4_cidr_blocks = ["10.2.0.0/16"]
    }
     
    output "internal_ip_address_vm_1" {
      value = yandex_compute_instance.vm-1.network_interface.0.ip_address
    }
     
    output "external_ip_address_vm_1" {
      value = yandex_compute_instance.vm-1.network_interface.0.nat_ip_address
    }
 
  1. Теперь попробуйте применить спецификацию. Перейдите в папку с файлом спецификации и выполните инициализацию.
    terraform init
     
    Если всё сделано верно, Terraform покажет сообщение:
    ...
     Terraform has been successfully initialized!
    ...
    Важно: выполняйте команды Terraform в папке, где находится файл спецификации.
  2. Проверьте спецификацию с помощью команды terraform plan.
    Terraform использует все файлы .tf из папки, в которой запущена команда. Поэтому название файла спецификации my-config.tf указывать не нужно: его Terraform подхватит и так.
    Если файл с переменными называется стандартно (terraform.tfvars), его тоже можно не указывать при запуске команды. А если название файла нестандартное, то его нужно указывать:
    terraform plan -var-file=my-variables.tfvars
     
    Terraform выведет план: объекты, которые будут созданы, и т. п.:
     ...
     Terraform will perform the following actions:
     ... 
     
    На самом деле необязательно помещать переменные в файл, их можно просто указывать при запуске команды. Поскольку у вас только одна переменная, это было бы несложно:
    terraform plan -var="image-id=<идентификатор_образа>"
  3. Создайте в облаке инфраструктуру по описанной вами спецификации. Выполните команду:
    terraform apply -var-file=my-variables.tfvars
     
    Terraform запросит подтверждение:
     ...
     Do you want to perform these actions?
          Terraform will perform the actions described above.
          Only 'yes' will be accepted to approve.
          
          Enter a value: 
     
    В ответ введите yes.
    Когда команда будет выполнена, вы увидите сообщение:
      Apply complete! Resources: ... added, 0 changed, 0 destroyed.
       
      Outputs:
    
      external_ip_address_vm_1 = "84.201.133.49"
      internal_ip_address_vm_1 = "10.2.0.24" 
     
  4. В консоли управления убедитесь, что ВМ создана. Откройте в браузере страницу с указанным IP-адресом и проверьте, доступна ли ВМ.
  5. Как мы говорили на предыдущем уроке, Terraform хранит описание инфраструктуры в стейт-файлах. Посмотрите, как выглядит стейт-файл сейчас:
    terraform state list
     
    Вы увидите список объектов:
     yandex_compute_instance.vm-1
     yandex_vpc_network.network-1
     yandex_vpc_subnet.subnet-1 
     
  6. Теперь добавьте в файл спецификации блок, описывающий создание кластера БД PostgreSQL. Подсказки ищите в справочнике ресурсов. Не забудьте заменить в спецификации имя подсети.

Проверьте синтаксис спецификации:

resource "yandex_mdb_postgresql_cluster" "postgres-1" {
  name        = "postgres-1"
  environment = "PRESTABLE"
  network_id  = yandex_vpc_network.network-1.id
 
  config {
    version = 12
    resources {
      resource_preset_id = "s2.micro"
      disk_type_id       = "network-ssd"
      disk_size          = 16
    }
    postgresql_config = {
      max_connections                   = 395
      enable_parallel_hash              = true
      vacuum_cleanup_index_scale_factor = 0.2
      autovacuum_vacuum_scale_factor    = 0.34
      default_transaction_isolation     = "TRANSACTION_ISOLATION_READ_COMMITTED"
      shared_preload_libraries          = "SHARED_PRELOAD_LIBRARIES_AUTO_EXPLAIN,SHARED_PRELOAD_LIBRARIES_PG_HINT_PLAN"
    }
  }
 
  database {
    name  = "postgres-1"
    owner = "my-name"
  }
 
  user {
    name       = "my-name"
    password   = "Test1234"
    conn_limit = 50
    permission {
      database_name = "postgres-1"
    }
    settings = {
      default_transaction_isolation = "read committed"
      log_min_duration_statement    = 5000
    }
  }
 
  host {
    zone      = "ru-central1-a"
    subnet_id = yandex_vpc_subnet.subnet-1.id
  }
}
Сохраните файл спецификации.

Проверьте синтаксис спецификации:

terraform {
  required_providers {
    yandex = {
      source = "yandex-cloud/yandex"
    }
  }
}
 
provider "yandex" {
  token  =  "<OAuth-токен>"
  cloud_id  = "<идентификатор_облака>"
  folder_id = "<идентификатор_каталога>"
  zone      = "ru-central1-a"
}
 
variable "image-id" {
  type = string
}
 
resource "yandex_compute_instance" "vm-1" {
  name = "from-terraform-vm"
  platform_id = "standard-v1"
  zone = "ru-central1-a"
 
  resources {
    cores  = 2
    memory = 2
  }
 
  boot_disk {
    initialize_params {
      image_id = var.image-id
    }
  }
 
  network_interface {
    subnet_id = yandex_vpc_subnet.subnet-1.id
    nat       = true
  }
 
  metadata = {
    ssh-keys = "ubuntu:${file("~/.ssh/id_rsa.pub")}"
  }
}
 
resource "yandex_vpc_network" "network-1" {
  name = "from-terraform-network"
}
 
resource "yandex_vpc_subnet" "subnet-1" {
  name           = "from-terraform-subnet"
  zone           = "ru-central1-a"
  network_id     = yandex_vpc_network.network-1.id
  v4_cidr_blocks = ["10.2.0.0/16"]
}
 
resource "yandex_mdb_postgresql_cluster" "postgres-1" {
  name        = "postgres-1"
  environment = "PRESTABLE"
  network_id  = yandex_vpc_network.network-1.id
 
  config {
    version = 12
    resources {
      resource_preset_id = "s2.micro"
      disk_type_id       = "network-ssd"
      disk_size          = 16
    }
    postgresql_config = {
      max_connections                   = 395
      enable_parallel_hash              = true
      vacuum_cleanup_index_scale_factor = 0.2
      autovacuum_vacuum_scale_factor    = 0.34
      default_transaction_isolation     = "TRANSACTION_ISOLATION_READ_COMMITTED"
      shared_preload_libraries          = "SHARED_PRELOAD_LIBRARIES_AUTO_EXPLAIN,SHARED_PRELOAD_LIBRARIES_PG_HINT_PLAN"
    }
  }
 
  database {
    name  = "postgres-1"
    owner = "my-name"
  }
 
  user {
    name       = "my-name"
    password   = "Test1234"
    conn_limit = 50
    permission {
      database_name = "postgres-1"
    }
    settings = {
      default_transaction_isolation = "read committed"
      log_min_duration_statement    = 5000
    }
  }
 
  host {
    zone      = "ru-central1-a"
    subnet_id = yandex_vpc_subnet.subnet-1.id
  }
}
 
output "internal_ip_address_vm_1" {
  value = yandex_compute_instance.vm-1.network_interface.0.ip_address
}
 
output "external_ip_address_vm_1" {
  value = yandex_compute_instance.vm-1.network_interface.0.nat_ip_address
}
  1. Теперь примените обновлённую спецификацию. В папке с файлом спецификации выполните команду terraform plan:
    terraform plan -var-file=my-variables.tfvars
     
    Если появляются сообщения об ошибках — исправьте ошибки и снова выполните команду.
  2. Обновите инфраструктуру в соответствии с дополненной спецификацией командой terraform apply:
    terraform apply -var-file=my-variables.tfvars
     
    Поскольку спецификация теперь включает создание БД, команда может выполняться довольно долго (около 10 минут)
  3. В консоли управления откройте раздел Managed Service for PostgreSQL и убедитесь, что кластер postgres-1 создан и имеет статус Alive.
  4. Проверьте, как изменился стейт-файл:
    terraform state list
     
    В списке появился новый объект:
    yandex_compute_instance.vm-1
    yandex_mdb_postgresql_cluster.postgres-1
    yandex_vpc_network.network-1
    yandex_vpc_subnet.subnet-1
     
  5. Удалите инфраструктуру:
    terraform destroy -var-file=my-variables.tfvars
     
    В конце вы увидите сообщение о выполнении команды:
    ...
    Destroy complete! Resources: 4 destroyed.
     
    В консоли управления убедитесь, что объекты удалены.

На этом ваше знакомство с Terraform в рамках этого курса завершается. Конечно, его возможности гораздо шире, чем нам удалось посмотреть за два урока. Несмотря на относительную молодость (первый релиз вышел в 2014 году), Terraform широко используется в практике DevOps. Дальше изучайте программу сами: как вы уже убедились, это вполне доступно благодаря документации Terraform и облачным ресурсам Yandex Cloud.

 

 

Категория: Cloud Services Engineer
Просмотров: 686

T. О терраформе

О терраформе

Кратко:

  • Terraform - программа для создания облачной инфраструктуры, позволяет автоматизировать развертывание ресурсов.
  • Спецификация Terraform состоит из описания ресурсов, таких как ВМ, сети, подсети и т.д.
  • Terraform позволяет предварительно просмотреть план выполнения, что позволяет убедиться в нужной конфигурации.
  • Объекты в Terraform могут быть связаны друг с другом, например, можно подключить ВМ к сети.
  • Спецификации Terraform написаны на языке HCL и хранятся в файлах формата .tf.
  • Terraform поддерживает различные способы аутентификации, такие как OAuth-токен или переменная окружения YC_TOKEN.
  • Значения параметров или задаются в спецификации, или передаются в качестве переменных для адаптации к конкретным задачам.
  • Инфраструктура разворачивается в три этапа: инициализация, проверка спецификации и развертывание.
  • Terraform ведет реестр, в котором фиксирует состояние инфраструктуры, что позволяет оптимизировать создание инфраструктуры

О терраформе

На предыдущих уроках вы создали образ ВМ, описав его текстовым файлом — спецификацией. Сейчас мы пойдём ещё дальше: познакомимся с программой Terraform, которая позволяет похожим образом создавать облачную инфраструктуру (не только ВМ, но и балансировщики, сети, базы данных, хранилища и т. д.). Подготовив один файл спецификации, вы автоматически развернёте из него готовую инфраструктуру. Риски ошибок ручной сборки сводятся к минимуму.
Вот так выглядит каркас спецификации для Terraform. Он состоит из описания ресурсов: ВМ, сетей, подсетей и т. д.
resource "yandex_compute_instance" "vm-1" {
  ...
}
 
resource "yandex_vpc_network" "network-1" {
  ...
}
 
resource "yandex_vpc_subnet" "subnet-1" {
  ...
}
Terraform позволяет предварительно посмотреть план выполнения: что будет создано и удалено в процессе работы. Благодаря этому вы можете удостовериться, что получите инфраструктуру нужной конфигурации, а ничего лишнего не появится и не пропадёт.
Вывод команды с проверкой создаваемых ресурсов:
Terraform will perform the following actions:
 
  # yandex_compute_instance.vm-1 will be created
  + resource "yandex_compute_instance" "vm-1" {
    ...
    }
 
  # yandex_vpc_network.network-1 will be created
  + resource "yandex_vpc_network" "network-1" {
    ...
    }
 
  # yandex_vpc_subnet.subnet-1 will be created
  + resource "yandex_vpc_subnet" "subnet-1" {
    ...
    }
 
Plan: ... to add, 0 to change, 0 to destroy.
В Terraform объекты можно связывать друг с другом. Например, можно подключить ВМ к сети, созданной в этой же спецификации.
resource "yandex_compute_instance" "vm-1" {
  ...
  network_interface {
    subnet_id = yandex_vpc_subnet.subnet-1.id
    nat       = true
  }
}
 
resource "yandex_vpc_subnet" "subnet-1" {
  ...
}

 

Спецификации Terraform

Terraform, как и Packer, разработала компания HashiCorp. Облачные провайдеры, в том числе Yandex Cloud, поддерживают спецификации Terraform. Обычно они пишутся на языке HCL и хранятся в файлах формата .tf. Для удобства таких файлов может быть несколько. При запуске Terraform просматривает все файлы в директории и воспринимает их как единую спецификацию.
Посмотрите пример файла спецификации. Привязка к провайдеру (в данном случае это Yandex Cloud) задаётся в секциях required_providers и provider:
terraform {
  required_providers {
    yandex = {
      source = "yandex-cloud/yandex"
    }
  }
}
 
provider "yandex" {
  token     = "<OAuth-токен>"
  cloud_id  = "<идентификатор_облака>"
  folder_id = "<идентификатор_каталога>"
  zone      = "<зона_доступности_по_умолчанию>"
}
Как и Packer, Terraform поддерживает различные способы аутентификации. В спецификации выше в параметре token задан OAuth-токен от Yandex Cloud. Другой способ аутентифицироваться — использовать переменную окружения YC_TOKEN, в которую можно записать не только OAuth-токен, но и IAM-токен.
Значения параметров или задаются в спецификации, или передаются в качестве переменных, чтобы адаптировать спецификацию для конкретных задач. Например, с помощью одной спецификации вы сможете развернуть одинаковую инфраструктуру в разных каталогах — для тестирования и для рабочей эксплуатации:
variable "folder-id" {
  type = string
}
 
provider "yandex" {
  token     = "<OAuth-токен>"
  cloud_id  = "<идентификатор_облака>"
  folder_id = var.folder-id
  zone      = "<зона_доступности_по_умолчанию>"
}
При этом ключевые ресурсы и зависимости остаются зафиксированы в спецификации и обеспечивают ее работоспособность.

Как использовать спецификации Terraform

Инфраструктура разворачивается в три этапа:
  1. Команда terraform init инициализирует провайдеров, указанных в файле спецификации.
  2. Команда terraform plan запускает проверку спецификации. Если есть ошибки — появятся предупреждения. Если ошибок нет, отобразится список элементов, которые будут созданы или удалены.
  3. Команда terraform apply запускает развёртывание инфраструктуры.
Если инфраструктура больше не нужна, её можно удалить командой terraform destroy.

Оптимизация создания инфраструктуры

На самом деле Terraform не всегда создаёт заново все ресурсы, описанные в спецификации. Terraform ведёт реестр, в котором фиксирует состояние инфраструктуры в облаке. Этот реестр называется State (стейт-файл), он имеет формат JSON.
State поддерживает связь между описанием ресурсов в спецификации и реальными ресурсами в облаке. При запуске команд plan и apply стейт-файл сравнивается с ресурсами, которые нужно создать из спецификации. По итогам сравнения недостающие ресурсы создаются, лишние — удаляются, а некоторые изменяются на ходу. Такой подход позволяет существенно улучшить производительность операций развёртывания, особенно для масштабных инфраструктур. После выполнения команды apply стейт-файл обновляется.
С помощью команд и стейт-файлов вы можете управлять конфигурацией облачной инфраструктуры: импортировать ее описание в стейт-файл (команда terraform import), исключить ресурсы из стейт-файла (terraform state rm), выгрузить описание (terraform output и terraform show).
 
Проверьте себя
Переменные в Terraform нужны, чтобы...
 
Правильный ответ:
  • задавать значения, которые могут различаться в разных инсталляциях одной спецификации
Что делает команда terraform plan?
 
Правильный ответ:
  • Проверяет правильность спецификации и формирует список элементов инфраструктуры, которые будут созданы, изменены или удалены

 

 

Категория: Cloud Services Engineer
Просмотров: 757

P. ПР. Создаём образ виртуальной машины

Практическая работа. Создаём образ виртуальной машины

Кратко:

  • Установка Packer для создания образа виртуальной машины.
  • Подготовка файла в формате HCL с спецификацией образа.
  • Создание образа виртуальной машины на основе файла спецификации.
  • Завершение создания виртуальной машины и проверка работы веб-сервера.
  • Удаление виртуальной машины и сохранение созданного образа для последующих практических работ.

Практическая работа. Создаём образ виртуальной машины

В этой практической работе вы установите Packer, подготовите с его помощью образ, а затем создадите из образа виртуальную машину.
  1. Установите Packer. Дистрибутив для вашей платформы можно скачать из зеркала. Он поддерживает все популярные операционные системы — Windows, macOS, Linux и FreeBSD. Скачать дистрибутив Packer для вашей ОС можно, в том числе, с зеркала Yandex Cloud.
  2. Подготовьте файл в формате HCL со спецификацией образа, например my-ubuntu-nginx.pkr.hcl.
    При создании файла опирайтесь на документацию Packer.
    В качестве примера можете взять спецификацию из предыдущего урока:
    packer {
      required_plugins {
        yandex = {
          version = "~> 1"
          source  = "github.com/hashicorp/yandex"
        }
      }
    }
    
    source "yandex" "ubuntu-nginx" {
      token               = "<OAuth-токен>"
      folder_id           = "<идентификатор_каталога>"
      source_image_family = "ubuntu-2004-lts"
      ssh_username        = "ubuntu"
      use_ipv4_nat        = "true"
      image_description   = "my custom ubuntu with nginx"
      image_family        = "ubuntu-2004-lts"
      image_name          = "my-ubuntu-nginx"
      subnet_id           = "<идентификатор_подсети>"
      disk_type           = "network-ssd"
      zone                = "ru-central1-a"
    }
    
    build {
      sources = ["source.yandex.ubuntu-nginx"]
    
      provisioner "shell" {
        inline = ["sudo apt-get update -y",
                  "sudo apt-get install -y nginx",
                  "sudo systemctl enable nginx.service"]
      }
    }
 
Не забудьте подставить в спецификацию идентификаторы своего каталога и подсети (подсеть должна быть в той же зоне доступности, которая указана в параметре zone). Также укажите свой OAuth-токен (или воспользуйтесь переменной окружения YC_TOKEN при сборке образа).
  1. Запустите команду установки плагина для работы с YC
    packer init my-ubuntu-nginx.pkr.hcl
  2. Теперь создайте образ ВМ на основе файла спецификации:
    packer build <путь_к_файлу_my-ubuntu-nginx.pkr.hcl>
     
     
  3. После того как команда отработает, убедитесь, что образ появился в каталоге. Для этого в консоли управления перейдите в сервис Compute Cloud. Найдите образ на вкладке Образы.
    image
  4. Перейдите на вкладку Виртуальные машины и начните создавать ВМ.
    Раньше для создания загрузочного диска вы выбирали один из публичных образов, например Ubuntu 20.04. Теперь вместо этого переключитесь на вкладку Пользовательские. Нажмите кнопку Выбрать и в открывшемся окне переключитесь на вкладку Образ.
    Выберите созданный образ и нажмите Применить.
    Из образа создастся загрузочный диск.
    image
  5. Завершите создание ВМ.
  6. Убедитесь, что веб-сервер работает — введите IP-адрес ВМ в адресную строку браузера.
  7. Удалите ВМ, в следующих уроках она не понадобится. А вот образ удалять не стоит.

Поздравляем, вы завершили тему «Packer»

Созданный образ пригодится вам для следующих практических работ. Так, шаг за шагом, вы будете накапливать знания и навыки, которые помогут вам эффективнее управлять облачной инфраструктурой и решать всё более сложные задачи.

 

 

Категория: Cloud Services Engineer
Просмотров: 809

P. О Packer

О Packer

Кратко:

  • Packer - инструмент для создания образов ВМ, позволяющий переносить проекты из тестовой среды в рабочую.
  • Готовые образы, доступные в маркетплейсе, содержат разные версии ОС или наборы программ, но не решают проблему масштабирования проекта.
  • Packer от HashiCorp позволяет создавать образы с софтом, необходимым для конкретного проекта.
  • Для создания образа с Ubuntu и веб-сервером NGINX можно использовать HCL или JSON.
  • Создание образа с помощью Packer происходит через текстовый файл-спецификацию, описывающий сборку образа.
  • Packer работает с Yandex Cloud, для работы с которым необходимо аутентифицироваться.
  • Конфигурацию для создания образа можно сохранять в системе контроля версий для отслеживания изменений и откатов.

О Packer

В этом уроке речь пойдёт об инструменте Packer. Он позволяет удобно создавать образы ВМ.

Для чего нужны образы

Когда вы завершаете создавать проект, нужно перенести его из тестовой среды в рабочую. И тут перед вами встают две проблемы. Во-первых, чтобы решение гарантированно работало, рабочая среда должна как можно меньше отличаться от той, в которой проект создавался и тестировался. И во-вторых, проект нужно тиражировать, т. е. придётся много раз устанавливать и настраивать ПО на серверах или облачных платформах. Чтобы ускорить процесс и меньше ошибаться, лучшее решение — создать шаблон: образ ВМ с настроенным софтом.
Готовые образы, доступные в маркетплейсе, содержат только разные версии операционных систем или наборы программ. Такие образы не решают проблему быстрого масштабирования проекта. Образ с софтом, который нужен именно вам, как раз и можно создать с помощью Packer — продукта компании HashiCorp. Packer умеет создавать образы для разных платформ, в том числе Yandex Cloud.

Как создать образ при помощи Packer

Packer работает так: на входе вы даёте ему текстовый файл — спецификацию — с описанием сборки образа, а на выходе получаете готовый образ. Все просто!
Для примера давайте создадим образ с Ubuntu и веб-сервером NGINX. Описание образа можно составить на языке HCL (HashiCorp Language) или с помощью обычного JSON. Вариант с HCL более современный, так что рассмотрим именно его.
Если у вас есть готовые конфигурации в JSON, то их можно конвертировать в HCL с помощью команды packer hc2_upgrade.
Наш образ my-ubuntu-nginx будет довольно простым. Для его создания достаточно такой спецификации:
source "yandex" "ubuntu-nginx" {
  token               = "<OAuth-токен>"
  folder_id           = "<идентификатор_каталога>"
  source_image_family = "ubuntu-2004-lts"
  ssh_username        = "ubuntu"
  use_ipv4_nat        = "true"
  image_description   = "my custom ubuntu with nginx"
  image_family        = "ubuntu-2004-lts"
  image_name          = "my-ubuntu-nginx"
  subnet_id           = "<идентификатор подсети>"
  disk_type           = "network-ssd"
  zone                = "ru-central1-a"
}
 
build {
  sources = ["source.yandex.ubuntu-nginx"]
 
  provisioner "shell" {
    inline = ["sudo apt-get update -y", 
              "sudo apt-get install -y nginx", 
              "sudo systemctl enable nginx.service"
             ]
  }
}
В секции source указывается, что собирать образ мы будем именно в Yandex Cloud. В документации Packer есть раздел с настройками, специфичными для Yandex Cloud.
Packer должен аутентифицироваться в Yandex Cloud, чтобы создать образ от вашего имени. Есть несколько способов сделать это. В конфигурации выше, например, задан ключ token. Еще один способ — записать IAM-токен или OAuth-токен в переменную окружения YC_TOKEN, тогда в самой спецификации можно дополнительно ничего не указывать.
В параметре image_name мы указываем имя образа.
В секции provisioner — команды, которые нужно выполнить при сборке образа. В нашем случае это установка NGINX.
Сохраним конфигурацию в файл my-ubuntu-nginx.pkr.hcl и попросим Packer на его основе создать образ ВМ:
packer build <путь_к_my-ubuntu-nginx.pkr.hcl>
Остальные параметры, которые можно использовать в спецификации, подробно разобраны в документации Packer.
Можно хранить спецификации для Packer (текстовые файлы) в системе контроля версий, а значит, можно отслеживать изменения, откатывать к более раннему состоянию, смотреть, кто и когда что-то поменял. Как мы уже говорили, такой подход называется Infrastructure as Code.
 
Проверьте себя
Packer нужен, чтобы ...
 
Правильный ответ:
  • создавать образы ВМ для определенной платформы
Секция source в конфигурации служит для описания ...
 
Правильный ответ:
  • Платформы, с которой может использоваться образ. В конфигурации может быть только одна секция source

 

 

Категория: Cloud Services Engineer
Просмотров: 741
  1. CLI. ПР. Использование файлов спецификаций
  2. CLI. ПР. Создание виртуальных машин с помощью CLI
  3. CLI. ПР. Начало работы в CLI
  4. CLI. Как пользоваться CLI Yandex Cloud

Страница 10 из 19

  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
© Gantry Framework 2016 - 2026
Developed by RocketTheme exclusively
for Gantry 5.
  • Главная
  • Начало
  • Карта
Back to top