====== 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 Автоматизированный анализ кода и работоспособности приложения при сборке образа ===
==== Вопросы ====