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

Так же, как и ВМ, контейнер изолирован от других контейнеров и хостовой ОС. Он может содержать различные приложения и запускаться на различных платформах.
Хорошей практикой считается принцип «один контейнер — один сервис». Так проще обновлять приложения и создавать резервные копии. Например, если вы написали для веб-сервера NGINX веб-приложение на Python, поместите сервер и приложение в отдельные контейнеры.
Слоистая архитектура контейнеров
Говоря о контейнерах, часто употребляют термин слой. Любое изменение окружения — установка программы, создание директории — создаёт новый слой. Эти слои накладываются друг на друга.
Если на одном сервере оказываются несколько контейнеров с общими слоями (например, библиотеками), то слои не дублируются: они устанавливаются один раз и затем используются совместно.
Преимущества контейнеров
С контейнерами разработка стала эффективнее и проще. Чем же они хороши?
- Экономия ресурсов. Во-первых, контейнеры занимают меньший объём, чем ВМ: они не содержат отдельных копий ОС и дополнительных программ и утилит. Во-вторых, благодаря общим слоям контейнеры оптимизируют использование ресурсов хоста.
- Независимость. Контейнер самодостаточен. Всё, что нужно для работы (библиотеки, настройки, среда запуска), находится внутри.
- Переносимость. Контейнер независим. Платформа, на которой его запускают, неважна: он везде будет работать одинаково. Можно спокойно переносить контейнер с одной платформы на другую.
- Скорость разворачивания контейнеров и работы в них. Это преимущество следует из предыдущих. Сервер не тратит время на эмуляцию гостевой ОС, а высвободившиеся ресурсы можно направить на увеличение производительности приложений и сервисов.
- Тиражирование и масштабирование. Собрали контейнер однажды — копируйте его сколько угодно раз. Запускайте одновременно нужное количество копий контейнера. Всё будет работать одинаково.
- Оркестрация. Дирижёр одновременно управляет множеством музыкантов, играющих на разных инструментах. Вы можете создавать похожие системы из контейнеров, каждый из которых выполняет узкую задачу. Оркестрация — это управление такими системами, т. е. координация работы множества контейнеров. Подробнее о ней мы поговорим на следующих уроках.
- Категория: Cloud Services Engineer
- Просмотров: 652
Практическая работа. Создаём виртуальную машину из образа и базу данных
Кратко:
- Создание кластера PostgreSQL с помощью Terraform и Yandex Cloud.
- Установка и настройка Terraform для работы с Yandex Cloud.
- Создание виртуальной машины и базы данных с использованием образа, созданного с помощью Packer.
- Использование переменных в спецификации Terraform для создания разных конфигураций.
- Создание сети и подсети с использованием Yandex Cloud.
- Применение обновленной спецификации для создания кластера PostgreSQL.
- Удаление инфраструктуры с использованием Terraform.
Практическая работа. Создаём виртуальную машину из образа и базу данных
В этой практической работе вы установите Terraform и подготовите спецификацию, с помощью которой создадите виртуальную машину, а затем управляемую базу данных.
Подсказки для создания спецификации смотрите в документации Yandex Cloud и в справочнике ресурсов (раздел Resources).
-
Установите 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 -
Создайте файл спецификации
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. -
Добавьте в файл блок, описывающий создание ВМ. Его сложно написать с нуля, поэтому опирайтесь на пример из документации. Чтобы вам было проще опознать в консоли управления объекты, созданные по этой спецификации, указывайте уникальные имена для ВМ, сети и подсети, а не оставляйте имена по умолчанию (default).
-
Для создания ВМ используйте образ, созданный с помощью 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 } } ... -
Скорректируйте описание для сети и подсети.Для сети достаточно указать имя:
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 }
-
Теперь попробуйте применить спецификацию. Перейдите в папку с файлом спецификации и выполните инициализацию.
terraform initЕсли всё сделано верно, Terraform покажет сообщение:... Terraform has been successfully initialized! ... -
Проверьте спецификацию с помощью команды
terraform plan.Terraform использует все файлы.tfиз папки, в которой запущена команда. Поэтому название файла спецификацииmy-config.tfуказывать не нужно: его Terraform подхватит и так.Если файл с переменными называется стандартно (terraform.tfvars), его тоже можно не указывать при запуске команды. А если название файла нестандартное, то его нужно указывать:terraform plan -var-file=my-variables.tfvarsTerraform выведет план: объекты, которые будут созданы, и т. п.:... Terraform will perform the following actions: ...На самом деле необязательно помещать переменные в файл, их можно просто указывать при запуске команды. Поскольку у вас только одна переменная, это было бы несложно:terraform plan -var="image-id=<идентификатор_образа>" -
Создайте в облаке инфраструктуру по описанной вами спецификации. Выполните команду:
terraform apply -var-file=my-variables.tfvarsTerraform запросит подтверждение:... 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" -
В консоли управления убедитесь, что ВМ создана. Откройте в браузере страницу с указанным IP-адресом и проверьте, доступна ли ВМ.
-
Как мы говорили на предыдущем уроке, Terraform хранит описание инфраструктуры в стейт-файлах. Посмотрите, как выглядит стейт-файл сейчас:
terraform state listВы увидите список объектов:yandex_compute_instance.vm-1 yandex_vpc_network.network-1 yandex_vpc_subnet.subnet-1 - Теперь добавьте в файл спецификации блок, описывающий создание кластера БД PostgreSQL. Подсказки ищите в справочнике ресурсов. Не забудьте заменить в спецификации имя подсети.
Сохраните файл спецификации.
-
Теперь примените обновлённую спецификацию. В папке с файлом спецификации выполните команду
terraform plan:terraform plan -var-file=my-variables.tfvarsЕсли появляются сообщения об ошибках — исправьте ошибки и снова выполните команду. -
Обновите инфраструктуру в соответствии с дополненной спецификацией командой
terraform apply:terraform apply -var-file=my-variables.tfvarsПоскольку спецификация теперь включает создание БД, команда может выполняться довольно долго (около 10 минут) -
В консоли управления откройте раздел Managed Service for PostgreSQL и убедитесь, что кластер
postgres-1создан и имеет статусAlive. -
Проверьте, как изменился стейт-файл:
terraform state listВ списке появился новый объект:yandex_compute_instance.vm-1 yandex_mdb_postgresql_cluster.postgres-1 yandex_vpc_network.network-1 yandex_vpc_subnet.subnet-1 -
Удалите инфраструктуру:
terraform destroy -var-file=my-variables.tfvarsВ конце вы увидите сообщение о выполнении команды:... Destroy complete! Resources: 4 destroyed.В консоли управления убедитесь, что объекты удалены.
На этом ваше знакомство с Terraform в рамках этого курса завершается. Конечно, его возможности гораздо шире, чем нам удалось посмотреть за два урока. Несмотря на относительную молодость (первый релиз вышел в 2014 году), Terraform широко используется в практике DevOps. Дальше изучайте программу сами: как вы уже убедились, это вполне доступно благодаря документации Terraform и облачным ресурсам Yandex Cloud.
- Категория: Cloud Services Engineer
- Просмотров: 686
О терраформе
Кратко:
- 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
Инфраструктура разворачивается в три этапа:
- Команда
terraform initинициализирует провайдеров, указанных в файле спецификации. - Команда
terraform planзапускает проверку спецификации. Если есть ошибки — появятся предупреждения. Если ошибок нет, отобразится список элементов, которые будут созданы или удалены. - Команда
terraform applyзапускает развёртывание инфраструктуры.
Если инфраструктура больше не нужна, её можно удалить командой
terraform destroy.Оптимизация создания инфраструктуры
На самом деле Terraform не всегда создаёт заново все ресурсы, описанные в спецификации. Terraform ведёт реестр, в котором фиксирует состояние инфраструктуры в облаке. Этот реестр называется State (стейт-файл), он имеет формат JSON.
State поддерживает связь между описанием ресурсов в спецификации и реальными ресурсами в облаке. При запуске команд
plan и apply стейт-файл сравнивается с ресурсами, которые нужно создать из спецификации. По итогам сравнения недостающие ресурсы создаются, лишние — удаляются, а некоторые изменяются на ходу. Такой подход позволяет существенно улучшить производительность операций развёртывания, особенно для масштабных инфраструктур. После выполнения команды apply стейт-файл обновляется.С помощью команд и стейт-файлов вы можете управлять конфигурацией облачной инфраструктуры: импортировать ее описание в стейт-файл (команда
terraform import), исключить ресурсы из стейт-файла (terraform state rm), выгрузить описание (terraform output и terraform show).
- Категория: Cloud Services Engineer
- Просмотров: 757
Практическая работа. Создаём образ виртуальной машины
Кратко:
- Установка Packer для создания образа виртуальной машины.
- Подготовка файла в формате HCL с спецификацией образа.
- Создание образа виртуальной машины на основе файла спецификации.
- Завершение создания виртуальной машины и проверка работы веб-сервера.
- Удаление виртуальной машины и сохранение созданного образа для последующих практических работ.
Практическая работа. Создаём образ виртуальной машины
В этой практической работе вы установите Packer, подготовите с его помощью образ, а затем создадите из образа виртуальную машину.
- Установите Packer. Дистрибутив для вашей платформы можно скачать из зеркала. Он поддерживает все популярные операционные системы — Windows, macOS, Linux и FreeBSD. Скачать дистрибутив Packer для вашей ОС можно, в том числе, с зеркала Yandex Cloud.
-
Подготовьте файл в формате 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 при сборке образа).- Запустите команду установки плагина для работы с YC
packer init my-ubuntu-nginx.pkr.hcl -
Теперь создайте образ ВМ на основе файла спецификации:
packer build <путь_к_файлу_my-ubuntu-nginx.pkr.hcl> -
После того как команда отработает, убедитесь, что образ появился в каталоге. Для этого в консоли управления перейдите в сервис Compute Cloud. Найдите образ на вкладке Образы.

-
Перейдите на вкладку Виртуальные машины и начните создавать ВМ.Раньше для создания загрузочного диска вы выбирали один из публичных образов, например Ubuntu 20.04. Теперь вместо этого переключитесь на вкладку Пользовательские. Нажмите кнопку Выбрать и в открывшемся окне переключитесь на вкладку Образ.Выберите созданный образ и нажмите Применить.Из образа создастся загрузочный диск.

-
Завершите создание ВМ.
-
Убедитесь, что веб-сервер работает — введите IP-адрес ВМ в адресную строку браузера.
-
Удалите ВМ, в следующих уроках она не понадобится. А вот образ удалять не стоит.
Поздравляем, вы завершили тему «Packer»
Созданный образ пригодится вам для следующих практических работ. Так, шаг за шагом, вы будете накапливать знания и навыки, которые помогут вам эффективнее управлять облачной инфраструктурой и решать всё более сложные задачи.
- Категория: Cloud Services Engineer
- Просмотров: 809
О 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.
- Категория: Cloud Services Engineer
- Просмотров: 741