Я использовал оба довольно широко (раскрытие информации: я добровольно сопровождаю LinuxKit). Я использовал упаковщик в течение достаточно долгого времени и переключил почти всю работу, которую я делал в упаковщике, на LinuxKit (lkt
).
В принципе, оба являются инструментами с открытым исходным кодом, которые служат одной и той же цели: создать образ ОС, который можно запустить. На практике большинство использует его для образов виртуальных машин для запуска на vbox, AWS, Azure, GCR и т. д., но вы можете создать образ, который будет работать на «голом железе», что я тоже сделал.
Packer, будучи старше, имеет более обширный набор средств обеспечения, сборщиков, плагинов и т. д. Он пытается быть довольно широким и непредвзятым. Создавайте везде, запускайте любую установку, которую хотите.
LinuxKit запускает почти все — onboot
процессов и services
непрерывных — в контейнере. Даже фаза init
, на которой будет загружаться образ ОС, настраивается путем копирования файлов из образов OCI.
Твердое мнение LinuxKit о том, как запускать и создавать вещи, может в некотором смысле ограничивать, но также и освобождать.
Наиболее важные отличия, на мой взгляд, следующие:
- lkt создает наращивает с нуля до необходимого минимума; Пакет строится из существующей базы ОС.
- Поверхность безопасности lkt для атак будет меньше, потому что он начинается не с существующей ОС, а вообще ни с чем.
- Образы lkt могут быть значительно меньше, потому что вы добавляете только то, что вам нужно.
- Сборки lkt запускаются локально. Packer запускает виртуальную машину (vbox, EC2 и т. д.), запускает какой-то базовый образ, изменяет его в соответствии с вашими инструкциями, а затем сохраняет как новый образ. lkt просто манипулирует образами OCI, загружая и копируя файлы для создания нового образа.
Я могу получить тот же чистый результат для различий 1-3 с помощью Packer и LinuxKit, хотя lkt требует гораздо меньше работы. Например. Я предоставил пакет getty
для LinuxKit, чтобы отделить и контролировать, когда и как запускается getty и в каком пространстве имен. Объем работы по отделению и контролю этого в образе упаковщика, построенном на полной ОС, был бы намного сложнее. То же самое для пакета tpm. И т.п.
Самое большое отличие, по моему мнению, это шаг 4. Поскольку Packer запускает виртуальную машину и выполняет в ней команды, он намного медленнее и сложнее в отладке. Один и тот же образ упаковщика, на сборку которого у меня уходит более 10 минут, в lkt может быть построен за 30 секунд. Ваш пробег может варьироваться в зависимости от того, загружаются ли изображения OCI или нет, и от того, насколько сложно то, что вы делаете, но для меня это действительно было на порядок быстрее.
Точно так же пошаговая отладка или поиск ошибок, запуск, отладка и перестроение гораздо сложнее в процессе, который выполняется на удаленной виртуальной машине, чем в локальной команде: lkt build
.
Как я уже сказал, это мое личное мнение, но это причины, по которым я перенес почти всю свою работу по сборке в lkt, внес свой вклад и согласился присоединиться к отличной группе сопровождающих, когда команда попросила меня.
В то же время я глубоко признателен HashiCorp за их фантастический набор инструментов. Пакер сослужил мне хорошую службу; в настоящее время LinuxKit служит мне лучше.
person
deitch
schedule
15.12.2017