This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
devops1._основные_инструменты [2023/09/21 08:19] val [Лабораторные работы: Тема лабораторных работ] |
devops1._основные_инструменты [2025/03/19 07:58] (current) val |
||
---|---|---|---|
Line 6: | Line 6: | ||
* [[https://www.specialist.ru/track/dp-devops|ДП-ДЕВОПС-М]] | * [[https://www.specialist.ru/track/dp-devops|ДП-ДЕВОПС-М]] | ||
- | ===== Модуль 0. Подготовка стенда в классе ===== | + | ===== Модуль 0. Подготовка к занятию ===== |
- | * Узнать свой номер стенда | + | - Узнать и записать свой номер стенда: X= |
- | * Проверить наличие дистрибутивов и образов (будет сделано) | + | - Сообщить его в чат преподавателю |
- | * Использовать кэширующий прокси для ускорения загрузки | + | |
- | ===== Модуль 1: Развертывание стенда ===== | + | ===== Модуль 1: Введение и развертывание стенда ===== |
==== Теория ==== | ==== Теория ==== | ||
- | * Разворачиваем стенд курса [[https://www.specialist.ru/course/yun2-b|Linux. Уровень 2. Администрирование сервисов и сетей]] | + | * [[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 === | === 1.1 Схема стенда, импорт, настройка и запуск VM gate и server === | ||
Line 42: | Line 44: | ||
=== 1.2 Настройка сети VM gate и server === | === 1.2 Настройка сети VM gate и server === | ||
- | * !!! Добавить HDD 20GB к server | ||
* [[Настройка стендов слушателей#Настройка виртуальных систем Unix]] с использованием [[Настройка стендов слушателей#Скрипты автоконфигурации]] | * [[Настройка стендов слушателей#Настройка виртуальных систем Unix]] с использованием [[Настройка стендов слушателей#Скрипты автоконфигурации]] | ||
Line 61: | Line 62: | ||
* Создать в Putty профили gate, server и подключиться | * Создать в Putty профили gate, server и подключиться | ||
- | === 1.3 настройка сервиса DNS === | + | === 1.3 Инициализация репозитория Git === |
+ | |||
+ | * [[Сервис Git]], команды init, add, commit для каталога /etc на server | ||
- | * [[Управление файловыми системами в Linux#Использование LVM]] | ||
* [[Финальная настройка DNS сервера]] | * [[Финальная настройка DNS сервера]] | ||
<code> | <code> | ||
+ | server:~# git -C conf/ pull | ||
+ | |||
server:~# sh conf/dns.sh | server:~# sh conf/dns.sh | ||
</code> | </code> | ||
Line 79: | Line 83: | ||
</code> | </code> | ||
- | ==== Вопросы ==== | + | === 1.4 Работа с репозиторием Git === |
- | ===== Модуль 2: От Git к SCM к CI/CD ===== | + | !!! Методическая рекомендация, запустить установку Docker (только на server) из лабораторной работы 2.1 |
- | * !!! Заранее выполняем на server | + | <code> |
- | * [[Переменные окружения#Установка переменных окружения]] http_proxy, https_proxy и no_proxy (только для ОО) | + | server# cat /etc/bind/corpX.un |
- | * Установку [[Инструмент Gitea]] | + | </code><code> |
- | * Установку [[Сервис JRE]] (и на gate) | + | ... |
- | * Установку [[Инструмент Jenkins]] !!! и установку плагинов !!! | + | webd A 192.168.X.10 |
- | * Установку [[Сервис Ansible]] | + | </code> |
- | * Cкачать deb пакет [[Инструмент GitLab#GitLab Runner]] | + | |
- | * Установку [[Инструмент GitLab]] | + | |
- | * !!! Заранее выполняем на host системе | + | * [[Сервис Git]], команды git -C /etc/ ..., log, show, diff, reset |
- | * Технология Vagrant [[Технология Vagrant#Установка]] | + | ==== Вопросы ==== |
+ | |||
+ | - Перечислите и объясните команды git | ||
+ | |||
+ | ===== Модуль 2: Docker ===== | ||
==== Теория ==== | ==== Теория ==== | ||
- | * [[Сервис Git]] | + | * Ссылки в разделах [[Технология cgroup]], [[Технология namespaces]] и [[Технология Docker]] |
+ | * [[https://ru.wikipedia.org/wiki/Микросервисная_архитектура|Микросервисная архитектура]] | ||
+ | ==== Лабораторные работы: Установка docker и работа с контейнерами ==== | ||
- | ==== Лабораторные работы: От Git к CI/CD==== | + | === 2.1 Собираем docker контейнер === |
- | === 2.1 Вспоминаем Git === | + | * [[Технология Docker#Установка]] Docker из базового репозитория на **server** и из репозитория вендора на **gate** |
- | * [[Сервис Git]] для каталога /etc на gate (демонстрирует преподаватель) | + | !!! Методическая рекомендация, запустить установку Golang из этой лабораторной работы |
- | * [[Сервис DHCP]] | + | |
- | <code> | + | |
- | gate:~# sh conf/dhcp.sh | + | |
- | </code> | + | |
- | * [[Сервис DHCP#Статистика DHCP сервера]] | + | |
- | * [[Установка ПО из исходных текстов#Использование утилиты make]] (установить) | + | |
- | * [[Модуль AppArmor#Определение наличия и правка профилей для служб]] !!! проверить, не качается ли что-то на server !!! | + | |
- | <code> | + | |
- | gate# su - student | + | |
- | </code> | + | |
- | * [[Установка ПО из исходных текстов#Использование make для сопровождения файлов конфигурации сервиса]] | + | |
- | * [[Сервис Git]] для каталога ~student/dhcp/ на gate | + | |
- | === 2.2 Знакомимся с SCM Gitea === | + | * Обсудить [[Технология Docker#Создание образа для приложения вручную]] было в ЛИН3 |
- | * [[Инструмент Gitea]] | + | !!! Методическая рекомендация, запустить установку docker-compose из лабораторной работы 2.2 |
- | * Подключаемся как student, Repository Name: dhcp | + | |
- | * [[Сервис Git#Обновление сетевого репозитория из локального]] (копируем инструкции из посказки, ветка master) | + | |
- | * Редактируем dhcpd.conf в Gitea (Commit to master branch) | + | |
- | === 2.3 Знакомимся с Jenkins CI/CD === | + | * Обсудить [[Технология Docker#Создание образа для приложения с использованием Dockerfile]] будет в доп. практикуме |
- | * [[Сервис DHCP#Статистика DHCP сервера]] | + | == 2.1.2 Приложение на Python == |
- | * [[Сервис Git#Клонирование и обновление локального репозитория из сетевого]] (можно как root на gate) | + | |
- | * [[Установка ПО из исходных текстов#Использование make для сопровождения файлов конфигурации сервиса]] | + | |
- | * [[Инструмент Jenkins]] | + | * [[Язык программирования Python#Виртуальная среда Python]] (учетная запись root на server) |
- | * [[https://youtu.be/FeD6VBY2Xss|Вход в CI/CD для Linux-админа]] | + | * Создаем [[Язык программирования Python#Web приложение]] на Python |
- | === 2.4 Знакомимся с GitLab CI/CD === | + | !!! Методическая рекомендация, запустить установку Vagrant из лабораторной работы 3.1 |
- | * http://server.corpX.un/ | + | * Собираем образ [[Технология Docker#Приложение python pywebd]] |
- | * Используем [[Инструмент GitLab#Управление пользователями]] в GitLab для отключения авто регистрации, назначении пароля пользователю root и создания учетной записи student | + | * Вопросы оптимизации Dockerfile и безопасности |
- | * http://server.corpX.un:81/mail | + | * [[Технология Docker#Анализ параметров запущенного контейнера]] |
- | !!! в теме Ansible | + | == 2.1.3 Приложение на Go == |
- | * Создаем новый репозиторий (Project name: openvpn1, Private, без README) в GitLab | + | !!! Методическая рекомендация, запустить установку GitLab из лабораторной работы 4.1 |
- | * Пользуясь инструкцией к проекту, включаем [[Сервис Git]] для каталога openvpn1 (ubuntu20 ветка master) и помещаем его в GitLab | + | |
- | * Устанавливаем и регистрируем [[Инструмент GitLab#GitLab Runner]] (shell) на server | + | * [[Язык программирования Golang]] (учетная запись root на gate) |
- | * Используя GitLab Pipeline Editor добавляем в [[Инструмент GitLab#Пример shell ansible]] Pipeline и наблюдаем выкатку в прод после Commit в master | + | * Создаем [[Язык программирования Golang#Web приложение]] на Golang |
- | * Добавляем параметры dhcp-option,block-outside-dns и Commit в test с созданием Merge requests и наблюдаем выкатку в тестовую среду, проверяем работу сервиса в ней | + | <code> |
+ | ~/gowebd# apt purge golang-go; apt autoremove -y | ||
+ | </code> | ||
- | * Одобряем Merge requests и наблюдаем выкатку в прод | + | * Собираем образ [[Технология Docker#Приложение golang gowebd]] |
+ | * Вопросы оптимизации размера образа | ||
- | * Дополнительное задание - добавить [[Пакет OpenVPN#Тестирование конфигурации]] перед деплоем | + | * Расширение [[Технология Docker#docker buildx]] |
+ | * Вопросы оптимизации времени сборки образа | ||
+ | |||
+ | * [[Технология Docker#Обзор и удаление]] ненужных ресурсов Docker | ||
+ | |||
+ | === 2.2 Связываем и деплоим контейнеры с помощью docker-compose === | ||
+ | |||
+ | * [[Технология Docker#Использование готовых образов приложений]] | ||
+ | * Использование [[Технология Docker#docker-compose]] | ||
+ | |||
+ | * Можно показать "кубернетес" - [[Сервис HTTP#Прокси "красивого" URL в приложение (пример 3)|Использование прокси Nginx]] для доступа к приложению (если установился GitLab) | ||
==== Вопросы ==== | ==== Вопросы ==== | ||
- | - Чем отличается GitLab от Git? | + | - Зачем нужен Docker? |
- | - Что делают операции add, commit, push в Git? | + | - Чем Docker отличается от LXC? |
- | - Для чего нужен GitLab Runner? | + | - Чем Docker контейнер отличается от Docker образа? |
- | - Как называется файл для CI/CD в GitLab? | + | - Как ПО в Docker контейнере может взаимодействовать с системой и другими контейнерами? |
- | - Что такое "ветка" в Git и почему переименовали master в main? | + | - Зачем нужен Dockerfile? |
- | ===== Модуль 3: Инфраструктура как код ===== | + | - Зачем "запихивать" сразу много инструкций в команду RUN? |
+ | - Зачем нужен docker-compose? | ||
+ | ===== Модуль 3. Инфраструктура как код ===== | ||
==== Теория ==== | ==== Теория ==== | ||
Line 168: | Line 173: | ||
* Построение ландшафта инфраструктуры на примере [[Технология Vagrant]] | * Построение ландшафта инфраструктуры на примере [[Технология Vagrant]] | ||
* Построение ландшафта облачной инфраструктуры с использованием [[https://ru.wikipedia.org/wiki/Terraform|HashiCorp Terraform]] | * Построение ландшафта облачной инфраструктуры с использованием [[https://ru.wikipedia.org/wiki/Terraform|HashiCorp Terraform]] | ||
- | * Управление инфраструктурой на примере [[Сервис Ansible]] | + | * Видео урок: [[On-premise Terraform]] |
+ | * Управление инфраструктурой с использованием [[Сервис Ansible]] | ||
+ | ==== Лабораторные работы: Управление инфраструктурой ==== | ||
- | ==== Лабораторные работы: Использование Vagrant ==== | + | === 3.1 Управление инфраструктурой с использованием Vagrant === |
- | === 3.1 Использование Vagrant === | + | !!! Методическая рекомендация, запустить установку 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]] node1,2,3 | + | * Обзор [[Технология Vagrant]] |
- | + | * Развертываем с использованием [[Технология Vagrant#Multi-Machine Vagrant Environments]] узлы кластера node1,2,3 | |
- | === 3.2 Использование Ansible === | + | |
- | + | ||
- | * [[Сервис Ansible]] openvpn, docker (только слушатели), можно addusers.yml для OpenVPN | + | |
- | * Преподаватель импортирует систему Windows для тестирования OpenVPN | + | |
- | * Разворачиваем [[Пакет OpenVPN]] в конфигурации с [[Пакет OpenVPN#Использование PAM аутентификации]] на node1,2,3 с [[Сервис Ansible#Использование ролей]] (не забыть про [[Сервисы Gateway и routing#Управление таблицей маршрутизации]] на gate) | + | |
- | * Для подключения используем [[Сервис Keepalived]] в режиме [[Сервис Keepalived#Настройка балансировки нагрузки]] и corpX.ovpn ([[Пакет OpenVPN#Настройка клиента]]) в windows или linux | + | |
- | * Можно добавить [[Сервис NAT]] для зрелищности | + | |
- | * **Лабораторная работа 2.4** | + | === 3.2 Управление инфраструктурой с использованием Ansible === |
- | === 3.3 Использование Ansible в Vagrant === | + | * Общие принципы и модели управления (Push and Pull) |
+ | * Ansible - [[Сервис Ansible#Установка на управляющей системе]] | ||
+ | * [[Сервис Ansible#Настройка групп управляемых систем]] | ||
+ | * [[Сервис Ansible#Настройка транспорта ssh]] с [[Сервис SSH#Парольная аутентификация]] | ||
+ | * [[Сервис Ansible#Использование модулей]] для тестирования связи с управляемыми системами | ||
+ | * Установка Docker с помощью [[Сервис Ansible#Использование playbook|Ansible playbook]] на node1,2,3 (лучше во время перерыва) | ||
+ | * [[Сервис Ansible#Использование шаблонов]] Jinja в playbook для установки Nginx (на gate, по окончании демонстрации удалить!!) | ||
+ | * Обсудить варианты [[Сервис Ansible#Использование handlers]] | ||
+ | * Развертывание кластера приложения с [[Сервис Ansible#Использование ролей]] Ansible | ||
- | * Преподаватель демонстрирует установку docker на node1,2,3 с [[Сервис Ansible#Использование playbook]] для [[Технология Vagrant#Provision с использованием ansible]] в Vagrant | ||
==== Вопросы ==== | ==== Вопросы ==== | ||
Line 201: | Line 208: | ||
- Каким образом Vagrant управляет VM? | - Каким образом Vagrant управляет VM? | ||
- Как реализован Ansible provision в Vagrant? | - Как реализован Ansible provision в Vagrant? | ||
- | ===== Модуль 4: Распространение ПО с использованием контейнеров ===== | + | |
+ | ===== Модуль 4. Continuous Integration ===== | ||
==== Теория ==== | ==== Теория ==== | ||
- | * [[Технология Docker]] | + | * [[https://ru.wikipedia.org/wiki/Непрерывная_интеграция]] |
- | ==== Лабораторные работы: Работа с контейнерами Docker ==== | + | * [[https://simpleone.ru/glossary/ci-cd-cd-continuous-integration-continuous-delivery-continuous-deployment|CI/CD/CD. Continuous Integration / Continuous Delivery / Continuous Deployment]] |
- | === 4.1 Разработка и нагрузочное тестирование приложения webd === | + | * [[https://youtu.be/FeD6VBY2Xss|Вебинар: Вход в CI/CD для Linux-админа]] |
+ | * [[https://habr.com/ru/articles/716454/|Статья: Самый простой пример CI/CD]] | ||
- | * Преподаватель использует linux систему external-host для нагрузочного тестирования и демонстрирует "разработку" приложения на VM server | + | ==== Лабораторные работы: От Git к CI/CD ==== |
- | * [[Средства программирования shell#Web сервер на shell]] (методически, для обсуждения кода, можно, для упрощения, удалить из него все за комментированные строки, но не сохранять. Так же, можно вывести в лог [[Сервис HTTP#Пример HTTP диалога]]) | + | |
- | * [[Сервис INETD]] | + | |
- | * Через [[Сервис Keepalived#Настройка балансировки нагрузки]] в Keepalived предоставляем доступ снаружи | + | === 4.1 Обзор GitLab === |
- | * [[https://lindevs.com/install-vegeta-on-ubuntu|Install Vegeta on Ubuntu 20.04]] | + | * [[Инструмент GitLab#Установка из репозитория]] |
- | * [[https://github.com/tsenart/vegeta/releases|github/tsenart/vegeta/releases]] | + | |
- | * [[https://val.bmstu.ru/unix/WWW/vegeta_12.11.0_linux_amd64.tar.gz]] | + | |
- | * [[https://serverfault.com/questions/389645/ftp-tcp-server-failing-looping|ftp/tcp server failing (looping)]] | + | !!! Методическая рекомендация, скачать gitlab-runner из лабораторной работы 4.2 |
- | * duration=60s rate=400 выдерживают 10 экземпляров приложения | + | * [[Инструмент GitLab#Управление пользователями]] (назначить УЗ student администратором) |
- | * в качестве external-host можно использовать gate | + | * Создаем новый репозиторий (Project name: openvpn1, Private, без README) в GitLab |
- | <code> | + | * Пользуясь инструкцией к проекту, включаем [[Сервис Git]] для каталога openvpn1 и помещаем его в GitLab |
- | external-host# curl http://172.16.1.X | + | |
- | external-host# echo "GET http://172.16.1.X" | vegeta attack -duration=60s -rate=400 | vegeta report | + | === 4.2 Запуск пайплайнов из .gitlab-ci в gitlab-runners === |
- | server# tail -f /var/log/syslog | + | * [[Инструмент GitLab#Установка из пакета]] GitLab Runner на server и его [[Инструмент GitLab#Регистрация]] с меткой **ansible** и исполнителем **shell** |
- | </code> | + | |
- | === 4.2 Использование технологии Docker и docker-compose для масштабирования приложения webd на одном узле === | + | * Используя GitLab Pipeline Editor добавляем в проект openvpn1 [[Инструмент GitLab#Пример shell ansible]] Pipeline и наблюдаем "выкатку" в "прод" после Commit в ветку main |
- | * Устанавливаем [[Технология Docker]] на server, собираем образ приложения "вручную" из под root | + | ==== Вопросы ==== |
- | * Изучаем [[Технология Docker#Процессы контейнера и системы]] и [[Технология Docker#Анализ параметров запущенного контейнера]] (преподаватель, можно на node1, пока у всех ставится docker) | + | |
- | * Используя [[Технология Docker#Предоставление прав непривилегированным пользователям]] и su - gitlab-runner (пригодится для процесса CD в minikube, для удобства работы выполнить [[Настройка командных интерпретаторов]]), знакомимся с [[Технология Docker#Создание контейнера для приложения с использованием Dockerfile]] | + | - Чем отличается GitLab от Git? |
+ | - Для чего нужен GitLab Runner? | ||
+ | - Как называется файл для CI/CD в GitLab? | ||
- | * [[Технология Docker#Запуск в режиме демона и подключение к контейнеру]] несколько копий вручную, и, через [[Сервис Keepalived#Настройка балансировки нагрузки]], повторяем нагрузочное тестирование (преподаватель) | + | ===== Модуль 5. Обзор задач QA ===== |
- | * Знакомимся с [[Технология Docker#docker-compose]] для запуска нескольких копий приложения | + | |
- | === 4.3 Использование технологии Docker Registry для распространения приложения webd === | + | ==== Теория ==== |
- | Методически, достаточно показать на node1 | + | * [[https://testengineer.ru/dorogostoyashchie-bagi/|7 эпичнейших багов в истории человечества]] |
- | * Создаем (Public, без README) проект webd и размещаем каталог webd в [[Сервис Git#On-Premise gitlab]] пользуясь инструкцией к проекту | + | * [[https://ru.wikipedia.org/wiki/Тестирование_программного_обеспечения]] |
+ | * [[https://www.atlassian.com/ru/continuous-delivery/software-testing/types-of-software-testing|Различные виды тестирования ПО]] | ||
+ | |||
+ | * [[https://ru.wikipedia.org/wiki/Ручное_тестирование]] | ||
+ | * [[https://ru.wikipedia.org/wiki/Автоматизированное_тестирование]] | ||
+ | * [[https://ru.wikipedia.org/wiki/Lint]] | ||
+ | * [[https://ru.wikipedia.org/wiki/Smoke_test]] | ||
+ | * [[https://eurobyte.ru/articles/v-chem-otlichiya-nagruzochnogo-ot-stress-testirovaniya/|В чем отличия нагрузочного от стресс-тестирования]] | ||
+ | ==== Лабораторные работы: Задачи тестирования ==== | ||
+ | |||
+ | === 5.1 Ручное тестирование функциональности и работа с ветками проекта === | ||
+ | |||
+ | * Понадобится win client2 (ip/m: 172.16.1.100+X/24, dns: 172.16.1.254) | ||
+ | |||
+ | * Для подключения используем [[Сервис Keepalived]] в режиме [[Сервис Keepalived#Настройка балансировки нагрузки]] и corpX.ovpn ([[Пакет OpenVPN#Настройка клиента]]) в windows или linux | ||
+ | * Добавить [[Сервисы Gateway и routing#Управление таблицей маршрутизации]] на gate (можно отключить маршрут в LAN и настроить [[Сервис NAT]] для зрелищности, !!! вернуть обратно для доп. работ) | ||
+ | |||
+ | * Добавляем параметры dhcp-option,block-outside-dns и Commit в test с созданием Merge requests и наблюдаем "выкатку" в "тестовую" среду, проверяем работу сервиса в ней | ||
+ | * Одобряем Merge requests и наблюдаем "выкатку" в "прод" | ||
+ | |||
+ | === 5.2 Тестирование в этапах развертывания образа приложения в Docker среде === | ||
+ | |||
+ | !!! Методическая рекомендация, включить GitLab Docker Registry из этой лабораторной работы | ||
+ | |||
+ | * [[Язык программирования Golang#golangci-lint]] кода приложения | ||
+ | * Сборка образа [[Технология Docker#Приложение golang gowebd]] | ||
+ | * [[Технология Docker#Smoke test]] работоспособности приложения | ||
+ | |||
+ | * Размещение образа приложения в Registry | ||
* Включаем [[Инструмент GitLab#GitLab Docker Registry]] | * Включаем [[Инструмент GitLab#GitLab Docker Registry]] | ||
- | * Cохраняем образ, используя [[Технология Docker#Локальные репозитории]] | + | * Включаем [[Технология Docker#Insecure Private Registry]] и [[Технология Docker#Аутентификация в Registry]] |
- | * [[Сервис NFS]] на server (преподаватель) | + | * Создаем (Public, без README) проект gowebd |
- | * [[Сервис NFS#Установка nfs клиента]] на node1,2,3 и монтирование /var/www | + | * Cохраняем образ, [[Технология Docker#Использование Private Registry]] |
- | * Проверяем наличие, или устанавливаем Docker на node1,2,3 | + | |
- | * Используя доступ к [[Технология Docker#Локальные репозитории]] на node1,2,3 запускаем приложение | + | |
- | === 4.4 GitLab CI для Docker images === | + | !!! Методическая рекомендация, запустить установку minikube из лабораторной работы 6.1 |
- | * Автоматизируем сборку образа используя [[Средства программирования shell#Проверка синтаксиса]] и [[Инструмент GitLab#Пример shell docker]] GitLab CI/CD, не забыв назначить метки Gitlab Runner. Можно обсудить добавление перемнных в проект и вывод их через env | + | * Можно продемонстрировать развертывание приложения на nodeN |
- | === 4.5 CD приложения webd с использованием docker-compose === | + | === 5.3 Тестирование в процессе CI и управление версиями === |
- | * Модифицируем [[Технология Docker#docker-compose]] для загрузки и запуска нескольких копий приложения и тестируем на server | + | * Проводим [[Инструмент GitLab#Установка в виде контейнера]] gitlab-runner на gate |
- | * Используя [[Инструмент GitLab#Подключение через API]] скачиваем на node1,2,3 файл [[Технология Docker#docker-compose]] запускаем несколько экземпляров приложения и, через [[Сервис Keepalived#Настройка балансировки нагрузки]], повторяем нагрузочное тестирование | + | * Используем [[Инструмент GitLab#Регистрация DooD]] для добавления runner в проект gowebd |
- | * Считаем, что пришлось делать "вручную": выбирать узлы, монтировать nfs, загружать файл docker-compose, выяснять порты - выход: [[Система Kubernetes]] | + | |
+ | * Отключаем gowebd->CI/CD Settings->Auto DevOps | ||
+ | * Добавляем в папку gowebd [[Инструмент GitLab#Пример CI с использованием контейнеров]] | ||
+ | * Используя инструкции из GitLab добавляем папку в проект и наблюдаем сборку образа с тэгом commit hash | ||
+ | * Можно продемонстрирорвать Smoke test, заменив порт в коде | ||
+ | |||
+ | * Останавливаем, очищаем конфигурацию [[Инструмент GitLab#Установка в виде контейнера]] gitlab-runner на gate | ||
+ | * Удаляем Runner в GitLab | ||
+ | * [[Технология Docker#Обзор и удаление]] (преподавателю можно всех) образов c gate | ||
+ | * Отключаем [[Технология Docker#Insecure Private Registry]] | ||
+ | |||
+ | * Повторяем [[Инструмент GitLab#Установка в виде контейнера]] gitlab-runner на gate | ||
+ | * Используем [[Инструмент GitLab#Регистрация DinD]] для добавления runner в проект gowebd | ||
+ | * Добавляем необходимые для DinD элементы конфигурации в [[Инструмент GitLab#Пример CI с использованием контейнеров]] | ||
+ | * Увеличиваем версию и наблюдаем сборку образа с тэгом commit hash | ||
+ | * Можно продемонстрирорвать Lint test, добавив лишнюю переменную в коде | ||
+ | |||
+ | * Используем Git тэги ([[Сервис Git#Обновление сетевого репозитория из локального]] или Code->Tags) для указания версии Docker образов | ||
==== Вопросы ==== | ==== Вопросы ==== | ||
- | - Зачем нужен Docker? | + | - Что такое "ветка" в Git и почему переименовали master в main? |
- | - Чем Docker отличается от LXC? | + | |
- Из каких частей состоит имя образа? | - Из каких частей состоит имя образа? | ||
- | - Чем Docker контейнер отличается от Docker образа? | + | - Как работает DooD и DinD? |
- | - Как ПО в Docker контейнере может взаимодействовать с системой и другими контейнерами? | + | - Что такое Linter? |
- | - Зачем нужен Dockerfile? | + | - Что такое Smoke test? |
- | - Зачем "запихивать" сразу много инструкций в команду RUN? | + | |
- | - Зачем нужен docker-compose? | + | ===== Модуль 6. Kubernetes ===== |
- | ===== Модуль 5: Управление ПО с использованием Kubernetes ===== | + | |
==== Теория ==== | ==== Теория ==== | ||
- | * [[Система Kubernetes]] | + | * [[https://timeweb.cloud/blog/sistemy-orkestracii-kontejnerov|Системы оркестрации контейнеров: что такое и лучше для вашего проекта]] |
- | ==== Лабораторные работы: Тема лабораторных работ ==== | + | * [[https://habr.com/ru/articles/589415/|K8S для начинающих. Первая часть]] |
+ | * [[https://habr.com/ru/amp/publications/651653/|K8S для начинающих. Часть вторая]] | ||
+ | ==== Лабораторные работы: Работа с minikube, cоздание deployment и service ==== | ||
- | === 5.1 Установка и подключение к k8s === | + | === 6.1 Установка minikube === |
- | * Может закончиться место на диске VM server и понадобиться [[Управление ПО в Linux#Удаление архива установленных пакетов]] плюс отключение [[Инструмент GitLab#GitLab Prometheus]] или [[Управление файловыми системами в Linux#Расширение существующего логического тома]] | + | * Для доступа к репозиторию, понадобится включить [[Сервисы Gateway и routing]] |
- | * Производим [[Система Kubernetes#Установка minikube]] для gitlab-runner@server (для доступа к репозиторию, на нем же, понадобится включить [[Сервисы Gateway и routing]]) | + | * [[Система Kubernetes#Установка minikube]] для gitlab-runner@server (можно, если будет время, показать CD) |
- | === 5.2 Базовые объекты k8s === | + | === 6.2 Создание deployment и service === |
- | * Изучаем [[Система Kubernetes#Базовые объекты k8s]] | + | * Изучаем [[Система Kubernetes#Базовые объекты k8s]] - [[Система Kubernetes#Deployment]] и [[Система Kubernetes#Service]] |
- | * Для понимания работы [[Система Kubernetes#Ingress]] (понадобится в следующем курсе), настраиваем [[Сервис HTTP#NGINX]] для доступа к приложению webd в minikube с хост системы | + | * Для понимания работы [[Система Kubernetes#Ingress]] (будет в следующем курсе), можно продемонстрировать использование [[Сервис HTTP#Прокси "красивого" URL в приложение (пример 3)|Nginx]] для доступа к приложению webd в minikube с хост системы |
- | * Тестируем livenessProbe с extern-host | + | |
+ | * Если есть 30 минут, можно показать CD через envsubst "**3.3 Разворачивание нужной версии приложения в kubernetes**" из Девопс2 | ||
+ | * Понадобится назначить метку k8s-deploy ранеру и | ||
<code> | <code> | ||
- | extern-host# cat /etc/hosts | + | server# cp -v /home/gitlab-runner/.minikube/cache/linux/amd64/v*/kubectl /usr/local/bin/ |
- | </code><code> | + | |
- | ... | + | |
- | 172.16.1.X webd.corpX.un | + | |
</code> | </code> | ||
- | + | * Можно показать все, используя Web IDE | |
- | === 5.3 Deploy в k8s === | + | |
- | + | ||
- | * Автоматизируем deploy используя [[Инструмент GitLab#Пример shell Kubernetes]] GitLab CD (см. выше), сталкиваемся с необходимостью править версию в манифесте, рассмотрев вариант envsubst видим необходимость в Helm | + | |
- | + | ||
==== Вопросы ==== | ==== Вопросы ==== | ||
Line 310: | Line 350: | ||
* Как связаны понятия Deployment, Replica Sets, Pods? | * Как связаны понятия Deployment, Replica Sets, Pods? | ||
* Для чего используются Namespace? | * Для чего используются Namespace? | ||
- | ===== Дополнительные материалы ===== | ||
- | |||
- | |||
- | |||
+ | ===== Модуль 7. Дополнительные материалы ===== | ||
+ | * [[Вход в Jenkins]] и процесс непрерывной интеграции для администратора Linux (выполняем работы с 00:05:30 до конца) | ||
+ | * [[Зачем нужен Kubernetes]] (выполняем работы с 00:02:45 до 00:53:00 и с 01:08:33 до конца), понадобятся [[Средства программирования shell#Ресурсы Web сервера на shell]] | ||
+ | * [[On-premise Terraform|Развертывание инфраструктуры в On-premise облаке с использованием Terraform]] (выполняем работы с 00:10:15 до 00:35:30 и с 00:40:45 до конца) | ||
+ | * Понадобится освободить ресурсы и исключить кофликт по IP адресам, остановив узлы кластера | ||
+ | <code> | ||
+ | Administrator@RAZLIV_48 ~/conf/vagrant/nodes (master) | ||
+ | λ vagrant halt | ||
+ | </code> | ||
+ | * Понадобится развернуть VM home-computer ([[Технология VirtualBox#Вложенная виртуализация]]) подключить к сети класса (WAN), увеличить RAM до 8192, запустить, назначить hostname, выяснить IP адрес и подключиться PuTTY | ||
+ | * Понадобится установить VNC [[https://www.tightvnc.com/download.php]], все по умолчанию | ||
+ | * Перед "Шаг 3": перенести home-computer в LAN, назанчить IP .200 из сети 192.168.X.0/24 и считать ее "домашней сетью" | ||
+ | * Шаг 4 - в режиме просмотра |