feat: added demonstration 5.3

This commit is contained in:
Black_Raven committed 2026-06-17 01:14:25 +03:00
1 parent b0e5a6b653
commit b599bd410b
6 files changed
+394

No files matched your search

@@ -0,0 +1,177 @@
---
course_code: VKCLOUD-80
artifact_type: PR
module: 5
task_code: 3
task_title: Создание образов с Packer
student_fio: Ремизов Кирилл Львович
date: 2026-06-16
source_docs:
- 3-Конспект лекций - VK 1.md
- 4-Практические работы - VK -1.md
commands_used:
- packer --version
- packer plugins installed
- packer init .
- packer validate .
- packer build .
- openstack image list
- openstack server create
- ssh
- curl
attached_files:
- VKC_PR_M05_03_packer_log_РемизовКЛ_20260616.log
- VKC_PR_M05_03_packer_packer-config_РемизовКЛ_20260516.pkr.hcl
- VKC_PR_M05_03_packer_image_РемизовКЛ_20260616.png
- VKC_PR_M05_03_packer_curl_РемизовКЛ_20260616.png
status: final
---
# Отчёт по практической демонстрации
## 1. Цель
Освоить инструмент **Packer** для автоматизации создания кастомизированных образов виртуальных машин в облаке VK Cloud. Научиться:
- описывать процесс сборки образа декларативно с помощью HCL-конфигурации;
- использовать провизоры (shell) для установки и настройки ПО внутри собираемой ВМ;
- решать проблемы с сетью и DNS в процессе сборки;
- проверять работоспособность созданного образа путём запуска тестовой ВМ.
## 2. Что было прочитано перед выполнением
- **Документ:** 3-Конспект лекций - VK 1.md
- **Раздел/тема:** Модуль 5 «Контейнеризация и автоматизация», тема 5.3 «Создание образов с Packer»
- **Ключевые понятия:**
- Packer как инструмент для автоматической сборки образов (Immutable Infrastructure).
- Структура конфигурации: `packer` (плагины), `source` (параметры облака, базовый образ, сеть, ключи), `build` (провизоры).
- Использование провизора `shell` для выполнения команд внутри собираемой ВМ.
- Интеграция с OpenStack (плагин `openstack`).
- Переменные окружения для гибкой настройки.
- **Дополнительно:** Документ 4-Практические работы - VK -1.md, демонстрация 5.3 «Создание образов с Packer».
## 3. Ход выполнения
### Демонстрация 5.3: Создание образов с Packer
#### Этап 0. Подготовка окружения
- Проверена версия Packer: `1.15.4` (команда `packer --version`).
- Установлен плагин OpenStack версии `1.1.3` (подтверждено `packer plugins installed`).
- Заданы переменные окружения:
```bash
export SOURCE_IMAGE=8582cdba-6be5-41d4-834f-b0fa920b3dcf # базовый Ubuntu 22.04
export NETWORK_ID=ec8c610e-6387-447e-83d2-d2c541e88164 # сеть internet
```
#### Этап 1. Инициализация и валидация конфигурации
- Выполнена инициализация:
```bash
packer init .
```
Плагин OpenStack загружен (уже был установлен, повторная загрузка подтверждена).
- Проверена корректность конфигурации:
```bash
packer validate .
```
Результат: `The configuration is valid.`
#### Этап 2. Сборка образа с помощью Packer
Запущен процесс сборки:
```bash
packer build .
```
В логе видна последовательность действий Packer:
1. **Загрузка flavour** `STD3-2-6` (ID подтверждён).
2. **Создание тома** (block storage volume) для временной ВМ.
3. **Запуск сервера** с указанными параметрами: сеть `internet`, группа безопасности `ssh`, ключ `postgress-test-ViPomgZ4`.
4. **Ожидание готовности** – сервер получает публичный IP (`95.163.214.208`).
5. **Подключение по SSH** – используется коммуникатор SSH с приватным ключом `postgress-test-ViPomgZ4.pem`.
6. **Выполнение провизора `shell`** – внутри ВМ последовательно выполняются команды:
- Фикс файла `/etc/hosts` (добавление записи `127.0.0.1 $(hostname)`).
- Настройка DNS: удаление существующего `resolv.conf`, установка `nameserver 8.8.8.8` и `1.1.1.1`, защита от перезаписи (`chattr +i`).
- Обновление списка пакетов (`apt-get update`). На этом этапе возникли временные ошибки разрешения доменов, но благодаря фиксам DNS и наличию кеша пакетов установка nginx прошла успешно (пакет уже был установлен в базовом образе).
- Включение и запуск nginx.
- Создание тестовой страницы `/var/www/html/index.html` с содержимым `<h1>Hello from Packer!</h1>`.
- Очистка временных файлов и кэша пакетов.
7. **Завершение работы** – временная ВМ останавливается, создаётся образ, затем ВМ и том удаляются. В логе появилась ошибка `Error terminating server, may still be around: Resource not found`, но это не повлияло на создание образа.
8. **Создание образа** – финальный образ с именем `nginx-custom-image-2026-06-16-2107` (ID `f69ca872-96a2-40a9-ad31-4e098b0f9b0e`).
**Время сборки:** 7 минут 44 секунды.
#### Этап 3. Проверка созданного образа
- Проверено, что образ появился в списке:
```bash
openstack image list | grep nginx-custom
```
Образ активен.
- Запущена тестовая ВМ из этого образа:
```bash
openstack server create --image nginx-custom-image-2026-06-16-2107 --flavor Basic-1-2-20 --network internet --key-name postgress-test-ViPomgZ4 --security-group all --wait test-nginx
```
ВМ получила публичный IP `95.163.214.174`.
- Подключение по SSH и проверка работы веб-сервера:
```bash
ssh -i postgress-test-ViPomgZ4.pem ubuntu@95.163.214.174
curl localhost
```
Вывод: `<h1>Hello from Packer!</h1>` – всё работает (скриншот приложен).
## 4. Ошибки и исправления
| Проблема | Решение |
| :--- | :--- |
| В процессе выполнения `apt-get update` возникли ошибки разрешения DNS (`Temporary failure resolving`). | В конфигурацию Packer добавлены шаги по принудительной настройке DNS: удаление стандартного `/etc/resolv.conf`, установка публичных DNS-серверов (8.8.8.8, 1.1.1.1) и защита файла от перезаписи через `chattr +i`. Также добавлена запись `127.0.0.1 $(hostname)` в `/etc/hosts` для корректной работы `sudo`. |
| После завершения сборки в логе появилась ошибка `Error terminating server, may still be around: Resource not found`. | Это не критично – сервер уже был остановлен и образ создан. Ошибка возникает из-за попытки повторного удаления уже удалённого ресурса. На результат сборки не влияет. |
## 5. Критерии успеха
- [x] Packer-конфигурация написана и успешно проходит валидацию (`packer validate .`).
- [x] Сборка образа завершена без ошибок (статус `Builds finished`).
- [x] Создан новый образ с именем, содержащим временную метку.
- [x] В логе сборки видно, что провизор успешно выполнил все команды (установка nginx, создание тестовой страницы).
- [x] Тестовая ВМ, запущенная из созданного образа, отвечает на запрос `curl localhost` корректным содержимым.
## 6. Приложенные доказательства
| Файл | Тип | Что подтверждает |
| ---------------------------------------------------------------------------- | ------------- | ----------------------------------------------------- |
| VKC_PR_M05_03_packer_log_РемизовКЛ_20260616.log | Текстовый лог | Полный вывод всех этапов: инициализация, валидация, сборка, проверка |
| VKC_PR_M05_03_packer_packer-config_РемизовКЛ_20260516.pkr.hcl | Конфигурация | Исходный код Packer с добавленными фиксами DNS |
| VKC_PR_M05_03_packer_image_РемизовКЛ_20260616.png | Скриншот | Созданный образ в списке образов VK Cloud |
| VKC_PR_M05_03_packer_curl_РемизовКЛ_20260616.png | Скриншот | Вывод `curl localhost` на тестовой ВМ |
## 7. Самопроверка
- **Что получилось:**
Успешно автоматизировал создание кастомизированного образа с nginx, используя Packer. Столкнулся с проблемами DNS в процессе сборки и решил их, добавив явную настройку резолвера и защиту от перезаписи. Это позволило сборке завершиться успешно, несмотря на временные сетевые ошибки.
- **Что осталось непонятным:**
- Почему в базовом образе Ubuntu 22.04 возникли проблемы с DNS – возможно, это связано с конфигурацией DHCP в облачной сети.
- Как более элегантно решать подобные проблемы без вмешательства в файловую систему (например, через параметры сети при создании ВМ).
- Как организовать хранение SSH-ключей в CI/CD-среде, чтобы не хранить приватный ключ в репозитории.
- **Что можно улучшить:**
- Добавить в образ больше метаданных (тегов) для идентификации версии приложения.
- Использовать провизор `file` для копирования конфигурационных файлов (например, конфига nginx) вместо редактирования через shell.
- Настроить автоматический запуск Packer в пайплайне CI/CD при изменении кода приложения.
## 8. Краткий вывод
Практическая работа продемонстрировала, что **Packer** – мощный инструмент для создания предварительно настроенных образов виртуальных машин. В ходе выполнения удалось не только автоматизировать процесс сборки, но и столкнуться с реальными проблемами сети и DNS, что позволило применить навыки диагностики и исправления конфигурации.
Ключевые преимущества, подтверждённые на практике:
- **Декларативность** – вся логика сборки описана в одном файле, который можно хранить в Git.
- **Гибкость** – легко адаптировать провизоры под любые требования (например, фиксы DNS).
- **Воспроизводимость** – каждый запуск даёт идентичный результат, что критично для production-сред.
Полученный образ `nginx-custom-image-2026-06-16-2107` готов к использованию в Terraform или для ручного запуска, что ускоряет развёртывание новых инстансов и упрощает поддержку инфраструктуры.