Рубрики
Uncategorized

Packer: построить пользовательские изображения на облаке и местных

Построить пользовательский Ubuntu 20.04 LTS на местной анатомии конфигурации Packer Configuration Provisioners … Теги с DevOps, производительностью, AWS, обучением.

  • Построить пользовательский Ubuntu 20.04 LTS на местном
    • Анатомия файла конфигурации Packer
    • Строители
    • Проведение
    • Постпроцессоры
    • Коммуникатор
    • Как запустить локально
  • Построить пользовательский Ubuntu 20.04 LTS на облаке
    • Строители на облаке
    • Настройте настройки на облаке
    • Как бежать

Репозиторий: https://github.com/mrtrkmnhub/ubuntu-packer

В этом сообщении в блоге, предоставление и настраивание изображений с помощью Packer будет отображаться с помощью репозитория шаблона.

Если вы спрашиваете или задаетесь вопросом, что такое Packer, официальное определение:

Packer — это бесплатный и открытый исходный инструмент для создания золотых изображений для нескольких платформ из одной конфигурации источника. (С официального сайта).

Этот пост включает в себя предоставление изображения Ubuntu на AWS и Local.

В идеальном хранилище шаблона упаковщика было бы неплохо иметь скелет, где он включает Загрузка , http. , Скрипты Папки вдоль файла конфигурации Packer с помощью readme. В целом, структура папки может выглядеть так:

    ├── http
    │ └── preseed.cfg # required to change defualt values of ubuntu image
    ├── readme.md # readme file to have instructions about what to do
    ├── scripts # scripts/ dir, includes scripts to run on custom image
    │ ├── cleanup.sh # cleans up /tmp 
    │ ├── install_tools.sh # installs custom tools
    │ └── setup.sh # setting up config in system wise
    ├── ubuntu-20.04.json # packer config for ubuntu 20.04
    └── uploads # directory to upload files to custom image 
        └── .gitkeep    

В этой установке http/Predeed.cfg Определяет ответы на вопросы, которые могут быть заданы во время установки операционной системы Ubuntu. Больше информации относительно Predeed.cfg Файл можно проверить с его вики

Скрипты Папка, состоящая из скриптов Bash, шеф-повара, Ansible или любого другого установщика файлов конфигурации или сценариев, которые будут устанавливать индивидуальные инструменты и определяют настройки изображения Ubuntu.

Загрузите Папка включает в себя все файлы, пакеты DEB или любые другие файлы, которые будут скопированы на изображение, которое будет внутри индивидуального изображения.

Анатомия файла конфигурации Packer

Любой файл Packer, состоящий из трех основных компонентов, которые являются;

Строители

Определите желаемую платформу и конфигурации платформы, включая информацию о клавише API и желаемые изображения источника. Пример фрагмента отдается из файла Packer:

    "builders": [
    {
      "boot_command": [
        "",
        "",
        "",
        "/install/vmlinuz",
        " auto",
        " console-setup/ask_detect=false",
        " console-setup/layoutcode=us",
        " console-setup/modelcode=pc105",
        " debconf/frontend=noninteractive",
        " debian-installer=en_US",
        " fb=false",
        " initrd=/install/initrd.gz",
        " kbd-chooser/method=us",
        " keyboard-configuration/layout=USA",
        " keyboard-configuration/variant=USA",
        " locale=en_US",
        " netcfg/get_domain=vm",
        " netcfg/get_hostname=ubuntu",
        " grub-installer/bootdev=/dev/sda",
        " noapic",
        " preseed/url=http://:/preseed.cfg",
        " -- ",
        ""
      ],
      "boot_wait": "10s",
      "format": "ova",
      "disk_size": 25240,
      "guest_additions_path": "VBoxGuestAdditions_.iso",
      "guest_os_type": "Ubuntu_64",
      "headless": true,
      "http_directory": "http",
      "iso_checksum": "sha256:f11bda2f2caed8f420802b59f382c25160b114ccc665dbac9c5046e7fceaced2",
      "iso_urls": [
        "iso/ubuntu-20.04.1-legacy-server-amd64.iso",
        "https://cdimage.ubuntu.com/ubuntu-legacy-server/releases/20.04/release/ubuntu-20.04.1-legacy-server-amd64.iso"
      ],
      "shutdown_command": "echo 'ubuntu'|sudo -S shutdown -P now",
      "ssh_password": "ubuntu",
      "ssh_port": 22,
      "ssh_timeout": "10000s",
      "ssh_username": "ubuntu",
      "type": "virtualbox-iso",
      "vboxmanage": [
        [
          "modifyvm",
          "",
          "--memory",
          "2048"
        ],
        [
          "modifyvm",
          "",
          "--cpus",
          "1"
        ]
      ],
      "virtualbox_version_file": ".vbox_version",
      "vm_name": "ubuntu_vm_ubuntu_20_"
    }
  ]

В конфигурации строителей мы определяем какой-то набор ключей в файле JSON, которые очень очевидны из его имени, мы рассматриваем возможность создавать изображение локально. Все ключевые ключи важны в данном конфиге «Строители», однако наиболее важными и могут потребоваться обновить время на время — ISO_URLS Какие места, где Packer загружают iamges и настроить его в соответствии с вашими сценариями. Еще один важный ключ должен быть Обезглавленный ценность правда Это означает, что не будет работать GUI, когда команда Packer выполняется для запуска файла Packer JSON.

Проведение

Определяет, как настроить изображение, скорее всего, используя существующие инструменты управления конфигурацией, такие как Anisible, шеф-повар, марионетки или чистые сценарии Bash.

В нашем примере будут предусмотрены сценарии Bash, чтобы установить инструменты и обновлять конфигурацию изображения Ubuntu, чтобы сделать его настроенным. Раздел Provisionser из файла Packer JSON может рассматриваться как ниже:

 "provisioners": [
    {
      "type": "file",
      "source":"uploads",
      "destination": "/home/ubuntu"
    },
    {
      "execute_command": "echo 'ubuntu' | sudo -S -E bash ''",
      "script": "scripts/install_tools.sh",
      "type": "shell"
    },
    {
      "execute_command": "echo 'ubuntu' | sudo -S -E bash ''",
      "script": "scripts/setup.sh",
      "type": "shell"
    },
    {
      "execute_command": "echo 'ubuntu' | sudo -S -E bash ''",
      "script": "scripts/cleanup.sh",
      "type": "shell"
    }
  ]

Здесь мы определяем существующие сценарии Bash для выполнения в процессе настройки изображения Ubuntu. Шаги под давлениями довольно ясны.

Содержание файла загрузки будет загружено в домашний каталог /дом/Ubuntu

На втором шаге install_tools.sh будут выполнены и другие шаги будут соблюдены в порядке.

Постпроцессоры

Связанные с Builder, запускается после создания изображения, он обычно используется для генерации или применения артефактов. В этом примере не требуется, однако дополнительная информация можно найти здесь: постпроцессоры

Коммуникатор

Как Packer работает на изображении машины во время создания. По умолчанию он превышает SSH Communication, и он не должен быть определен явно. Больше информации можно найти здесь: коммуникатор

За любой файл Packer можно рассматривать как следует следующее:

{
    "builders": [
        {
        "boot_command": [
            "",
            "",
            "",
            "/install/vmlinuz",
            " auto",
            " console-setup/ask_detect=false",
            " console-setup/layoutcode=us",
            " console-setup/modelcode=pc105",
            " debconf/frontend=noninteractive",
            " debian-installer=en_US",
            " fb=false",
            " initrd=/install/initrd.gz",
            " kbd-chooser/method=us",
            " keyboard-configuration/layout=USA",
            " keyboard-configuration/variant=USA",
            " locale=en_US",
            " netcfg/get_domain=vm",
            " netcfg/get_hostname=ubuntu",
            " grub-installer/bootdev=/dev/sda",
            " noapic",
            " preseed/url=http://:/preseed.cfg",
            " -- ",
            ""
        ],
        "boot_wait": "10s",
        "format": "ova",
        "disk_size": 25240,
        "guest_additions_path": "VBoxGuestAdditions_.iso",
        "guest_os_type": "Ubuntu_64",
        "headless": true,
        "http_directory": "http",
        "iso_checksum": "sha256:f11bda2f2caed8f420802b59f382c25160b114ccc665dbac9c5046e7fceaced2",
        "iso_urls": [
            "iso/ubuntu-20.04.1-legacy-server-amd64.iso",
            "https://cdimage.ubuntu.com/ubuntu-legacy-server/releases/20.04/release/ubuntu-20.04.1-legacy-server-amd64.iso"
        ],
        "shutdown_command": "echo 'ubuntu'|sudo -S shutdown -P now",
        "ssh_password": "ubuntu",
        "ssh_port": 22,
        "ssh_timeout": "10000s",
        "ssh_username": "ubuntu",
        "type": "virtualbox-iso",
        "vboxmanage": [
            [
            "modifyvm",
            "",
            "--memory",
            "2048"
            ],
            [
            "modifyvm",
            "",
            "--cpus",
            "1"
            ]
        ],
        "virtualbox_version_file": ".vbox_version",
        "vm_name": "ubuntu_vm_ubuntu_20_"
        }
    ],
    "provisioners": [
        {
        "type": "file",
        "source":"uploads",
        "destination": "/home/ubuntu"
        },
        {
        "execute_command": "echo 'ubuntu' | sudo -S -E bash ''",
        "script": "scripts/install_tools.sh",
        "type": "shell"
        },
        {
        "execute_command": "echo 'ubuntu' | sudo -S -E bash ''",
        "script": "scripts/setup.sh",
        "type": "shell"
        },
        {
        "execute_command": "echo 'ubuntu' | sudo -S -E bash ''",
        "script": "scripts/cleanup.sh",
        "type": "shell"
        }
    ],
    "variables": {
        "version": "0.1"
    }
}

Как запустить локально

Этот файл можно запускать с места, где Ubuntu-20.04.json файл находится.

$ packer build ubuntu-20.04.json

Он начнет создавать пользовательское изображение, установив инструменты, которые определены под сценариями и настроить имя пользователя и пароль в соответствии с Predeed.cfg и setup.sh .sh.

Это более практично и предпочтительно использовать, если у вас уже есть параметр облака. Этот конфигурация Packer создаст пользовательское изображение непосредственно на облаке и сохраняет его до AMIS к вашей учетной записи AWS.

Анатомия файлов Packer аналогична, только раздел, который необходимо изменить по сравнению с локальным, является раздел «Строители». Он определяет все необходимые переменные AWS и AMIS для настройки.

В качестве облачного примера AWS будет использоваться для создания пользовательского изображения.

Строители на облаке

"builders": [
        {
            "type":"amazon-ebs", 
            "region": "", 
            "access_key": "",
            "secret_key": "", 
            "subnet_id": "", 
            "security_group_id": "", 
            "source_ami_filter": {
                "filters": {
                    "virtualization-type": "hvm", 
                    "name": "ubuntu/images/*ubuntu-focal-20.04-amd64-server-*",
                    "root-device-type": "ebs"
                },
                "owners": ["099720109477"],
                "most_recent": true
            },
            "instance_type": "",
            "ssh_username":"ubuntu", 
            "ami_name": "ubuntu-ami-custom_"
        }

    ]

В этой конфигурации все ключи важны для рассмотрения, однако существуют некоторые решающие и необходимы для его запуска. Больше информации о ключах можно найти здесь: Amazon Ami Builder

Мы хотели бы создать пользовательский образ Ubuntu-20.04 на Cloud и сохранить его как AMI, чтобы запустить его позже, мы ищем его шаблон от доступных AMIS на консоли управления AWS или его можно найти на этом веб-сайте: https://cloud-images.ubuntu.com/locator/ec2/

Как только вы объявили, какой AMI настроить, он должен быть расположен под source_ami_filter с подстановочными знаками и владельцами. Настройка most_recent к правда Значит, при выполнении этого файла Packer JSON выполняется, он будет выработать и настроить последнюю обновленную AMI.

Ключ доступа, секретный ключ Требуются и не должны подвергаться публике в любой момент, если они выставлены, они должны быть немедленно обновлены. Они будут использоваться для связи с AWS, чтобы выстрелить экземпляры для создания пользовательского изображения в соответствии с заданными настройками, определенными в строителях и давателях.

Значения ключей определены в Переменные и проанализирован из этого.

"variables": {
        "aws_access_key": "",
        "aws_secret_key": "",
        "aws_region": "",
        "aws_vpc": "",
        "aws_subnet": "",
        "ami_name": "",
        "ami_description": "",
        "builder_name": "",
        "username":"ubuntu",
        "instance_type":"t2.medium",
        "tarball": ""
    }, 

В разрезе переменных Имя пользователя, induction_type, aws_access_key, aws_secret_key Переменные должны быть установлены правильно, чтобы создать изображение на облаке. Другие переменные являются необязательными, а разрядные разрез могут быть заполнены больше.

Настройте настройки на облаке

На облачных сборках, файл Cloud Configuration должен использоваться вместо Predeed.cfg Чтобы настроить настройки. Defaults.CFG Файл, где он содержит пользовательские настройки, такие как имя пользователя, пароль, изменение файла Visudo и многое другое. Пример Defaults.CFG может быть как следует следующее:

#cloud-config
system_info:
  default_user:
    name: ubuntu
    sudo: ["ALL=(ALL) NOPASSWD:ALL"]
    lock_passwd: false
    plain_text_passwd: 'ubuntu'

Больше информации относительно Defaults.CFG Файл можно найти здесь и настроен подробнее: https://cloudinit.readtheDocs.io/en/latest/topics/examples.html.

Как бежать

Как только переменные установлены, его можно проводить так же с локальным.

$ packer build aws_packer.json

Полный пакет JSON File: aws_packer.json.

В качестве резюме Packer действительно прохладный инструмент для автоматизации процесса создания пользовательских изображений, и он также может использоваться для докеров. Для локального примера в этом посте он будет производить файл OVA для импорта, на облаке он будет генерировать пользовательский AMI под учетной записью AWS.

Все сценарии и файлы конфигурации можно найти в этом репозитории: https://github.com/mrtrkmnhub/ubuntu-packer

Оригинал: «https://dev.to/mrturkmen/packer-build-custom-images-on-cloud-and-local-53ap»