This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
devops1._основные_инструменты [2025/05/28 17:26] val [Программа курса] |
devops1._основные_инструменты [2025/10/18 18:01] (current) val [Лабораторные работы: Задачи тестирования] |
||
|---|---|---|---|
| Line 8: | Line 8: | ||
| ===== Практикум ===== | ===== Практикум ===== | ||
| - | * [[https://val.bmstu.ru/~val/pract/dev1/|Запись практикума]] | + | * [[https://val.bmstu.ru/~val/pract/dev1/|Записи практикума]] |
| ===== Модуль 0. Подготовка к занятию ===== | ===== Модуль 0. Подготовка к занятию ===== | ||
| Line 19: | Line 19: | ||
| * [[https://landscape.cncf.io/]] | * [[https://landscape.cncf.io/]] | ||
| - | * [[https://dzen.ru/a/ZVIBk2kT0ntemhwK|∞ Дорожная карта DevOps-инженера в 2023 году]] | + | * [[https://dzen.ru/a/ZVIBk2kT0ntemhwK|Дорожная карта DevOps-инженера в 2023 году]] |
| * Ссылки в разделе [[Сервис Git]] | * Ссылки в разделе [[Сервис Git]] | ||
| - | |||
| ==== Лабораторные работы: Развертывание стенда и инициализация репозитория Git ==== | ==== Лабораторные работы: Развертывание стенда и инициализация репозитория Git ==== | ||
| Line 92: | Line 91: | ||
| !!! Методическая рекомендация, запустить установку Docker (только на server) из лабораторной работы 2.1 | !!! Методическая рекомендация, запустить установку Docker (только на server) из лабораторной работы 2.1 | ||
| + | * Дбавляем A запись в DNS, понадобится в финальной работе (практикум) | ||
| <code> | <code> | ||
| server# cat /etc/bind/corpX.un | server# cat /etc/bind/corpX.un | ||
| Line 100: | Line 100: | ||
| * [[Сервис Git]], команды git -C /etc/ ..., log, show, diff, reset | * [[Сервис Git]], команды git -C /etc/ ..., log, show, diff, reset | ||
| + | |||
| + | ===== Практикум ===== | ||
| + | |||
| + | * [[https://val.bmstu.ru/~val/pract/dev1/dev1_mod1_pract.mp4|Запись практикума]] (длительность: 16 минут) | ||
| + | |||
| ==== Вопросы ==== | ==== Вопросы ==== | ||
| Line 137: | Line 142: | ||
| * [[Технология Docker#Анализ параметров запущенного контейнера]] | * [[Технология Docker#Анализ параметров запущенного контейнера]] | ||
| - | == 2.1.3 Приложение на Go == | + | == 2.1.3 Приложение на Go (практикум) == |
| !!! Методическая рекомендация, запустить установку GitLab из лабораторной работы 4.1 | !!! Методическая рекомендация, запустить установку GitLab из лабораторной работы 4.1 | ||
| Line 162: | Line 167: | ||
| * Можно показать "кубернетес" - [[Сервис HTTP#Прокси "красивого" URL в приложение (пример 3)|Использование прокси Nginx]] для доступа к приложению (если установился GitLab) | * Можно показать "кубернетес" - [[Сервис HTTP#Прокси "красивого" URL в приложение (пример 3)|Использование прокси Nginx]] для доступа к приложению (если установился GitLab) | ||
| + | |||
| + | ===== Практикум ===== | ||
| + | |||
| + | * [[https://val.bmstu.ru/~val/pract/dev1/dev1_mod2_pract.mp4|Запись практикума]] (длительность: 11 минут) | ||
| ==== Вопросы ==== | ==== Вопросы ==== | ||
| Line 188: | Line 197: | ||
| !!! Методическая рекомендация, запустить установку Ansible из лабораторной работы 3.2 | !!! Методическая рекомендация, запустить установку Ansible из лабораторной работы 3.2 | ||
| - | * Добавляем DNS записи nodeN A 192.168.X.200+N в [[Сервис DNS#Настройка мастер сервера зоны corpX.un]] | + | * Добавляем DNS записи nodeN A 192.168.X.200+N в [[Сервис DNS#Настройка мастер сервера зоны corpX.un]] (практикум) |
| - | * Обзор команд [[Технология VirtualBox]] | + | * Обзор команд [[Технология VirtualBox]] |
| - | * Обзор [[Технология Vagrant]] | + | * Обзор и установка [[Технология Vagrant]] (практикум) |
| - | * Развертываем с использованием [[Технология Vagrant#Multi-Machine Vagrant Environments]] узлы кластера node1,2,3 | + | * Развертываем с использованием [[Технология Vagrant#Multi-Machine Vagrant Environments]] узлы кластера node1,2,3 (практикум) |
| === 3.2 Управление инфраструктурой с использованием Ansible === | === 3.2 Управление инфраструктурой с использованием Ansible === | ||
| * Общие принципы и модели управления (Push and Pull) | * Общие принципы и модели управления (Push and Pull) | ||
| - | * Ansible - [[Сервис Ansible#Установка на управляющей системе]] | + | * Ansible - [[Сервис Ansible#Установка на управляющей системе]] (практикум) |
| - | * [[Сервис Ansible#Настройка групп управляемых систем]] | + | * [[Сервис Ansible#Настройка групп управляемых систем]] (практикум) |
| - | * [[Сервис Ansible#Настройка транспорта ssh]] с [[Сервис SSH#Парольная аутентификация]] | + | * [[Сервис Ansible#Настройка транспорта ssh]] с [[Сервис SSH#Парольная аутентификация]] (практикум) |
| - | * [[Сервис Ansible#Использование модулей]] для тестирования связи с управляемыми системами | + | * [[Сервис Ansible#Использование модулей]] для тестирования связи с управляемыми системами (практикум) |
| - | * Установка Docker с помощью [[Сервис Ansible#Использование playbook|Ansible playbook]] на node1,2,3 (лучше во время перерыва) | + | * Установка Docker с помощью [[Сервис Ansible#Использование playbook|Ansible playbook]] на node1,2,3 (лучше во время перерыва) (практикум) |
| * [[Сервис Ansible#Использование шаблонов]] Jinja в playbook для установки Nginx (на gate, по окончании демонстрации удалить!!) | * [[Сервис Ansible#Использование шаблонов]] Jinja в playbook для установки Nginx (на gate, по окончании демонстрации удалить!!) | ||
| * Обсудить варианты [[Сервис Ansible#Использование handlers]] | * Обсудить варианты [[Сервис Ansible#Использование handlers]] | ||
| - | * Развертывание кластера приложения с [[Сервис Ansible#Использование ролей]] Ansible | + | * Развертывание кластера приложения с [[Сервис Ansible#Использование ролей]] Ansible (практикум, в конце запустить установку GitLab) |
| + | |||
| + | ===== Практикум ===== | ||
| + | |||
| + | * [[https://val.bmstu.ru/~val/pract/dev1/dev1_mod3_pract.mp4|Запись практикума]] (длительность: 19 минут) | ||
| ==== Вопросы ==== | ==== Вопросы ==== | ||
| Line 227: | Line 240: | ||
| ==== Лабораторные работы: От Git к CI/CD ==== | ==== Лабораторные работы: От Git к CI/CD ==== | ||
| - | === 4.1 Обзор GitLab === | + | === 4.1 Обзор GitLab (практикум) === |
| * [[Инструмент GitLab#Установка из репозитория]] | * [[Инструмент GitLab#Установка из репозитория]] | ||
| Line 234: | Line 247: | ||
| * [[Инструмент GitLab#Управление пользователями]] (назначить УЗ student администратором) | * [[Инструмент GitLab#Управление пользователями]] (назначить УЗ student администратором) | ||
| - | * Создаем новый репозиторий (Project name: openvpn1, Private, без README) в GitLab | + | * Создаем новый репозиторий (Project name: openvpn1, Private, без README) в GitLab |
| * Пользуясь инструкцией к проекту, включаем [[Сервис Git]] для каталога openvpn1 и помещаем его в GitLab | * Пользуясь инструкцией к проекту, включаем [[Сервис Git]] для каталога openvpn1 и помещаем его в GitLab | ||
| - | === 4.2 Запуск пайплайнов из .gitlab-ci в gitlab-runners === | + | === 4.2 Запуск пайплайнов из .gitlab-ci в gitlab-runners (практикум) === |
| * [[Инструмент GitLab#Установка из пакета]] GitLab Runner на server и его [[Инструмент GitLab#Регистрация]] с меткой **ansible** и исполнителем **shell** | * [[Инструмент GitLab#Установка из пакета]] GitLab Runner на server и его [[Инструмент GitLab#Регистрация]] с меткой **ansible** и исполнителем **shell** | ||
| * Используя GitLab Pipeline Editor добавляем в проект openvpn1 [[Инструмент GitLab#Пример shell ansible]] Pipeline и наблюдаем "выкатку" в "прод" после Commit в ветку main | * Используя GitLab Pipeline Editor добавляем в проект openvpn1 [[Инструмент GitLab#Пример shell ansible]] Pipeline и наблюдаем "выкатку" в "прод" после Commit в ветку main | ||
| + | |||
| + | ===== Практикум ===== | ||
| + | |||
| + | * [[https://val.bmstu.ru/~val/pract/dev1/dev1_mod4_pract.mp4|Запись практикума]] (длительность: 13 минут) | ||
| ==== Вопросы ==== | ==== Вопросы ==== | ||
| Line 284: | Line 301: | ||
| * Размещение образа приложения в Registry | * Размещение образа приложения в Registry | ||
| - | * Включаем [[Инструмент GitLab#GitLab Docker Registry]] | + | * Включаем [[Инструмент GitLab#GitLab Docker Registry]] (практикум) |
| - | * Включаем [[Технология Docker#Insecure Private Registry]] и [[Технология Docker#Аутентификация в Registry]] | + | * Включаем [[Технология Docker#Insecure Private Registry]] и [[Технология Docker#Аутентификация в Registry]] на gate (практикум) |
| - | * Создаем (Public, без README) проект gowebd | + | * Создаем (Public, без README) проект gowebd (практикум) |
| - | * Cохраняем образ, [[Технология Docker#Использование Private Registry]] | + | * Cохраняем образ, [[Технология Docker#Использование Private Registry]] (практикум) |
| !!! Методическая рекомендация, запустить установку minikube из лабораторной работы 6.1 | !!! Методическая рекомендация, запустить установку minikube из лабораторной работы 6.1 | ||
| Line 295: | Line 312: | ||
| === 5.3 Тестирование в процессе CI и управление версиями === | === 5.3 Тестирование в процессе CI и управление версиями === | ||
| - | * Проводим [[Инструмент GitLab#Установка в виде контейнера]] gitlab-runner на gate | + | * Проводим [[Инструмент GitLab#Установка в виде контейнера]] gitlab-runner на gate (практикум) |
| - | * Используем [[Инструмент GitLab#Регистрация DooD]] для добавления runner в проект gowebd | + | * Используем [[Инструмент GitLab#Регистрация DooD]] для добавления runner в проект gowebd (практикум) |
| - | * Отключаем gowebd->CI/CD Settings->Auto DevOps | + | * Отключаем gowebd->CI/CD Settings->Auto DevOps (практикум) |
| - | * Добавляем в папку gowebd [[Инструмент GitLab#Пример CI с использованием контейнеров]] | + | * Добавляем в папку gowebd [[Инструмент GitLab#Пример CI с использованием контейнеров]] стадии build test push (практикум) |
| - | * Используя инструкции из GitLab добавляем папку в проект и наблюдаем сборку образа с тэгом commit hash | + | * Используя инструкции из GitLab добавляем папку в проект и наблюдаем сборку образа с тэгом commit hash (практикум) |
| - | * Можно продемонстрирорвать Smoke test, заменив порт в коде | + | * Можно продемонстрировать Smoke test, заменив порт в коде |
| * Останавливаем, очищаем конфигурацию [[Инструмент GitLab#Установка в виде контейнера]] gitlab-runner на gate | * Останавливаем, очищаем конфигурацию [[Инструмент GitLab#Установка в виде контейнера]] gitlab-runner на gate | ||
| Line 311: | Line 328: | ||
| * Используем [[Инструмент GitLab#Регистрация DinD]] для добавления runner в проект gowebd | * Используем [[Инструмент GitLab#Регистрация DinD]] для добавления runner в проект gowebd | ||
| * Добавляем необходимые для DinD элементы конфигурации в [[Инструмент GitLab#Пример CI с использованием контейнеров]] | * Добавляем необходимые для DinD элементы конфигурации в [[Инструмент GitLab#Пример CI с использованием контейнеров]] | ||
| + | |||
| + | * Файл из папки \\share\student\val | ||
| + | <code> | ||
| + | stages: | ||
| + | - build | ||
| + | - push | ||
| + | # - deploy | ||
| + | |||
| + | variables: | ||
| + | DOCKER_TLS_CERTDIR: "" | ||
| + | |||
| + | services: | ||
| + | - name: docker:dind | ||
| + | command: | ||
| + | [ | ||
| + | '--insecure-registry=server.corpX.un:5000', | ||
| + | ] | ||
| + | |||
| + | before_script: | ||
| + | - echo -n $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY | ||
| + | |||
| + | Build: | ||
| + | stage: build | ||
| + | script: | ||
| + | - docker pull $CI_REGISTRY_IMAGE:latest || true | ||
| + | - > | ||
| + | docker build | ||
| + | --pull | ||
| + | --cache-from $CI_REGISTRY_IMAGE:latest | ||
| + | --tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA | ||
| + | . | ||
| + | - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA | ||
| + | |||
| + | except: | ||
| + | - tags | ||
| + | |||
| + | Push latest: | ||
| + | variables: | ||
| + | GIT_STRATEGY: none | ||
| + | stage: push | ||
| + | only: | ||
| + | - main | ||
| + | script: | ||
| + | - docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA | ||
| + | - docker tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA $CI_REGISTRY_IMAGE:latest | ||
| + | - docker push $CI_REGISTRY_IMAGE:latest | ||
| + | |||
| + | Push tag: | ||
| + | variables: | ||
| + | GIT_STRATEGY: none | ||
| + | stage: push | ||
| + | only: | ||
| + | - tags | ||
| + | script: | ||
| + | - docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA | ||
| + | - docker tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME | ||
| + | - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME | ||
| + | |||
| + | #Deploy: | ||
| + | # variables: | ||
| + | # VER: "$CI_COMMIT_REF_NAME" | ||
| + | # stage: deploy | ||
| + | # only: | ||
| + | # - tags | ||
| + | # trigger: | ||
| + | # project: student/gowebd-k8s | ||
| + | </code> | ||
| * Увеличиваем версию и наблюдаем сборку образа с тэгом commit hash | * Увеличиваем версию и наблюдаем сборку образа с тэгом commit hash | ||
| - | * Можно продемонстрирорвать Lint test, добавив лишнюю переменную в коде | + | * Можно продемонстрировать Lint test, добавив лишнюю переменную в коде |
| + | |||
| + | * Используем Git тэги ([[Сервис Git#Обновление сетевого репозитория из локального]] или Code->Tags) для указания версии Docker образов (практикум, в конце запустить установку MiniKube) | ||
| + | |||
| + | ===== Практикум ===== | ||
| - | * Используем Git тэги ([[Сервис Git#Обновление сетевого репозитория из локального]] или Code->Tags) для указания версии Docker образов | + | * [[https://val.bmstu.ru/~val/pract/dev1/dev1_mod5_pract.mp4|Запись практикума]] (длительность: 23 минуты) |
| ==== Вопросы ==== | ==== Вопросы ==== | ||
| Line 335: | Line 423: | ||
| === 6.1 Установка minikube === | === 6.1 Установка minikube === | ||
| - | * Для доступа к репозиторию, понадобится включить [[Сервисы Gateway и routing]] | + | * Для доступа к репозиторию, понадобится включить [[Сервисы Gateway и routing]] (практикум) |
| - | * [[Система Kubernetes#Установка minikube]] для gitlab-runner@server (можно, если будет время, показать CD) | + | * [[Система Kubernetes#Установка minikube]] для gitlab-runner@server (можно, если будет время, показать CD) (практикум) |
| === 6.2 Создание deployment и service === | === 6.2 Создание deployment и service === | ||
| - | * Изучаем [[Система Kubernetes#Базовые объекты k8s]] - [[Система Kubernetes#Deployment]] и [[Система Kubernetes#Service]] | + | * Изучаем [[Система Kubernetes#Базовые объекты k8s]] - [[Система Kubernetes#Deployment]] и [[Система Kubernetes#Service]] (практикум) |
| - | * Для понимания работы [[Система Kubernetes#Ingress]] (будет в следующем курсе), можно продемонстрировать использование [[Сервис HTTP#Прокси "красивого" URL в приложение (пример 3)|Nginx]] для доступа к приложению webd в minikube с хост системы | + | * Для понимания работы [[Система Kubernetes#Ingress]] (будет в следующем курсе), можно продемонстрировать использование [[Сервис HTTP#Прокси "красивого" URL в приложение (пример 3)|Nginx]] для доступа к приложению webd в minikube с хост системы (практикум) |
| - | * Если есть 30 минут, можно показать CD через envsubst "**3.3 Разворачивание нужной версии приложения в kubernetes**" из Девопс2 | + | * Если есть 30 минут, можно показать CD через envsubst "**Развертывание нужной версии приложения в kubernetes**" из Девопс2 |
| * Понадобится назначить метку k8s-deploy ранеру и | * Понадобится назначить метку k8s-deploy ранеру и | ||
| <code> | <code> | ||
| Line 349: | Line 437: | ||
| </code> | </code> | ||
| * Можно показать все, используя Web IDE | * Можно показать все, используя Web IDE | ||
| + | |||
| + | ===== Практикум ===== | ||
| + | |||
| + | * [[https://val.bmstu.ru/~val/pract/dev1/dev1_mod6_pract.mp4|Запись практикума]] (длительность: 13 минут) | ||
| + | |||
| ==== Вопросы ==== | ==== Вопросы ==== | ||
| Line 358: | Line 451: | ||
| ===== Модуль 7. Дополнительные материалы ===== | ===== Модуль 7. Дополнительные материалы ===== | ||
| + | |||
| + | ==== 7.1 Вход в Jenkins ==== | ||
| * [[Вход в Jenkins]] и процесс непрерывной интеграции для администратора Linux (выполняем работы с 00:05:30 до конца) | * [[Вход в Jenkins]] и процесс непрерывной интеграции для администратора Linux (выполняем работы с 00:05:30 до конца) | ||
| + | |||
| + | ==== 7.2 Зачем нужен Kubernetes ==== | ||
| * [[Зачем нужен Kubernetes]] (выполняем работы с 00:02:45 до 00:53:00 и с 01:08:33 до конца), понадобятся [[Средства программирования shell#Ресурсы Web сервера на shell]] | * [[Зачем нужен Kubernetes]] (выполняем работы с 00:02:45 до 00:53:00 и с 01:08:33 до конца), понадобятся [[Средства программирования shell#Ресурсы Web сервера на shell]] | ||
| + | |||
| + | ==== 7.3 Что должен знать DevOps про Python ==== | ||
| + | |||
| + | * [[Все что должен знать DevOps про Python]] | ||
| + | |||
| + | ==== 7.4 Развертывание инфраструктуры с использованием Terraform ==== | ||
| * [[On-premise Terraform|Развертывание инфраструктуры в On-premise облаке с использованием Terraform]] (выполняем работы с 00:10:15 до 00:35:30 и с 00:40:45 до конца) | * [[On-premise Terraform|Развертывание инфраструктуры в On-premise облаке с использованием Terraform]] (выполняем работы с 00:10:15 до 00:35:30 и с 00:40:45 до конца) | ||
| Line 374: | Line 477: | ||
| * Перед "Шаг 3": перенести home-computer в LAN, назанчить IP .200 из сети 192.168.X.0/24 и считать ее "домашней сетью" | * Перед "Шаг 3": перенести home-computer в LAN, назанчить IP .200 из сети 192.168.X.0/24 и считать ее "домашней сетью" | ||
| * Шаг 4 - в режиме просмотра | * Шаг 4 - в режиме просмотра | ||
| + | |||
| + | ==== 7.5 Ansible Vault ==== | ||
| + | |||
| + | * [[Сервис Ansible#ansible-vault]] | ||