====== Методологии DevOps ======
* [[https://www.cisco.com/c/dam/m/ru_ru/training-events/2019/cisco-connect/pdf/netdevops_angrechi_on_site.pdf|Как начать управлять сетью на основе методологии NetDevOpsи перестать бояться изменений в пятницу вечером]]
* [[https://stackoverflow.com/questions/47536536/whats-the-difference-between-docker-compose-and-kubernetes|What's the difference between Docker Compose and Kubernetes?]]
===== Ссылка на вебинар =====
===== Программа курса =====
* [[https://www.specialist.ru/course/kuber|Введение в DevOps: инфраструктура как код, использование Docker и Kubernetes]]
==== Примерный план ====
=== Развертывание стенда ===
* Разворачиваем ЛИН2 (gate, server (4Gb))
Запустите с правами Administrator
C:\cmder\cmder.exe
bash
cd
git clone http://val.bmstu.ru/unix/conf.git
cd conf/virtualbox/
./setup.sh X 8
* Настраиваем сеть на gate и server
* На server запускаем сервис DNS (gate пока БЕЗ dhcp)
* На gate и server resolv.conf + на host системе dns для vbox адаптера
* На server запускаем установку [[Сервис Ansible]] и [[Инструмент GitLab]]
=== Историческая ретроспектива систем контроля версий и CI/CD ===
- Изучаем/вспоминаем [[Сервис Git]] на примере каталога /etc ПЕРЕД и после установки [[Сервис DHCP]] в систему gate
- Обсуждаем общий репозиторий для всех систем, но весь /etc туда - плохо
- Вспоминаем/узнаем про [[Установка ПО из исходных текстов#Использование утилиты make]] и, в том числе [[Установка ПО из исходных текстов#Использование make для сопровождения файлов конфигурации сервиса]], на примере dhcp, поутно сталкиваемся с необходимостью [[Модуль AppArmor#Определение наличия и правка профилей для служб]] в AppArmor, подключаем сюда [[Сервис Git]], это уже можно класть в общий репозиторий
- Если GitLab к этому времени не установился, можно показать [[Сервис Git#Создание сетевого http/ssh git репозитория]] и обновление [[Сервис Git#Персонального http/ssh git репозитория]]
=== Современное решение CI/CD на примере GitLab ===
Часть 1: Знакомимся с GitLab (Если GitLab к этому времени не установился, начать тему Vagrant)
- [[Инструмент GitLab]]
- Создание учетной записи student в GitLab
- http://server.corp13.un:81/mail
- Подключаемся как student, New Blank Project (Project name: dhcp, без README)
- [[Сервис Git#Обновление сетевого репозитория из локального]]
- Редактируем dhcpd.conf в GitLab IDE (Commit to master branch)
Часть 2: Знакомимся с GitLab CI/CD
- [[Сервис Git#Клонирование и обновление локального репозитория из сетевого]] (root на gate)
- [[Установка ПО из исходных текстов#Использование make для сопровождения файлов конфигурации сервиса]]
- [[Сервис DHCP#Статистика DHCP сервера]]
- Устанавливаем [[Инструмент GitLab#GitLab Runner]] (shell) на gate
- Используем [[Пакет sudo]] для разрешений пользователя gitlab-runner
- [[Инструмент GitLab#GitLab CI/CD]]
Часть 3: Работа с ветками в GitLab CI/CD (в теме Ansible)
- Устанавливаем [[Инструмент GitLab#GitLab Runner]] (shell) на server
- Включаем [[Сервис Git]] для каталога openvpn1 и загружаем его в новый репозиторий openvpn1 в GitLab (пользуясь инструкцией к проекту, можно переименовать ветку master->main)
- Загружаем репозиторий openvpn1 на локальную систему в [[Cmder]], открываем проект в npp
- Используем [[Сервис Git#Работа с ветками]] в Git для тестовой конфигурации в [[Сервис Ansible#Роль OpenVPN сервера]]
- Используем GitLab CI/CD [[Инструмент GitLab#Пример shell ansible]] для сервиса OpenVPN с ручным тестированием тестовой конфигурации
=== Инфраструктура как код, при построении ландшафта на примере Vagrant ===
- Добавляем в DNS записи nodeN в [[Сервис DNS#Настройка мастер сервера зоны corpX.un]]
- Развертываем с использованием [[Технология Vagrant]] node1,2,3
=== Инфраструктура как код, для управления уровнем приложений на примере Аnsible ===
- Изучаем [[Сервис Ansible]] (можно установить docker на node1,2,3)
- Развертываем с [[Сервис Ansible#Использование ролей]] [[Пакет OpenVPN]] в варианте с [[Пакет OpenVPN#Использование PAM аутентификации]] на node1,2,3
- Для проверки результата используем [[Сервис Keepalived]] в режиме [[Сервис Keepalived#Настройка балансировки нагрузки]] и соответствующей [[Пакет OpenVPN#Настройка клиента]] windows
- GitLab - Часть 2
=== Разработка и распространение ПО с использованием контейнеров на примере Docker ===
- [[Средства программирования shell#Web сервер на shell]]
- [[Сервис INETD]]
- [[https://lindevs.com/install-vegeta-on-ubuntu|Install Vegeta on Ubuntu 20.04]]
- [[https://serverfault.com/questions/389645/ftp-tcp-server-failing-looping|ftp/tcp server failing (looping)]]
external-host# echo "GET http://172.16.1.13" | vegeta attack -duration=10s -rate=200 | vegeta report
root@node1:~# tail -f /var/log/syslog
- Разрабатываем/знакомимся с [[Технология Docker]] (без sftp) на gitlab-runner@server (удобно для тестов CI/CD из командной строки)
- Создаем проект webd в [[Сервис Git#On-Premise gitlab]]
- Включаем [[Инструмент GitLab#GitLab Docker Registry]]
- Cохраняем образ используя [[Технология Docker#Локальные репозитории]]
- Автоматизируем сборку образа используя [[Средства программирования shell#Проверка синтаксиса]] и (уже на локальной системе) [[Инструмент GitLab#GitLab CI/CD]] не забыв [[Технология Docker#Предоставление прав непривилегированным пользователям]] на docker для пользователя gitlab-runner
ТЗ: Горизонтально масштабируем веб сервер используя общий каталог на node1,2,3
- [[Сервис NFS]] на server
- [[Сервис NFS#Установка nfs клиента]] на node1,2,3 (может добавить в [[Сервис Ansible]] редактировать fstab не будем, поскольку это временное решение)
- Используя vagrant ansible provisioning устанавливаем docker и docker-compose на node1,2,3
- Настраиваем [[Технология Docker#Локальные репозитории]] на node1,2,3
- Готовимся масштабировать добавив в проект файл [[Технология Docker#docker-compose]] с ссылкой на образ
- Используя [[Инструмент GitLab#Подключение через API]] скачиваем на node1,2,3 файл [[Технология Docker#docker-compose]] и пробуем масштабировать
* Считаем, что пришлось делать "вручную": выбирать узлы, монтировать nfs, загружать файл docker-compose, выяснять порты - выход: [[Система Kubernetes]]
=== Разработка и распространение ПО с использованием Kubernetes ===
- Производим [[Система Kubernetes#Установка minikube]] для gitlab-runner@server (для доступа к репозиторию, на нем же, понадобится включить [[Сервисы Gateway и routing]])
- Преподаватель разворачивает [[Система Kubernetes#Кластер Kubernetes]] на node1,2,3
- [[Система Kubernetes#Инструмент командной строки kubectl]] для gitlab-runner@server
- Изучаем [[Система Kubernetes#Базовые объекты k8s]]
- Автоматизируем deploy используя [[Инструмент GitLab#GitLab CI/CD]], сталкиваемся с необходимостью править версию в манифесте, рассмотрев вариант envsubst (здесь же можно и keepalived и нагрузочное тестирование и автоматическое увеличение подов ...) приходим к Helm
- Изучаем тему [[Система Kubernetes#Ingress]] для minikube и используем [[Система Kubernetes#Helm]] для его развертывании в кластере
- Изучаем тему [[Система Kubernetes#Helm]] на примере разработки чарта для приложения webd
- Возвращаемся к deploy используя [[Инструмент GitLab#GitLab CI/CD]] и чарта [[Система Kubernetes#Helm]] приложения webd
==== ToDo ====
- Хранение общих файлов (сертификатов/ключей) в gitlab
- Тестирование ansible playbook
==== Методические приемы ====
- Преподаватель создает основы проекта копипастингом из методички, слушатели загружают себе, помещают в свой gitlab и проводят эксперименты CI/CD
===== Модуль 0. Подготовка стенда в классе =====
* Узнать свой номер стенда
* Проверить наличие дистрибутивов и образов (будет сделано)
* Использовать кэширующий прокси для ускорения загрузки
* Настроить подключение к LAN стенда [[netsh#Настройка IP]]
===== Модуль 1: Развертывание IT инфраструктуры =====
==== Теория ====
* Инфраструктура как код
==== Лабораторные работы: Развертывание объектов мониторинга ====
=== 1.1 Развертывание системы gate ===
# sh net_gate.sh
# init 6
* ? Настройка LAN .254
* ? [[Сервис DNS#Настройка мастер сервера зоны corpX.un]] на gate
# cat /etc/bind/corp13.un
$TTL 3h
@ SOA ns root.ns 1 1d 12h 1w 3h
NS ns
A 192.168.13.1
MX 1 server
ns A 192.168.13.1
gate A 192.168.13.1
server A 192.168.13.1
node1 A 192.168.13.10
node2 A 192.168.13.20
node3 A 192.168.13.30
=== 1.2 Инфраструктура как код ===
* [[Технология Vagrant]]
==== Вопросы ====
===== Модуль 2: Использование контейнеров =====
==== Теория ====
==== Лабораторные работы: Использование контейнеров ====
=== 2.1 Использование контейнеров ===
* [[Технология Docker]]
==== Вопросы ====
===== Модуль 3: Использование GitLab =====
==== Теория ====
==== Лабораторные работы: Использование GitLab ====
=== 3.1 Использование GitLab ===
==== Вопросы ====
===== Модуль N: Тема модуля =====
==== Теория ====
==== Лабораторные работы: Тема лабораторных работ ====
=== N.1 Тема лабораторной работы ===
==== Вопросы ====
===== Модуль N: Тема модуля =====
==== Теория ====
==== Лабораторные работы: Тема лабораторных работ ====
=== N.1 Тема лабораторной работы ===
==== Вопросы ====
===== Модуль N: Тема модуля =====
==== Теория ====
==== Лабораторные работы: Тема лабораторных работ ====
=== N.1 Тема лабораторной работы ===
==== Вопросы ====
* [[Технология Docker]]
* [[Сервис HTTP#NGINX]]
* [[Сервис NAT]]