Packer — это инструмент DevOps с открытым исходным кодом, созданный Hashicorp для создания идентичных образов машин для нескольких платформ из одного файла конфигурации JSON. Этот инструмент действительно подходит для создания неизменной архитектуры.
Вы можете использовать Packer для AWS, GCP, AZURE и т. д.
Packer управляется шаблонами, шаблоны пишутся в формате JSON .
{ "variables" : { "region" : "" }, "builders" : [ { "type" : "amazon-ebs", "profile" : "default", "region" : "{{user `region`}}", "instance_type" : "t2.micro", "source_ami" : "", "ssh_username" : "ec2-user" } } ], "provisioners" : [ { "type" : "shell", "script" : "./yourshell.sh" } ] }
Шаблон разделен на 3 раздела:
1. Переменные :
Пользовательские переменные, которые можно переопределить во время выполнения с помощью флага -var. В приведенном выше фрагменте мы указываем регион AWS.
2. Строители :
Вы можете указать несколько сборщиков в зависимости от целевых платформ (EC2, VMware, Google Cloud, Docker…).
3. Провайдеры :
Вы можете передать сценарий оболочки или использовать инструменты управления конфигурацией, такие как Ansible , Chef , Puppet или сценарий оболочки, для предоставления AMI и установки всех необходимых пакетов и программного обеспечения.
Здесь мы определяем, с чем должен быть создан образ, например, с программным продуктом, определенными именами пользователей, каталогами, версией исправления, версией ядра, конкретной конфигурацией среды и т. д.
Provisioners позволяют вам спроектировать свой образ и сделать его более значимым, добавив в него необходимое программное обеспечение/программы. Без него образ, который мы создаем, представляет собой простой базовый образ ядра ОС, в противном случае некоторые варианты использования Provisioners
- Установка пакетов/программ
- Создание имени пользователя и конфигурации
- Запустите некоторые пользовательские сценарии, чтобы внести необходимые изменения в среду
- Настройка файловой системы/NFS/хранилища и т. д.
- Настройка/конфигурация безопасности
- скачивание необходимых файлов кода и т.д.
- исправление ядра
- Настройка пакетов/программного обеспечения так, как вы хотите (Apache/NGINX/Tomcat/MySQL) и т. д.
По сути, тут провизионеры делают основную работу и делают образ максимально готовым к использованию.
4. Пост-инженеры :
Постпроцессоры вступают в действие после того, как образ успешно построен или создан компоновщиком и подготовлен поставщиком (ами). Постпроцессоры не являются обязательными, и их можно использовать для загрузки артефактов, повторной упаковки, создания тегов, публикации в облаках hub.docker.com
и vagrant cloud
т. д. Некоторые из популярных постпроцессоров
- Докер Пуш
- Докер-тег
- Бродяга
- Блуждающее облако
- Шаблон Vsphere
- Импорт Амазонки
- Импорт DigitalOcean и т. д.
Кроме того, я видел, что эта стратегия используется для отключения пользователя ec2.
Packer будет использовать существующий образ Amazon Linux « Gold Image ».
Предположим, вы работаете с AWS. Создав образ машины AWS (AMI) с упаковщиком, вы можете использовать Terraform или AWS CLI для запуска экземпляра ec2.
В следующих статьях вы узнаете, как это сделать.
Блоки HCL
Это новый способ кодирования упаковщика для создания образов машин, чем я упоминал выше.
Как представила HashiCorp , есть три блока:
- Пакер Блок
- Исходный блок
- Строительный блок
packer { required_plugins { amazon = { version = ">= 0.0.2" source = "github.com/hashicorp/amazon" } } }source "amazon-ebs" "ubuntu" { ami_name = "learn-packer-linux-aws" instance_type = "t2.micro" region = "us-west-2" source_ami_filter { filters = { name = "ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*" root-device-type = "ebs" virtualization-type = "hvm" } most_recent = true owners = ["099720109477"] } ssh_username = "ubuntu" }build { name = "learn-packer" sources = [ "source.amazon-ebs.ubuntu" ] }
Пакер Блок
Блок packer {}
содержит настройки Пакера, в том числе указание необходимой версии Пакера.
Кроме того, в блоке Packer вы найдете required_plugins
блок, в котором указаны все плагины, необходимые шаблону для сборки вашего образа. Несмотря на то, что Packer упакован в один бинарный файл, большая часть его функций зависит от плагинов. Некоторые из этих плагинов, такие как Amazon AMI Builder (AMI Builder), который вы будете использовать, создаются, поддерживаются и распространяются HashiCorp, но каждый может писать и использовать плагины.
Каждый блок плагина содержит версию и source
атрибут. Packer будет использовать эти атрибуты для загрузки соответствующих подключаемых модулей.
- Атрибут
source
необходим только в том случае, если требуется плагин за пределами домена HashiCorp. Вы можете найти полный список плагинов HashiCorp и поддерживаемых сообществом сборщиков на странице документации Packer Builders . - Атрибут версии является необязательным, но мы рекомендуем использовать его для ограничения версии плагина, чтобы Packer не установил версию плагина, которая не работает с вашим шаблоном. Если вы не укажете версию плагина, Packer автоматически загрузит самую последнюю версию во время инициализации.
Исходный блок
Блок source
настраивает определенный плагин компоновщика , который затем вызывается build
блоком. Исходные блоки используют компоновщики и коммуникаторы , чтобы определить, какой тип виртуализации использовать, как запустить образ, который вы хотите предоставить, и как подключиться к нему. Построители и коммуникаторы объединяются и настраиваются параллельно в исходном блоке. A source
можно повторно использовать в нескольких сборках, и вы можете использовать несколько источников в одной сборке. Плагин компоновщика — это компонент Packer, который отвечает за создание машины и превращение этой машины в образ.
У исходного блока есть две важные метки: тип компоновщика и имя . Эти две метки вместе позволят нам однозначно ссылаться на источники позже, когда мы будем определять запуски сборки.
В примере шаблона тип построителя amazon-ebs
и имя ubuntu
.
Каждый билдер имеет свой собственный уникальный набор атрибутов конфигурации. Построитель amazon-ebsзапускает исходный образ AMI, запускает средства подготовки в этом экземпляре, а затем переупаковывает его в образ AMI, поддерживаемый EBS.
В примере шаблона amazon-ebs
конфигурация построителя запускает t2.micro
AMI в us-west-2
регионе, используя ubuntu:xenial
AMI в качестве базового образа, а затем создает образ с именем learn-packer-linux-aws
из этого экземпляра. Построитель создаст все необходимые временные ресурсы (например, пары ключей, правила группы безопасности и т. д.) для временного доступа к экземпляру во время создания образа.
Строительный блок
Блок build
определяет, что Packer должен делать с экземпляром EC2 после его запуска.
В примере шаблона блок сборки ссылается на AMI, определенный вышеприведенным исходным блоком ( source.amazon-ebs.ubuntu
).
Здесь вы можете добавить блок обеспечения
build { name = "learn-packer" sources = [ "source.amazon-ebs.ubuntu" ]provisioner "shell" { environment_vars = [ "FOO=hello world", ] inline = [ "echo Installing Redis", "sleep 30", "sudo apt-get update", "sudo apt-get install -y redis-server", "echo \"FOO is $FOO\" > example.txt", ] }provisioner "shell" { inline = ["echo This provisioner runs last"] } }