EC2: различия между версиями
Нет описания правки |
Zorg (обсуждение | вклад) (обновлено форматирование, указано что для новых ядер сборка своего варианта уже не нужна) |
||
(не показано 11 промежуточных версий 5 участников) | |||
Строка 1: | Строка 1: | ||
[[Категория:Devel]] | [[Категория:Devel]] | ||
== | = Amazon EC2 AMI с использованием mkimage-profiles и packer = | ||
== Создание и регистрация AMI из готового образа == | |||
{{note|Инструкции ниже упрощены и адаптированы под ALT Linux, их оригинал и дополнительные технические детали можно изучить в репозитории: [https://github.com/five23/archlinux-ec2.git archlinux-ec2].}} | |||
Для сборки AMI используется уже развернутое окружение в Amazon AWS. Достаточно следующего минимального набора: VPC и subnet. Subnet должна иметь Internet Gateway, то есть инстансы в ней должны быть доступны публично (SSH достаточно). | |||
В указанной subnet будет развернута временная EC2, к которой будет подключен дополнительный диск. На этот диск будет записан указанный образ ALT Linux и из полученного диска создан AMI. | |||
Предположим, что образ ALT Linux из которого планируется создать EC2 instance уже готов. Автоматизировать создание и регистрацию EC2 можно с использованием {{pkg|packer}}, см. также [https://www.packer.io/ packer]. | |||
После установки packer, необходимо доустановить плагин, который поддерживает работу с Amazon: | |||
<syntaxhighlight lang="bash">$ packer plugins install github.com/hashicorp/amazon</syntaxhighlight> | |||
Необходимые файлы для сборки можно найти в репозитории: [https://github.com/zOrg1331/altlinux-ec2 altlinux-ec2]. | |||
Точка входа это [https://github.com/zOrg1331/altlinux-ec2/blob/master/Makefile Makefile]. | |||
В ''Makefile'' переменные ''AWS_REGION'', ''AWS_VPC'', ''AWS_SUBNET'' необходимо изменить в соответствии с имеющимся AWS окружением. Можно отредактировать сам файл или задать параметры как переменные окружения. | |||
''SOURCE_AMI'' это идентификатор AMI, из которого будет создана временная EC2. Это может быть какой угодно Linux, поддерживаемый AWS. В примере выбран AMI с Debian из региона ''eu-central-2''. Полный список для Debian можно найти здесь: [https://wiki.debian.org/Cloud/AmazonEC2Image/Bookworm AmazonEC2Image/Bookworm]. | |||
''AMI_NAME'' и ''AMI_DESCRIPTION'' опциональны, но могут быть удобны, если создание AMI поставлено на поток. | |||
В ''IMAGEPATH'' ожидается путь до образа диска (сжатого ''xz'') из которого разворачивать AMI. Подробнее смотри следующий раздел. | |||
Токены доступа к AWS ожидаются в окружении или в {{path|~/.aws/credentials}}. | |||
''Makefile'' будет вызывать {{pkg|packer}} с конфигурацией заданной в JSON файле [https://github.com/zOrg1331/altlinux-ec2/blob/master/packer-cfg.json packer-cfg.json]. Файл не требует изменений. | |||
В JSON файле конфигурации можно заметить что после загрузки образа во временную EC2 будет вызван скрипт [https://github.com/zOrg1331/altlinux-ec2/blob/master/provision.sh provision.sh]. Именно он "прошивает" образ на дополнительный раздел. Как видно из скрипта, никаких дополнительных действий кроме команды ''dd'' не нужно. | |||
Запуск сборки после установки переменных окружения предельно прост: | |||
<syntaxhighlight lang="bash">$ make ami</syntaxhighlight> | |||
== Public | Обращайте внимание на вывод команды, он достаточно информативен, чтобы определить точку сбоя. | ||
В конце работы команды будет выведен идентификатор AMI, который далее можно использовать в разворачивании EC2. | |||
== Создание образа ALT Linux пригодного для EC2 == | |||
В целом, достаточно образа ''vm/cloud-systemd.img.xz'' получаемого из [[Mkimage-profiles]]: | |||
<syntaxhighlight lang="bash">$ make ROOTPW=myStrongPass DEBUG=1 vm/cloud-systemd.img.xz</syntaxhighlight> | |||
{{Attention|Обновление ядра внутри запущенной EC2 (''update-kernel'') приведет к потери сети, если новое ядро не имеет модуля ''ena.ko''.}} | |||
{{Note|На момент 2024-10-13 созданный EC2 instance загрузится, но не будет иметь сети. В следующем разделе описано как добавить поддержку сети самостоятельно.}} | |||
{{Note|Начиная с ядра ''6.6.57-6.6-alt1'' поддержка Amazon ENA включена в стандартный набор модулей и следующая секция не требуется.}} | |||
=== Включение поддержки ENA в ядре и сборка образа с ним === | |||
Для сборки собственного ядра достаточно внимательно и аккуратно следовать инструкциям на странице [[Kernel/build_packages]]. | |||
Требуемое изменение в ядро вносится одной командой: | |||
<syntaxhighlight lang="bash">$ scripts/config --file config --module ENA_ETHERNET</syntaxhighlight> | |||
После выполнения всех инструкций из указанной выше статьи у вас должен быть готов пакет с ядром в каталоге ''hasher'', допустим ''kernel-image-std-def-6.1.112-alt2.x86_64.rpm''. | |||
Для того чтобы собрать образ диска для AMI именно с этим ядром, нужно сделать следующее. | |||
Внести изменения в сценарий ''mkimage-profiles'': | |||
<syntaxhighlight lang="patch"> | |||
diff --git a/conf.d/vm.mk b/conf.d/vm.mk | |||
index 62984e79..7fad629b 100644 | |||
--- a/conf.d/vm.mk | |||
+++ b/conf.d/vm.mk | |||
@@ -32,6 +32,7 @@ vm/cloud-systemd: vm/systemd-net mixin/cloud-init use/vmguest/kvm use/tty/S0 \ | |||
@$(call add,BASE_PACKAGES,systemd-settings-disable-kill-user-processes) | |||
@$(call add,DEFAULT_SERVICES_ENABLE,getty@tty1 getty@ttyS0) | |||
@$(call add,DEFAULT_SERVICES_DISABLE,consolesaver) | |||
+ @$(call add,THE_PACKAGES,kernel-image-std-def#6.1.112-alt2) | |||
vm/cloud-sysv: vm/net mixin/cloud-init use/vmguest/kvm use/power/acpi/button; @:</syntaxhighlight> | |||
Подготовить файл конфигурации для APT ''extra-apt.conf'': | |||
<syntaxhighlight lang="apt"> | |||
Dir::Etc::main "/dev/null"; | |||
Dir::Etc::parts "/var/empty"; | |||
Dir::Etc::SourceParts "/var/empty"; | |||
Dir::Etc::SourceList "/home/USER/ami/sources.list";</syntaxhighlight> | |||
В соответствующем ''sources.list'' должен быть указан путь до репозитория hasher: | |||
<syntaxhighlight lang="apt"> | |||
rpm [alt] http://ftp.altlinux.org/pub/distributions/ALTLinux Sisyphus/x86_64 classic | |||
rpm [alt] http://ftp.altlinux.org/pub/distributions/ALTLinux Sisyphus/noarch classic | |||
rpm-dir file:/home/USER/hasher/repo x86_64 hasher</syntaxhighlight> | |||
Тогда сборка образа будет выглядеть следующим образом: | |||
<syntaxhighlight lang="bash">$ make ROOTPW=mySecretPass DEBUG=1 APTCONF=/home/USER/ami/extra-apt.conf vm/cloud-systemd.img.xz</syntaxhighlight> | |||
Данный образ уже будет иметь поддержку сети в окружении AWS. | |||
= Amazon EC2 при помощи ec2-api-tools / ec2-ami-tools и mkve = | |||
== ALT Linux и Amazon EC2 == | |||
В настоящий момент возможно запустить виртуальные машины, созданные из ALT Linux Sisyphus на EC2. Запуск машин, созданных на базе стабильных бранчей указанным ниже способом пока невозможен. Вы можете как использовать публичные образы, так и создавать свои собственные. | |||
== Public AMIs == | |||
В настоящий момент есть 2 public AMI: | В настоящий момент есть 2 public AMI: | ||
ami-52ed4f3b (минимальный Сизиф от 20120618, EBS) | *ami-52ed4f3b (us-east-1, минимальный Сизиф от 20120618, EBS) | ||
ami-caec4ea3 (минимальный Сизиф от 20120618, Instance store) | *ami-caec4ea3 (us-east-1, минимальный Сизиф от 20120618, Instance store) | ||
== Как создать | == Как создать собственный AMI (instance store) == | ||
AMI бывают двух типов: с instance store и с EBS store. Instance store живёт до выключения машины, EBS перманентен. | |||
Для создания собственного AMI с instance store: | |||
*Устанавливаем ec2-api-tools, ec2-ami-tools | *Устанавливаем ec2-api-tools, ec2-ami-tools | ||
*Настраиваем [[Hasher]] | *Настраиваем [[Hasher]] | ||
Строка 27: | Строка 126: | ||
*Вывод последней команды расскажет о том, как запустить виртуальную машину из загруженного образа (потребуется ещё иметь зарегистрированный ssh-ключ). Т.к. это instance store, образ её диска будет жить до выключения. | *Вывод последней команды расскажет о том, как запустить виртуальную машину из загруженного образа (потребуется ещё иметь зарегистрированный ssh-ключ). Т.к. это instance store, образ её диска будет жить до выключения. | ||
*Имя внутреннего пользователя для доступа по ssh - ec2-user | *Имя внутреннего пользователя для доступа по ssh - ec2-user | ||
== Как создать собственный AMI (EBS store) == | |||
Выполняем все действия из предыдущего пункта до создания тарбола включительно. После этого требуется выполнить следующее: | |||
*Создать новый Volume, подключить его к какому-нибудь Instance | |||
**ec2-create-volume --size 10 --availability-zone us-east-1a | |||
**ec2-attach-volume vol-xxxxxxxx --instance i-xxxxxxxx --device /dev/sdh | |||
*Создать на /dev/xvdh ext3, подмонтировать куда-нибудь (/tmp/mnt) | |||
*Закачать тарбол в данный instance | |||
*Развернуть его на /dev/xvdh (/tmp/mnt) | |||
*Отмонтировать | |||
*Отсоединить от VM (ec2-detach-volume vol-xxxxxxxx --instance i-xxxxxxxx) | |||
*Создать снапшот ec2-create-snapshot vol-xxxxxxxx | |||
*Зарегистрировать AMI ec2reg -a x86_64 -d "Description" -n "fancy name" -s snap-xxxxxxxx --kernel "aki-825ea7eb" (PVGRUB для us-east-1) | |||
== Технические детали == | == Технические детали == | ||
Главных отличий у EC2-машины два: | Главных отличий у EC2-машины два: | ||
#Она грузится через PVGRUB т.е. ей нужен файл /boot/grub/menu.lst от '''первого''' grub. Также нужно несжатое ядро (vmlinux). Сгодилось бы и сжатое будь оно сжато gz/bz2. | #Она грузится через PVGRUB т.е. ей нужен файл /boot/grub/menu.lst от '''первого''' grub. Также нужно несжатое ядро (vmlinux). Сгодилось бы и сжатое будь оно сжато gz/bz2. Такое ядро содержится в подпакетах kernel-image-domU-<flavoir>. | ||
#При инициализации нужно как минимум положить ssh-ключ. Для этого существует специальный пакет cloud-init. | #При инициализации нужно как минимум положить ssh-ключ. Для этого существует специальный пакет cloud-init. | ||
== Поддержка == | == Поддержка == | ||
Поддержка оказывается в списке рассылке sisyphus@ и в личной почте vitty@. | Поддержка оказывается в списке рассылке sisyphus@ и в личной почте vitty@. | ||
[[Категория:Admin]] | |||
{{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}} |
Текущая версия от 16:31, 19 октября 2024
Amazon EC2 AMI с использованием mkimage-profiles и packer
Создание и регистрация AMI из готового образа
Для сборки AMI используется уже развернутое окружение в Amazon AWS. Достаточно следующего минимального набора: VPC и subnet. Subnet должна иметь Internet Gateway, то есть инстансы в ней должны быть доступны публично (SSH достаточно).
В указанной subnet будет развернута временная EC2, к которой будет подключен дополнительный диск. На этот диск будет записан указанный образ ALT Linux и из полученного диска создан AMI.
Предположим, что образ ALT Linux из которого планируется создать EC2 instance уже готов. Автоматизировать создание и регистрацию EC2 можно с использованием packer, см. также packer.
После установки packer, необходимо доустановить плагин, который поддерживает работу с Amazon:
$ packer plugins install github.com/hashicorp/amazon
Необходимые файлы для сборки можно найти в репозитории: altlinux-ec2.
Точка входа это Makefile.
В Makefile переменные AWS_REGION, AWS_VPC, AWS_SUBNET необходимо изменить в соответствии с имеющимся AWS окружением. Можно отредактировать сам файл или задать параметры как переменные окружения.
SOURCE_AMI это идентификатор AMI, из которого будет создана временная EC2. Это может быть какой угодно Linux, поддерживаемый AWS. В примере выбран AMI с Debian из региона eu-central-2. Полный список для Debian можно найти здесь: AmazonEC2Image/Bookworm.
AMI_NAME и AMI_DESCRIPTION опциональны, но могут быть удобны, если создание AMI поставлено на поток.
В IMAGEPATH ожидается путь до образа диска (сжатого xz) из которого разворачивать AMI. Подробнее смотри следующий раздел.
Токены доступа к AWS ожидаются в окружении или в ~/.aws/credentials.
Makefile будет вызывать packer с конфигурацией заданной в JSON файле packer-cfg.json. Файл не требует изменений.
В JSON файле конфигурации можно заметить что после загрузки образа во временную EC2 будет вызван скрипт provision.sh. Именно он "прошивает" образ на дополнительный раздел. Как видно из скрипта, никаких дополнительных действий кроме команды dd не нужно.
Запуск сборки после установки переменных окружения предельно прост:
$ make ami
Обращайте внимание на вывод команды, он достаточно информативен, чтобы определить точку сбоя.
В конце работы команды будет выведен идентификатор AMI, который далее можно использовать в разворачивании EC2.
Создание образа ALT Linux пригодного для EC2
В целом, достаточно образа vm/cloud-systemd.img.xz получаемого из Mkimage-profiles:
$ make ROOTPW=myStrongPass DEBUG=1 vm/cloud-systemd.img.xz
Включение поддержки ENA в ядре и сборка образа с ним
Для сборки собственного ядра достаточно внимательно и аккуратно следовать инструкциям на странице Kernel/build_packages.
Требуемое изменение в ядро вносится одной командой:
$ scripts/config --file config --module ENA_ETHERNET
После выполнения всех инструкций из указанной выше статьи у вас должен быть готов пакет с ядром в каталоге hasher, допустим kernel-image-std-def-6.1.112-alt2.x86_64.rpm.
Для того чтобы собрать образ диска для AMI именно с этим ядром, нужно сделать следующее.
Внести изменения в сценарий mkimage-profiles:
diff --git a/conf.d/vm.mk b/conf.d/vm.mk
index 62984e79..7fad629b 100644
--- a/conf.d/vm.mk
+++ b/conf.d/vm.mk
@@ -32,6 +32,7 @@ vm/cloud-systemd: vm/systemd-net mixin/cloud-init use/vmguest/kvm use/tty/S0 \
@$(call add,BASE_PACKAGES,systemd-settings-disable-kill-user-processes)
@$(call add,DEFAULT_SERVICES_ENABLE,getty@tty1 getty@ttyS0)
@$(call add,DEFAULT_SERVICES_DISABLE,consolesaver)
+ @$(call add,THE_PACKAGES,kernel-image-std-def#6.1.112-alt2)
vm/cloud-sysv: vm/net mixin/cloud-init use/vmguest/kvm use/power/acpi/button; @:
Подготовить файл конфигурации для APT extra-apt.conf:
Dir::Etc::main "/dev/null";
Dir::Etc::parts "/var/empty";
Dir::Etc::SourceParts "/var/empty";
Dir::Etc::SourceList "/home/USER/ami/sources.list";
В соответствующем sources.list должен быть указан путь до репозитория hasher:
rpm [alt] http://ftp.altlinux.org/pub/distributions/ALTLinux Sisyphus/x86_64 classic
rpm [alt] http://ftp.altlinux.org/pub/distributions/ALTLinux Sisyphus/noarch classic
rpm-dir file:/home/USER/hasher/repo x86_64 hasher
Тогда сборка образа будет выглядеть следующим образом:
$ make ROOTPW=mySecretPass DEBUG=1 APTCONF=/home/USER/ami/extra-apt.conf vm/cloud-systemd.img.xz
Данный образ уже будет иметь поддержку сети в окружении AWS.
Amazon EC2 при помощи ec2-api-tools / ec2-ami-tools и mkve
ALT Linux и Amazon EC2
В настоящий момент возможно запустить виртуальные машины, созданные из ALT Linux Sisyphus на EC2. Запуск машин, созданных на базе стабильных бранчей указанным ниже способом пока невозможен. Вы можете как использовать публичные образы, так и создавать свои собственные.
Public AMIs
В настоящий момент есть 2 public AMI:
- ami-52ed4f3b (us-east-1, минимальный Сизиф от 20120618, EBS)
- ami-caec4ea3 (us-east-1, минимальный Сизиф от 20120618, Instance store)
Как создать собственный AMI (instance store)
AMI бывают двух типов: с instance store и с EBS store. Instance store живёт до выключения машины, EBS перманентен. Для создания собственного AMI с instance store:
- Устанавливаем ec2-api-tools, ec2-ami-tools
- Настраиваем Hasher
- Берём актуальную копию скриптов: git clone git://git.altlinux.org/people/vitty/packages/ec2.git
- Устанавливаем следующие переменные окружения:
- AWS_USER_ID (AWS Account ID на https://aws-portal.amazon.com/gp/aws/securityCredentials#account_identifiers)
- AWS_ACCESS_KEY (Access Key ID на https://aws-portal.amazon.com/gp/aws/securityCredentials)
- AWS_SECRET_KEY (Secret access key на https://aws-portal.amazon.com/gp/aws/securityCredentials)
- EC2_CERT (Вкладка X509 на https://aws-portal.amazon.com/gp/aws/securityCredentials)
- EC2_PRIVATE_KEY (Вкладка X509 на https://aws-portal.amazon.com/gp/aws/securityCredentials)
- В склонированном каталоге ec2 выполняем:
- ./create_ec2_tar.sh
- sudo ./create_ec2_image.sh ./output-20120528.tar $((2*1024*1024*1024)) (где output-xxxxxxxx.tar - сгенерированный предыдущей командой образ, второй параметр - объём диска в байтах)
- ./create_ami.sh ./output-20120528.img (где output-xxxxxxxx.img - сгенерированный предыдущей командой образ файловой системы).
- Вывод последней команды расскажет о том, как запустить виртуальную машину из загруженного образа (потребуется ещё иметь зарегистрированный ssh-ключ). Т.к. это instance store, образ её диска будет жить до выключения.
- Имя внутреннего пользователя для доступа по ssh - ec2-user
Как создать собственный AMI (EBS store)
Выполняем все действия из предыдущего пункта до создания тарбола включительно. После этого требуется выполнить следующее:
- Создать новый Volume, подключить его к какому-нибудь Instance
- ec2-create-volume --size 10 --availability-zone us-east-1a
- ec2-attach-volume vol-xxxxxxxx --instance i-xxxxxxxx --device /dev/sdh
- Создать на /dev/xvdh ext3, подмонтировать куда-нибудь (/tmp/mnt)
- Закачать тарбол в данный instance
- Развернуть его на /dev/xvdh (/tmp/mnt)
- Отмонтировать
- Отсоединить от VM (ec2-detach-volume vol-xxxxxxxx --instance i-xxxxxxxx)
- Создать снапшот ec2-create-snapshot vol-xxxxxxxx
- Зарегистрировать AMI ec2reg -a x86_64 -d "Description" -n "fancy name" -s snap-xxxxxxxx --kernel "aki-825ea7eb" (PVGRUB для us-east-1)
Технические детали
Главных отличий у EC2-машины два:
- Она грузится через PVGRUB т.е. ей нужен файл /boot/grub/menu.lst от первого grub. Также нужно несжатое ядро (vmlinux). Сгодилось бы и сжатое будь оно сжато gz/bz2. Такое ядро содержится в подпакетах kernel-image-domU-<flavoir>.
- При инициализации нужно как минимум положить ssh-ключ. Для этого существует специальный пакет cloud-init.
Поддержка
Поддержка оказывается в списке рассылке sisyphus@ и в личной почте vitty@.