Домашнее задание к занятию 4. «Оркестрация группой Docker-контейнеров на примере Docker Compose»
Задача 1
Создайте собственный образ любой операционной системы (например, debian-11) с помощью Packer версии 1.5.0

Задача 2
2.2. Создайте вашу первую виртуальную машину в YandexCloud с помощью Terraform (вместо использования веб-интерфейса YandexCloud). Используйте Terraform-код в директории (src/terraform).

Задача 3
С помощью ansible+docker-compose разверните на виртуальной машине из предыдущего задания систему мониторинга на основе Prometheus/Grafana . Используйте ansible код в директории (src/ansible)
Для получения зачета вам необходимо предоставить вывод команды "docker ps" , все контейнеры, описанные в (docker-compose), должны быть в статусе "Up".

Задача 4
Откройте web браузер, зайдите на страницу http://<внешний_ip_адрес_вашей_ВМ>:3000. Используйте для авторизации логин и пароль из (.env-file). Изучите доступный интерфейс, найдите в интерфейсе автоматически созданные docker-compose панели с графиками(dashboards). Подождите 5-10 минут, чтобы система мониторинга успела накопить данные.


Домашнее задание к занятию 3. «Введение. Экосистема. Архитектура. Жизненный цикл Docker-контейнера»
Задача 1
- Сценарий выполнения задачи:
- создайте свой репозиторий на https://hub.docker.com;
- выберите любой образ, который содержит веб-сервер Nginx;
- создайте свой fork образа;
- реализуйте функциональность: запуск веб-сервера в фоне с индекс-страницей, содержащей HTML-код ниже:
ОТВЕТ: docker pull godjee/nginx:2.0 https://hub.docker.com/r/godjee/nginx
Задача 2
- Сценарий:
- высоконагруженное монолитное Java веб-приложение; - т.к приложение высоконагруженное, думаю, в данном случае лучше всего подойдет физический сервер
- Nodejs веб-приложение; - легкое веб-приложение может быть отлично реализовано с помощью docker
- мобильное приложение c версиями для Android и iOS; - вероятно, с учетом необходимости использования UI/UX для данного направления, наилучшим образом подойдет VM.
- шина данных на базе Apache Kafka; - да, для шины событий отлично может подойти docker, т.к для шины данных важна масштабируемость, которую лучше и проще достичь с помощью контейнеров
- Elasticsearch-кластер для реализации логирования продуктивного веб-приложения — три ноды elasticsearch, два logstash и две ноды kibana; - Можно использовать и VM и docker. Возможно, будет зависеть от этапов реализации продукта.
- мониторинг-стек на базе Prometheus и Grafana; - вполне применим docker для простого развертывания сред
- MongoDB как основное хранилище данных для Java-приложения; - Под хранилище данных для java-приложения отлично бы подошел физический сервер, на мой взгляд.
- Gitlab-сервер для реализации CI/CD-процессов и приватный (закрытый) Docker Registry. - я бы здесь опять же выбрал лучше VM для удобства администрирования и большей изоляции в силу необходимости реализации приватного Docker Registry.
Задача 3
- Запустите первый контейнер из образа centos c любым тегом в фоновом режиме, подключив папку /data из текущей рабочей директории на хостовой машине в /data контейнера. $ docker run --name TEST1 -v $(pwd)/data:/data -d centos:latest sleep 500
- Запустите второй контейнер из образа debian в фоновом режиме, подключив папку /data из текущей рабочей директории на хостовой машине в /data контейнера. $ docker run --name TEST2 -v $(pwd)/data:/data -d debian:latest sleep 500
- Подключитесь к первому контейнеру с помощью docker exec и создайте текстовый файл любого содержания в /data. $ docker exec -it TEST1 bash [root@7e7d061005fa data]# echo 'test number 1' > testfile1.txt
- Добавьте ещё один файл в папку /data на хостовой машине. $ echo 'test number 2' > testfile2.txt
- Подключитесь во второй контейнер и отобразите листинг и содержание файлов в /data контейнера.

Задача 4 (*)
- Воспроизведите практическую часть лекции самостоятельно.
- Соберите Docker-образ с Ansible, загрузите на Docker Hub и пришлите ссылку вместе с остальными ответами к задачам. .Задача 4, к сожалению, выполняется с ошибкой. Если подскажете, в какую сторону копнуть для общего развития - буду премного благодарен. Ошибку прилагаю

Домашнее задание к занятию 2. «Применение принципов IaaC в работе с виртуальными машинами» 05-virt-02-iaac
Задача 1
- Основное преимущество IaaC — автоматизация и упрощение рутинных задач для разработчиков. Возможность на ранних стадиях выявлять проблемы/ошибки/недоработки в кодах или предстоящих релизах. Простота в развертывание новых релизов, при необходимости (применении непрерывного развертывания) можно достичь выпуска релизов без ручного участия
- Идемпотентность является одим из основных принципов IaaC. Данное свойство процедуры развертывания сред помогает проектировать более надежные системы и избегать несогласованности.
Задача 2 Чем Ansible выгодно отличается от других систем управление конфигурациями?
- Отсутствие необходимости установки дополнительных агентов на хостах. А также использование ssh соединения, скорость и масштабируемость, низкий порог входа. Какой, на ваш взгляд, метод работы систем конфигурации более надёжный — push или pull?
- У обоих методов есть свои плюсы и минусы. Но, вероятно, pull — можно считать более «безопасным», т.к и один внешний клиент не имеет прав на внесение изменений в кластер, все обновления накатываются изнутри. Поэтому мой выбор падает на pull
Задача 3
Установите на личный компьютер:
VirtualBox,
Vagrant,
Terraform,
Ansible.
Приложите вывод команд установленных версий каждой из программ, оформленный в Markdown.

Задача 4
Воспроизведите практическую часть лекции самостоятельно.
Создайте виртуальную машину.
Зайдите внутрь ВМ, убедитесь, что Docker установлен с помощью команды
docker ps
Домашнее задание к занятию 1. «Введение в виртуализацию. Типы и функции гипервизоров. Обзор рынка вендоров и областей применения»
Полная виртуализация эмулирует хост-машину, используя аппаратную поддержку виртуализации на низших уровнях, можно создавать разные ВМ с разными ОС.
При программной виртуализации задействованы отдельные изолированные гостевые ОС, поверх функционирования ОС на хост-машине и прослойки в виде гипервизора
Виртуализация уровня ОС — гипервизор заложен в самой ОС хост-машины, все вм используют одно ядро Задача 2
- Высоконагруженная база данных, чувствительная к отказу - вероятно, лучше подходит паравиртуализация за счет возможности реализации кластеров и горячей миграции.
- Различные web-приложения - насколько мне известно, для различных веб-сервисов зачастую используют виртуализацию на уровне ОС. Которая обеспечивает упрощенную, понятную отладку за счет использования одного ядра, а также частого использования ОС Linux, имеющего предпочтения у разработчиков.
- Windows системы для использования Бухгалтерским отделом - как и в первом случае, можно сделать выбор в пользу программной виртуализации за счет обеспечения отличной системы резервного хранения и возможности устранения инцидентов без остановки работы за счет горячей миграции.
- Системы, выполняющие высокопроизводительные расчеты на GPU - однозначно физические сервера, т.к виртуализация в любом своем виде будет отнимать ресурсы. На физическом сервере ресурсы можно оптимизировать максимально эффективно для данных задач. Задача 3
- Для данной задачи отлично подходят два прямых конкурента MS Hyper-V и VMWare vSphere, обеспечивающие возможность развертывания на данных ОС и поддерживающие отличную отказоустойчивую систему кластеров. С учетом наличия Windows OS, преимущественно можно отдать выбор в сторону Hyper-V за счет отличной совместимости данного гипервизора.
- KVM или Xen, одни из самых популярных open source решений. Отлично совместимы с указанными ОС и замечательно показывают себя виртуализации небольших инфраструктур
- Как уже указывал выше, Ms Hyper-v server 2019 отлично подходит в роли гипервизора на базе windows.
- С учетом отсутствия высоопроизводительных задач и исключительно Linux дистрибутивов, подойдет Oracle VirtualBox или Docker. Задача 4 Использование нескольких отличных систем виртуализации может повлечь за собой ряд проблем:
- Они могут создать конфликт системных ресурсов, который приведет к неопределенному поведению, включая сбои виртуальных машин, зависаниям или перезагрузкам, возможно, повреждению данных.
- Небезопасно загружать драйверы ядра для разных решений визуализации одновременно
- Судя по найденной информации, только один гипервизор может использовать функции аппаратного ускорения, предлагаемые современными материнскими платами/чипсетами, поэтому один гипервизор может работать в режиме виртуализации программного обеспечения, что может ограничить выбор гостей виртуальной машины.
- Можно столкнуться с исчерпанием ресурсов, т.к один гипервизор будет не знать, что делает другой.
- Эксплуатация множества виртуалок повлечет за собой привлечение более компетентого персонала
Если нет возможности не вовлекать гетерогенную среду виртуализации в эксплуатацию, то одним из решений минимизации рисков может стать использование платных, ведущих гипервизоров, которые будут иметь возможность тончайшей настройки распределения ресурсов и разграничение используемых ресурсов сети/портов и тд. Как говорит интернет, минимально конфликтующие между собой являются Hyper-V и Xen. Если бы у меня был выбор, однозначно, использование нескольких систем виртуализации я бы постарался обойти.