Требуемые условия завершения
Задача:
2. Развертывание приложений в Docker
- Создайте ВМ Docker o OC Альт Сервер 10.2 o CPU 2 o OZU 4 гб o Storage 60 гб
- Установите Docker и Docker Compose.
- Создайте локальный Docker Registry.
- В домашней директории хоста создайте файл name.txt и запишите в него строку experts.
- Напишите Dockerfile для приложения Hello.
- В качестве базового образа используйте alpine
- Сделайте рабочей директорию /hello и скопируйте в неё name.txt
- Контейнер при запуске должен выполнять команду echo, которая выводит сообщение "Hello! Greetings from" и затем содержимое файла name.txt, после чего завершать свою работу.
- Соберите образ приложения App и загрузите его в ваш Registry.
- Используйте номер версии 1.0 для вашего приложения
- Образ должен быть доступен для скачивания и дальнейшего запуска на локальной машине.
- Настройте мониторинг с помощью NodeExporter, Prometheus и Grafana в Docker.
- Создайте в домашней директории пользователя файл monitoring.yml для Docker Compose:
- Используйте контейнеры NodeExporter, Prometheus и Grafana для сбора, обработки и отображения метрик.
- Настройте Dashboard для центра обработки данных DC в Grafana, в котором будет отображаться загрузка CPU, объём свободной оперативной памяти и места на диске. Для всех серверов.
- Интерфейс Grafana должен быть доступен по внешнему адресу на порту 3000.
Вариант реализации:
HQ-CLI или BR-CLI:
- Переходим в веб-интерфейс PVE на DC-SRV1 и скачиваем Альт Сервер 10.2, для дальнейшего создания ВМ Docker:
- Создаём ВМ Docker o OC Альт Сервер 10.2 o CPU 2 o OZU 4 гб o Storage 60 гб:
- Нажимаем Create VM - в поле Name задаём имя, нажимаем Next
-
- Выбираем ISO - образ и нажимаем Next
-
- нажимаем Next
-
- Задаём размер виртуального диска согласно требованиям задания 60 ГБ и нажимаем Next
-
- Задаём CPU согласно требованиям задания 2 и нажимаем Next
-
- Задаём ОЗУ согласно требованиям задания 4 ГБ и нажимаем Next
-
- На этапе настройки сети оставлям по умолчанию vmbr0 и нажимаем Next
-
- Проверяем заданную конфигурацию ВМ и нажимаем Finish:
-
- результат:
- Нажимаем Start Now и переходим к установки ОС на ВМ:
- результат:
-
- Нажимаем Enter - чтобы начать этап установки Альт Сервер 10.2
-
- Результат:
- После чего можно подключиться в данной ВМ с терминала на клиенте для более удобной настройки
Docker:
- Устанавливаем Docker и Docker Compose:
apt-get update && apt-get install -y docker-{ce,compose}
- Включаем и добавляем в автозагрузку службу docker:
systemctl enable --now docker.service
- Создаём и запускаем локальный Docker Registry:
- поднимает контейнер Docker с именем DockerRegistry из образа registry:2. Контейнер будет слушать сетевые запросы на порту 5000, а параметр --restart=always позволит автоматически запускаться контейнеру после перезагрузки сервера.
docker run -d -p 5000:5000 --restart=always --name DockerRegistry registry:2
- Проверяем:
- Создаём в домашней директории файл name.txt и записываем в него строку experts:
echo "experts" > ~/name.txt
- Создаём Dockerfile для приложения Hello:
vim Dockerfile
-
- содержимое:
где:
FROM - задаёт базовый образ;
WORKDIR - задаёт рабочию директорию внутри контейнера;
COPY - копирует файл с локального хоста в рабочию директорию контейнера;
CMD - определяем команду, которую необходимо будет выполнить после запуска контейнера, после чего контейнер будет остановлен
- Выполняем сборку образа:
- -t - позволяет присвоить имя собираемому образу;
- "." - говорит о том что Dockerfile находится в текущей директории откуда выполняется данная команда и имеет имя именно Dockerfile:
docker build -t hello .
-
- результат:
- Проверяем:
- наличие собранного образа:
-
- запуск контейнера, что он выводит необходимое содержимое:
- загружаем образ собранный из Dockerfile в локальной DockerRegistry:
- присваиваем тег для размещения образа в локальном Docker Registry:
docker tag hello localhost:5000/hello:1.0
-
- Загружаем образ в локальный Docker Registry:
docker push localhost:5000/hello:1.0
-
-
- Результат:
-
- Проверяем:
- наличие образа:
-
- и возможность загрузки из локального Docker Registry:
- перед - удаляем образы localhost:5000/hello:1.0 и hello:
- и возможность загрузки из локального Docker Registry:
-
-
- загружаем образ приложения Hello из локального Docker Registry:
-
-
-
- Также проверяем возможность запуска приложения из скаченного образа из локального репозитория:
-
Docker:
Настроиваем мониторинг с помощью NodeExporter, Prometheus и Grafana
- В домашней директории пользователя создаём файл monitoring.yml:
vim ~/monitoring.yml
-
- содержимое:
version: "3.9"
services:
grafana:
container_name: Grafana
image: grafana/grafana
ports:
- "3000:3000"
volumes:
- grafana-data:/var/lib/grafana
- grafana-configs:/etc/grafana
prometheus:
container_name: Prometheus
image: prom/prometheus
ports:
- "9090:9090"
volumes:
- prom-data:/prometheus
- prom-configs:/etc/prometheus
node-exporter:
container_name: NodeExporter
image: prom/node-exporter
ports:
- "9100:9100"
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.mount-points-exclude'
- '^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/aufs)($$|/)'
volumes:
grafana-data:
grafana-configs:
prom-data:
prom-configs:
Данный файл представляет описание трёх контейнеров: grafana, prometheus и node-exporter:
-
- grafana - это то, что мы будем видеть в браузере, это визуализатор метрик;
- prometheus - это своего рода база данных в которой хранятся метрики;
- node-exporter - это контейнер, который будет собирать метрики и отдавать на порту 9100
Схема работы получается следующая: prometheus забирает метрики с node-exporter, а grafana забирает метрики с prometheus
- Выполняем сборку и запуск стека контейнеров описанных в файле monitoring.yml:
docker-compose -f monitoring.yml up -d
- Проверяем:
- Переходим в браузер http://<внешний IP адрес ВМ Docker>:3000
- для доступа в веб-интерфейс Grafana - стандартный логин и пароль "admin":
-
- Задаём новый пароль и подтверждаем его:
-
- Результат:
- Добавляем в Grafana - Prometheus:
- на главном меню нажимаем Add your first data source
-
- выбираем Prometheus:
-
- вводим адрес контейнера с Prometheus:
-
- Затем внизу на этой же странице нажимаем Save and Test:
-
-
- результат теста:
-
- Далее необходимо экспортировать grafana dashboard:
- grafana dashboard node_exporter
- переходим на сайт и нажимаем Download JSON
- grafana dashboard node_exporter
-
- Результат:
- Открываем скаченный файл и копируем его содержимое, затем переходим в наш веб-интерфейс grafana:
- нажимаем Create your first dashboard:
-
- Нажимаем Import dashboard:
-
- Вставляем скопированное содержимое из скаченного файла и нажимаем Load:
-
- Затем выбираем наш Prometheus и нажимаем Import:
-
-
- Результат:
-
На данном этапе пока ещё результатов нет, так как необходимо добавить node-exporter в prometheus.yml расположенный в volumes docker
- Открываем на редактирование файл по пути /var/lib/docker/volumes/root_prom-configs/_data/prometheus.yml:
vim /var/lib/docker/volumes/root_prom-configs/_data/prometheus.yml
-
- добавляем в конец информацию о нашем контейнере с node-exporter:
- Далее переходим в веб-интерфейс prometheus по http://<внешний IP адрес ВМ Docker>:9090
- перейти в раздел Status -> Targets
-
- Должен появиться новый Targets который мы добавили в файле prometheus.yml
- Чтобы он появился необходимо перезапустить контейнеры:
docker-compose -f monitoring.yml restart
-
- результат:
- Возвращаемся в веб-интерфейс prometheus:
- Переходим в веб-интерфейс Grafana:
- наблюдаем необходимую по заданию информация - CPU, объём свободной оперативной памяти и места на диске:
- но пока только для ВМ Docker:
- наблюдаем необходимую по заданию информация - CPU, объём свободной оперативной памяти и места на диске:
DC-SRV1 | DC-SRV2:
- Устанавливаем node-exporter:
apt-get install prometheus-node_exporter -y
- Запускаем службу
systemctl enable --now prometheus-node_exporter
Docker:
- Открываем на редактирование файл по пути /var/lib/docker/volumes/root_prom-configs/_data/prometheus.yml:
vim /var/lib/docker/volumes/root_prom-configs/_data/prometheus.yml
-
- добавляем в конец информацию о нашем контейнере с node-exporter:
- перезапустить контейнеры:
docker-compose -f monitoring.yml restart
- Возвращаемся в веб-интерфейс prometheus:
- Переходим в веб-интерфейс Grafana:
Последнее изменение: пятница, 14 июня 2024, 15:11