Некоторое время я использовал ProxMox сейчас в моем Homelab в качестве альтернативы с открытым исходным кодом для чего-то вроде esxi для платформы виртуализации. С Proxmox, когда могут создавать шаблоны для наших виртуальных машин, чтобы мы могли иметь стандартную отправную точку для установки наших приложений поверх, эти шаблоны могут быть полезны также так, чтобы вы могли предварительно установить пакеты для аутентификации, безопасности, регистрации и т. Д. Без кого-либо еще нужно подумать об этом.
Тем не менее, создание и управление этими шаблонами могут стать вызовом с использованием трудоемкого и ручной это может быть. Я хочу показать вам, как вы можете сделать этот процесс более стандартизированным и автоматизированным с использованием упаковщик Чтобы позволить вам объявить свои шаблоны Proxmox в качестве кода.
Что такое Packer
Packer — это утилита, которая позволяет создавать изображения виртуальных машин, чтобы вы могли определить золотое изображение в качестве кода. Packer можно использовать для создания изображений для практически всех больших облачных поставщиков, таких как AWS, GCE, Azure и Digital Ocean, или может использоваться с локально установленными гипервизорами, такими как VMware, Proxmox и несколько других.
Чтобы создать изображение с Packer, нам нужно определить наше изображение через файл шаблона. Файл использует формат JSON и содержит 3 основных раздела, которые используются для определения и приготовления вашего изображения.
Строители : Компоненты упаковщика, которые могут создать изображение машины для одной платформы. Строитель вызывается как часть сборки, чтобы создать фактические полученные изображения.
Даватели : Установите и настройте программное обеспечение внутри рабочего аппарата до того, как машина превращается в статическое изображение. Пример Provisioners включают скрипты оболочек, шеф-повар, марионетки и т. Д.
Постпроцессоры : Возьмите результат строителя или другого постпроцессора и обрабатывать, чтобы создать новый артефакт. Примеры пост-процессоров сожмите и загружают для сжимания и загрузки артефактов соответственно и т. Д.
Используя Packer, мы можем определить наше изображение Golden VM в качестве кода, чтобы мы могли легко создавать идентично настроенные изображения по требованию, чтобы все ваши машины работали на одном и том же изображении, а также могут быть легко обновлены до нового изображения при необходимости.
Подготовка шаблона вашего упаковщика
Для следующих примеров я буду ссылаться на файлы из Этот пример репо Вы можете следовать вместе с солидным шаблоном, чтобы начать от собственных пользовательских шаблонов Proxmox.
Чтобы создать шаблон, мы будем использовать Proxmox Builder
Который подключается через веб-API ProxMox для обеспечения и настроить виртуальную машину для нас, а затем включить его в шаблон. Чтобы настроить наш шаблон мы будем использовать Переменные файлы , чтобы импортировать этот файл переменных, мы будем использовать -Var-файл
Флаг пройти в наших переменных к упаковке. Эти переменные будут использоваться в нашем файле шаблона со следующим синтаксисом внутри строки, например, «Passwd/username = {{user 'ssh_username'}}»
| Отказ
Теперь блок Builder ниже описан основные свойства нашего желаемого шаблона Proxmox, такого как его имя, выделенные ресурсы и устройства, прикрепленные к VM. Для достижения этого boot_command
Опция будет использоваться для загрузки ОС и сообщите ему, чтобы искать предварительный файл для автоматизации процесса установки ОС. У Packer есть встроенный HTTP-сервер для обслуживания этого Predeed.cfg
файл VM в качестве установки с помощью http_directory
вариант в строитель
Чтобы указать публичные файлы HTTP-сервера. Ознакомьтесь с докурированной документацией Ubuntu … Для получения информации о модификации автоматического процесса установки ОС через файл предварительного семени.
{ "builders": [ { "type": "proxmox", "proxmox_url": "https://{{user `proxmox_host`}}:8006/api2/json", "insecure_skip_tls_verify": true, "username": "{{user `proxmox_api_user`}}", "password": "{{user `proxmox_api_password`}}", "vm_id": "{{ user `vmid` }}", "vm_name": "{{user `template_name`}}", "template_description": "{{ user `template_description` }}", "node": "{{user `proxmox_node`}}", "cores": "{{ user `cores` }}", "sockets": "{{ user `sockets` }}", "memory": "{{ user `memory` }}", "os": "l26", "network_adapters": [ { "model": "virtio", "bridge": "vmbr0" } ], "disks": [ { "type": "scsi", "disk_size": "{{ user `disk_size`}}", "storage_pool": "{{user `datastore`}}", "storage_pool_type": "{{user `datastore_type`}}", "format": "raw", "cache_mode": "writeback" } ], "ssh_timeout": "90m", "ssh_password": "{{ user `ssh_password` }}", "ssh_username": "{{ user `ssh_username` }}", "qemu_agent": true, "unmount_iso": true, "iso_file": "{{user `iso`}}", "http_directory": "./http", "boot_wait": "10s", "boot_command": [ "{{ user `boot_command_prefix` }}", "/install/vmlinuz ", "auto ", "console-setup/ask_detect=false ", "debconf/frontend=noninteractive ", "debian-installer={{ user `locale` }} ", "hostname={{ user `hostname` }} ", "fb=false ", "grub-installer/bootdev=/dev/sda", "initrd=/install/initrd.gz ", "kbd-chooser/method=us ", "keyboard-configuration/modelcode=SKIP ", "locale={{ user `locale` }} ", "noapic ", "passwd/username={{ user `ssh_username` }} ", "passwd/user-fullname={{ user `ssh_fullname` }} ", "passwd/user-password={{ user `ssh_password` }} ", "passwd/user-password-again={{ user `ssh_password` }} ", "preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/{{ user `preseed.cfg` }} ", "-- " ] } ] }
В этом шаблоне мы также будем использовать оболочка
Provisioner Чтобы настроить нашу VM OS после его установки на виртуальную машину и доступен через SSH. Это может быть полезно для установки минимальных необходимых пакетов на ваш VM, например Qemu Quest Agent и Облако init или любое другое программное обеспечение требуется. Вы также можете переключить этот авторизатор для любого из других давателей, таких как Anisible, шеф-повар или кукол.
{ "provisioners": [ { "pause_before": "20s", "type": "shell", "environment_vars": ["DEBIAN_FRONTEND=noninteractive"], "inline": [ "date > provision.txt", "sudo apt-get update", "sudo apt-get -y upgrade", "sudo apt-get -y dist-upgrade", "sudo apt-get -y install linux-generic linux-headers-generic linux-image-generic", "sudo apt-get -y install qemu-guest-agent cloud-init", "sudo apt-get -y install wget curl", "exit 0" ] } ] }
И, наконец, мы будем использовать почтовые процессоры для проведения некоторых команд локально. Это сделает соединение SSH для PVE-хостом и запустила некоторые команды вручную, чтобы настроить виртуальные устройства, необходимые для Облако init Отказ Этот постпроцессор использует Оболочка местный
Post Processor для запуска команд на локальном компьютере под управлением Packer, но вы всегда можете переместить эту конфигурацию к чему-то вроде неблагополучной PlayBook, чтобы сделать конфигурацию более читаемой и портативной.
{ "post-processors": [ { "type": "shell-local", "inline": [ "ssh root@{{user `proxmox_host`}} qm set {{user `vmid`}} --scsihw virtio-scsi-pci", "ssh root@{{user `proxmox_host`}} qm set {{user `vmid`}} --ide2 {{user `datastore`}}:cloudinit", "ssh root@{{user `proxmox_host`}} qm set {{user `vmid`}} --boot c --bootdisk scsi0", "ssh root@{{user `proxmox_host`}} qm set {{user `vmid`}} --ciuser {{ user `ssh_username` }}", "ssh root@{{user `proxmox_host`}} qm set {{user `vmid`}} --cipassword {{ user `ssh_password` }}", "ssh root@{{user `proxmox_host`}} qm set {{user `vmid`}} --vga std" ] } ] }
Теперь с вашей конфигурацией завершится, вы будете готовы создать свой шаблон Proxmox с Packer. Запустите команду Packer Build ./Ubuntu-18.04.json.
Вы должны увидеть некоторые вывод для каждого из Строители
, даватели
и Пост-процессоры
Отказ
$ packer build -var-file="./config.json" ./ubuntu-18.04.json proxmox: output will be in this color. ==> proxmox: Creating VM ==> proxmox: Starting VM ==> proxmox: Starting HTTP server on port 8771 ... Build 'proxmox' finished. ==> Builds finished. The artifacts of successful builds are: --> proxmox: A template was created: 4444 --> proxmox:
Когда процесс завершен, вы должны увидеть свой шаблон готов в интерфейсе Proxmox и готовы клонировать на виртуальные машины.
Дальше чтение на упаковке
Теперь у вас должна быть хорошая отправная точка для создания шаблонов Proxmox с Packer. Если вы хотите продлить его полезность, немного дальнейшее проверить эти полезные статьи.
- Начало работы с Packer
- Ubuntu Docs для файла предварительного семени
- Автоматическое изображение строит с Дженкинсом, Packer и Kubernetes
- Непрерывное развертывание золотых изображений с упаковщиком и семафором
Соедините дальше
- Читать далее статьи на Код punnet блог
- Подумайте о подписке в блоги Еженедельная рассылка Отказ
- Следуйте за более для Twitter или блоги RSS Feed Отказ
Обложка Фото Chuttersnap на Бессмысленно
Оригинал: «https://dev.to/aaronktberry/creating-proxmox-templates-with-packer-1b35»