====== DevOps1. Основные инструменты 2025 ====== ===== Программа курса ===== * [[https://www.specialist.ru/course/kuber|DevOps. Уровень 1. Инфраструктура как код, основные инструменты]] * [[https://www.specialist.ru/track/dp-devops|ДП-ДЕВОПС-М]] ===== Модуль 0. Подготовка к занятию ===== - Узнать и записать свой номер стенда: X= - Сообщить его в чат преподавателю ===== Модуль 1: Введение и развертывание стенда ===== ==== Теория ==== * [[https://dzen.ru/a/ZVIBk2kT0ntemhwK|∞ Дорожная карта DevOps-инженера в 2023 году]] * Ссылки в разделе [[Сервис Git]] ==== Лабораторные работы: Развертывание стенда и инициализация репозитория Git ==== * Разворачиваем стенд курса [[https://www.specialist.ru/course/yun2-b|Linux. Уровень 2. Администрирование сервисов и сетей]] или [[https://rutube.ru/video/18b52d9721f7464b4485fec7d894e8ca/|Развертывание стенда дома (смотреть с 13-й минуты)]] === 1.1 Схема стенда, импорт, настройка и запуск VM gate и server === Запустите с правами Administrator C:\cmder\cmder.exe bash cd test -d conf && rm -r conf git clone http://val.bmstu.ru/unix/conf.git cd conf/virtualbox/ !!! 8 - это номер курса, вместо X укажите Ваш номер стенда, если не знаете его, спросите преподавателя !!! ./setup.sh X 8 === 1.2 Настройка сети VM gate и server === * [[Настройка стендов слушателей#Настройка виртуальных систем Unix]] с использованием [[Настройка стендов слушателей#Скрипты автоконфигурации]] * gate # sh net_gate.sh # init 6 * server # sh net_server.sh # init 6 * Создать в Putty профили gate, server и подключиться === 1.3 Инициализация репозитория Git === * [[Сервис Git]], команды init, add, commit для каталога /etc на server * [[Финальная настройка DNS сервера]] server:~# sh conf/dns.sh * Настройка клиента DNS на gate и server # cat /etc/resolv.conf search corpX.un nameserver 192.168.X.10 # nslookup ns === 1.4 Работа с репозиторием Git === server# cat /etc/bind/corpX.un ... webd A 192.168.X.10 * [[Сервис Git]], команды log, show, diff, reset ==== Вопросы ==== - Перечислите и объясните команды git ===== Модуль 2: Docker ===== ==== Теория ==== * Ссылки в разделе [[Технология Docker]] * [[https://ru.wikipedia.org/wiki/Микросервисная_архитектура|Микросервисная архитектура]] ==== Лабораторные работы: Установка docker и работа с контейнерами ==== === 2.1 Причины использования Docker === !!! Методическая рекомендация, запустить установку Docker (только на server) из лабораторной работы 2.2 * Рассмотрим [[Сервис HTTP#Пример HTTP диалога] и "разработку" [[Средства программирования shell#Web сервер на shell|Web приложения]] * [[Сервис HTTP#Нагрузочное тестирование]] с использованием curl === 2.2 Собираем docker контейнер === * Удаляем приложение с host системы server# apt purge inetutils-inetd * [[Технология Docker#Установка]] Docker из базового репозитория на server и из репозитория вендора на gate !!! Методическая рекомендация, запустить установку GitLab из лабораторной работы 4.1 * [[Технология Docker#Создание образа для приложения вручную]] * [[Технология Docker#Запуск в режиме демона и подключение к контейнеру]] === 2.3 Связываем и деплоим контейнеры с помощью docker-compose === * [[Технология Docker#Использование готовых образов приложений]] * Использование [[Технология Docker#docker-compose]] * Использование [[Сервис HTTP#Прокси "красивого" URL в приложение (пример 3)|Nginx]] для балансировки нагрузки * Добавляем сообщения про ip и hostname (вручную) и журнал (следующая лабораторная) === 2.4 Создание образа для приложения с использованием Dockerfile === !!! Методическая рекомендация, запустить установку Golang из этой лабораторной работы * Собираем образ [[Технология Docker#Приложение bash webd]] (добавляем журнал) * Вопросы оптимизации Dockerfile и безопасности * [[Язык программирования Python#Виртуальная среда Python]] * Создаем [[Язык программирования Python#Web приложение]] на Python * Собираем образ [[Технология Docker#Приложение python pywebd]] !!! Методическая рекомендация, запустить установку Vagrant из лабораторной работы 3.1 * Вопросы оптимизации размера образа * [[Язык программирования Golang]] * Создаем [[Язык программирования Python#Web приложение]] на Golang * Собираем образ [[Технология Docker#Приложение golang gowebd]] * Вопросы оптимизации времени сборки образа * [[Технология Docker#Установка]] Docker из репозитория вендора на gate server# scp -r gowebd/ gate: * Расширение [[Технология Docker#docker buildx]] * [[Технология Docker#Обзор и удаление]] ненужных ресурсов Docker === 2.5 Использование Docker Registry === * Включаем [[Инструмент GitLab#GitLab Docker Registry]] * Создаем (Public, без README) проект webd * Cохраняем образ, используя [[Технология Docker#Локальные репозитории]] ==== Вопросы ==== - Перечислите преимущества использования Docker ===== Модуль 3. Инфраструктура как код ===== ==== Теория ==== * Построение ландшафта инфраструктуры на примере [[Технология Vagrant]] * Построение ландшафта облачной инфраструктуры с использованием [[https://ru.wikipedia.org/wiki/Terraform|HashiCorp Terraform]] * Видео урок: [[On-premise Terraform]] * Управление инфраструктурой с использованием [[Сервис Ansible]] ==== Лабораторные работы: Управление инфраструктурой ==== === 3.1 Управление инфраструктурой с использованием Vagrant === !!! Методическая рекомендация, запустить установку Ansible из лабораторной работы 3.2 * Добавляем DNS записи nodeN A 192.168.X.200+N в [[Сервис DNS#Настройка мастер сервера зоны corpX.un]] * Обзор команд [[Технология VirtualBox]] * Обзор [[Технология Vagrant]] * Развертываем с использованием [[Технология Vagrant#Multi-Machine Vagrant Environments]] узлы кластера node1,2,3 === 3.2 Управление инфраструктурой с использованием Ansible === * Общие принципы и модели управления (Push and Pull) * [[Сервис Ansible#Установка на управляющей системе]] * [[Сервис Ansible#Настройка групп управляемых систем]] * [[Сервис Ansible#Настройка транспорта ssh]] с [[Сервис SSH#Парольная аутентификация]] * [[Сервис Ansible#Использование модулей]] для тестирования связи с управляемыми системами * Установка Docker с помощью [[Сервис Ansible#Использование playbook|Ansible playbook]] на node1,2,3 * Варианты [[Сервис Ansible#Использование шаблонов]] Jinja * Варианты [[Сервис Ansible#Использование handlers]] * Развертывание кластера приложения с [[Сервис Ansible#Использование ролей]] Ansible ==== Вопросы ==== - Что общего и в чем отличие между Ansible, Vagrant и Terraform? - Что означает термин Provision в Vagrant? - Что такое module, playbook, role в Ansible? - Назовите каталоги в роли Ansible - Что должно быть установлено на целевой системе для управления через Ansible? - Каким образом Vagrant управляет VM? - Как реализован Ansible provision в Vagrant? ===== Модуль 4. Continuous Integration ===== ==== Теория ==== * [[https://ru.wikipedia.org/wiki/Непрерывная_интеграция]] * [[https://simpleone.ru/glossary/ci-cd-cd-continuous-integration-continuous-delivery-continuous-deployment|CI/CD/CD. Continuous Integration / Continuous Delivery / Continuous Deployment]] * [[https://youtu.be/FeD6VBY2Xss|Вебинар: Вход в CI/CD для Linux-админа]] * [[https://habr.com/ru/articles/716454/|Статья: Самый простой пример CI/CD]] ==== Лабораторные работы: От Git к CI/CD ==== === 4.1 Обзор GitLab === * [[Инструмент GitLab#Установка из репозитория]] !!! Методическая рекомендация, скачать gitlab-runner из следующей лабораторной работы * [[Инструмент GitLab#Управление пользователями]] (назначить УЗ student администратором) * Создаем новый репозиторий (Project name: openvpn1, Private, без README) в GitLab * Пользуясь инструкцией к проекту, включаем [[Сервис Git]] для каталога openvpn1 и помещаем его в GitLab === 4.2 Запуск пайплайнов из .gitlab-ci в gitlab-runners === * [[Инструмент GitLab#Установка из пакета]] GitLab Runner на server и его регистрация * Используя GitLab Pipeline Editor добавляем в проект openvpn1 [[Инструмент GitLab#Пример shell ansible]] Pipeline и наблюдаем "выкатку" в "прод" после Commit в ветку main ===== Модуль 5. Обзор задач QA ===== ==== Теория ==== * [[https://testengineer.ru/dorogostoyashchie-bagi/|7 эпичнейших багов в истории человечества]] * [[https://ru.wikipedia.org/wiki/Тестирование_программного_обеспечения]] * [[https://ru.wikipedia.org/wiki/Lint]] * [[https://ru.wikipedia.org/wiki/Ручное_тестирование]] * [[https://ru.wikipedia.org/wiki/Автоматизированное_тестирование]] ==== Лабораторные работы: Задачи тестирования ==== === 5.1 Ручное тестирование функциональности === * Для подключения используем [[Сервис Keepalived]] в режиме [[Сервис Keepalived#Настройка балансировки нагрузки]] и corpX.ovpn ([[Пакет OpenVPN#Настройка клиента]]) в windows или linux * Можно добавить [[Сервис NAT]] для зрелищности * Добавляем параметры dhcp-option,block-outside-dns и Commit в test с созданием Merge requests и наблюдаем "выкатку" в "тестовую" среду, проверяем работу сервиса в ней * Одобряем Merge requests и наблюдаем "выкатку" в "прод" === 5.2 Автоматизированный анализ кода и работоспособности приложения при сборке образа === ==== Вопросы ====