User Tools

Site Tools


devops1._основные_инструменты_2024

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
devops1._основные_инструменты_2024 [2024/04/16 18:07]
val created
devops1._основные_инструменты_2024 [2025/02/19 06:26] (current)
val created
Line 1: Line 1:
-====== DevOps1. Основные инструменты ======+====== DevOps1. Основные инструменты ​2024 ====== 
 + 
 +===== Программа курса ===== 
 + 
 +  * [[https://​www.specialist.ru/​course/​kuber|DevOps. Уровень 1. Инфраструктура как код, основные инструменты]] 
 +  * [[https://​www.specialist.ru/​track/​dp-devops|ДП-ДЕВОПС-М]] 
 + 
 +  * [[https://​dzen.ru/​a/​ZVIBk2kT0ntemhwK|∞ Дорожная карта DevOps-инженера в 2023 году]] 
 + 
 +===== Модуль 0. Подготовка стенда в классе ===== 
 + 
 +  * Узнать свой номер стенда 
 +  * Проверить наличие дистрибутивов и образов (будет сделано) 
 +  * Использовать кэширующий прокси для ускорения загрузки 
 + 
 +===== Модуль 1: Развертывание стенда ===== 
 + 
 +==== Теория ==== 
 + 
 +  * Разворачиваем стенд курса [[https://​www.specialist.ru/​course/​yun2-b|Linux. Уровень 2. Администрирование сервисов и сетей]] 
 + 
 +==== Лабораторные работы:​ Развертывание стенда ==== 
 + 
 +=== 1.1 Схема стенда,​ импорт,​ настройка и запуск VM gate и server === 
 +<​code>​ 
 +Запустите с правами Administrator 
 + 
 +C:​\cmder\cmder.exe 
 + 
 +bash 
 + 
 +cd 
 + 
 +test -d conf && rm -rf conf 
 + 
 +git clone http://​val.bmstu.ru/​unix/​conf.git 
 + 
 +cd conf/​virtualbox/​ 
 + 
 +!!! 8 - это номер курса, вместо X укажите Ваш номер стенда,​ если не знаете его, спросите преподавателя !!! 
 + 
 +./setup.sh X 8 
 +</​code>​ 
 +=== 1.2 Настройка сети VM gate и server === 
 + 
 +  * [[Настройка стендов слушателей#​Настройка виртуальных систем Unix]] с использованием [[Настройка стендов слушателей#​Скрипты автоконфигурации]] 
 + 
 +  * gate 
 +<​code>​ 
 +# sh net_gate.sh 
 + 
 +# init 6 
 +</​code>​ 
 + 
 +  * server 
 +<​code>​ 
 +# sh net_server.sh 
 + 
 +# init 6 
 +</​code>​ 
 + 
 +  * Создать в Putty профили gate, server и подключиться 
 + 
 +=== 1.3 настройка сервиса DNS === 
 + 
 +  * [[Финальная настройка DNS сервера]]  
 +<​code>​ 
 +server:~# sh conf/​dns.sh 
 +</​code>​ 
 + 
 +  * Настройка клиента DNS на gate и server 
 +<​code>​ 
 +# cat /​etc/​resolv.conf 
 +</​code><​code>​ 
 +search corpX.un 
 +nameserver 192.168.X.10 
 +</​code><​code>​ 
 +# nslookup ns 
 +</​code>​ 
 + 
 +==== Вопросы ==== 
 + 
 +===== Модуль 2: От Git к SCM к CI/CD ===== 
 + 
 +  * !!! Заранее выполняем на server 
 + 
 +  * Установку [[Инструмент Gitea]] 
 +  * Установку [[Сервис JRE]] (и на gate) 
 +  * Установку [[Инструмент Jenkins]] !!! и установку плагинов !!! 
 + 
 +  * Установку [[Сервис Ansible]] 
 +  * Cкачать deb пакет [[Инструмент GitLab#​GitLab Runner]] 
 +  * Установку [[Инструмент GitLab]] 
 + 
 +  * !!! Заранее выполняем на host системе 
 +  * Технология Vagrant [[Технология Vagrant#​Установка]] 
 + 
 +==== Теория ==== 
 + 
 +  * [[Сервис Git]] 
 + 
 + 
 +==== Лабораторные работы:​ От Git к CI/CD==== 
 + 
 +=== 2.1 Вспоминаем Git === 
 + 
 +  * [[Сервис Git]] для каталога /etc на gate (демонстрирует преподаватель) 
 +  * [[Сервис DHCP]] 
 +<​code>​ 
 +gate:~# sh conf/​dhcp.sh 
 +</​code>​ 
 +  * [[Сервис DHCP#​Статистика DHCP сервера]] 
 +  * [[Установка ПО из исходных текстов#​Использование утилиты make]] (установить) 
 +  * [[Модуль AppArmor#​Определение наличия и правка профилей для служб]] (удалить профиль) !!! перед перезагрузкой gate, проверить,​ не качается ли что-то на server !!! 
 +<​code>​ 
 +gate# su - student 
 +</​code>​ 
 +  * [[Установка ПО из исходных текстов#​Использование make для сопровождения файлов конфигурации сервиса]] 
 +  * [[Сервис Git]] для каталога ~student/​dhcp/​ на gate (лучше в следующей лабораторной) 
 + 
 +=== 2.2 Знакомимся с SCM Gitea === 
 + 
 +  * [[Инструмент Gitea]] 
 +  * Подключаемся как student, Repository Name: dhcp 
 +  * [[Сервис Git#​Обновление сетевого репозитория из локального]] (копируем инструкции из подсказки) 
 +  * Редактируем dhcpd.conf в Gitea (Commit to master branch) 
 + 
 +=== 2.3 Знакомимся с Jenkins CI/CD === 
 + 
 +  * [[Сервис DHCP#​Статистика DHCP сервера]] 
 +  * [[Сервис Git#​Клонирование и обновление локального репозитория из сетевого]] (можно как root на gate) 
 +  * [[Установка ПО из исходных текстов#​Использование make для сопровождения файлов конфигурации сервиса]] 
 + 
 +  * [[Инструмент Jenkins]] 
 + 
 +=== 2.4 Знакомимся с GitLab CI/CD === 
 + 
 +  * [[https://​youtu.be/​FeD6VBY2Xss|Вебинар:​ Вход в CI/CD для Linux-админа]] 
 +  * [[https://​habr.com/​ru/​articles/​716454/​|Статья:​ Самый простой пример CI/CD]] 
 + 
 +  * Установка [[Инструмент GitLab]] 
 +  * http://​server.corpX.un/​ 
 +  * Используем [[Инструмент GitLab#​Управление пользователями]] в GitLab для назначении пароля пользователю root и создания учетной записи student (лучше назначить его администратором) 
 + 
 +!!! в теме Ansible 
 + 
 +  * Создаем новый репозиторий (Project name: openvpn1, Private, без README) в GitLab  
 +  * Пользуясь инструкцией к проекту,​ включаем [[Сервис Git]] для каталога openvpn1 (ubuntu20 ветка master) и помещаем его в GitLab 
 + 
 +  * Устанавливаем и регистрируем [[Инструмент GitLab#​GitLab Runner]] (shell) на server 
 +  * Используя GitLab Pipeline Editor добавляем в проект openvpn1 [[Инструмент GitLab#​Пример shell ansible]] Pipeline и наблюдаем выкатку в прод после Commit в master/​main 
 + 
 +  * Добавляем параметры dhcp-option,​block-outside-dns и Commit в test с созданием Merge requests и наблюдаем выкатку в тестовую среду, проверяем работу сервиса в ней 
 + 
 +  * Одобряем Merge requests и наблюдаем выкатку в прод  
 + 
 +  * Дополнительное задание - добавить [[Пакет OpenVPN#​Тестирование конфигурации]] перед деплоем 
 + 
 +==== Вопросы ==== 
 + 
 +  - Чем отличается GitLab от Git? 
 +  - Что делают операции add, commit, push в Git? 
 +  - Для чего нужен GitLab Runner? 
 +  - Как называется файл для CI/CD в GitLab? 
 +  - Что такое "​ветка"​ в Git и почему переименовали master в main? 
 +===== Модуль 3: Инфраструктура как код ===== 
 + 
 +==== Теория ==== 
 + 
 +  * Построение ландшафта инфраструктуры на примере [[Технология Vagrant]] 
 +  * Построение ландшафта облачной инфраструктуры с использованием [[https://​ru.wikipedia.org/​wiki/​Terraform|HashiCorp Terraform]] 
 +  * Видео урок: [[On-premise Terraform]] 
 +  * Управление инфраструктурой на примере [[Сервис Ansible]] 
 + 
 + 
 +==== Лабораторные работы:​ Использование Vagrant ==== 
 + 
 +=== 3.1 Использование Vagrant === 
 + 
 +  * Добавляем DNS записи nodeN A 192.168.X.200+N в [[Сервис DNS#​Настройка мастер сервера зоны corpX.un]] 
 +  * Обзор команд [[Технология VirtualBox]] 
 +  * Развертываем с использованием [[Технология Vagrant]] node1,2,3 
 + 
 +=== 3.2 Использование Ansible === 
 + 
 +  * [[Сервис Ansible]], модуль apt на примере openvpn, playbook docker (только слушатели),​ можно addusers.yml (для OpenVPN) 
 +  * Преподаватель импортирует систему Windows для тестирования OpenVPN 
 +  * C [[Сервис Ansible#​Использование ролей]] разворачиваем [[Пакет OpenVPN]] в конфигурации с [[Пакет OpenVPN#​Использование PAM аутентификации]] на node1,​2,​3 ​ (не забыть про [[Сервисы Gateway и routing#​Управление таблицей маршрутизации]] на gate) 
 +  * Для подключения используем [[Сервис Keepalived]] в режиме [[Сервис Keepalived#​Настройка балансировки нагрузки]] и corpX.ovpn ([[Пакет OpenVPN#​Настройка клиента]]) в windows или linux 
 +  * Можно добавить [[Сервис NAT]] для зрелищности 
 + 
 +  * **Лабораторная работа 2.4** 
 + 
 +=== 3.3 Использование Ansible в Vagrant === 
 + 
 +  * Преподаватель демонстрирует установку docker на node1,2,3 с [[Сервис Ansible#​Использование playbook]] для [[Технология Vagrant#​Provision с использованием ansible]] в Vagrant 
 +==== Вопросы ==== 
 + 
 +  - Что общего и в чем отличие между Ansible, Vagrant и Terraform?​ 
 +  - Что означает термин Provision в Vagrant? 
 +  - Что такое module, playbook, role в Ansible? 
 +  - Назовите каталоги в роли Ansible 
 +  - Что должно быть установлено на целевой системе для управления через Ansible? 
 +  - Каким образом Vagrant управляет VM? 
 +  - Как реализован Ansible provision в Vagrant? 
 +===== Модуль 4: Распространение ПО с использованием контейнеров ===== 
 + 
 +==== Теория ==== 
 + 
 +  * [[Технология Docker]] 
 +==== Лабораторные работы:​ Работа с контейнерами Docker ==== 
 + 
 +=== 4.1 Разработка и нагрузочное тестирование приложения webd === 
 + 
 +  * Преподаватель использует linux систему external-host для нагрузочного тестирования и демонстрирует "​разработку"​ приложения на VM server 
 +  * [[Средства программирования shell#Web сервер на shell]] (методически,​ для обсуждения кода, можно, для упрощения,​ удалить из него все за комментированные строки,​ но не сохранять. Так же, можно вывести в лог [[Сервис HTTP#​Пример HTTP диалога]]) 
 +  * [[Сервис INETD]] 
 + 
 +  * Через [[Сервис Keepalived#​Настройка балансировки нагрузки]] в Keepalived предоставляем доступ снаружи  
 + 
 +  * [[https://​github.com/​wg/​wrk|wrk - a HTTP benchmarking tool]] 
 + 
 +  * [[https://​lindevs.com/​install-vegeta-on-ubuntu|Install Vegeta on Ubuntu 20.04]] 
 +  * [[https://​github.com/​tsenart/​vegeta/​releases|github/​tsenart/​vegeta/​releases]] 
 +  * [[https://​val.bmstu.ru/​unix/​WWW/​vegeta_12.12.0_linux_amd64.tar.gz]] 
 + 
 +  * [[https://​serverfault.com/​questions/​389645/​ftp-tcp-server-failing-looping|ftp/​tcp server failing (looping)]] 
 + 
 +  * duration=60s rate=400 выдерживают 10 экземпляров приложения 
 +  * в качестве external-host можно использовать gate 
 +<​code>​ 
 +cmd> route add 172.16.1.0 mask 255.255.255.0 10.5.N.178 
 + 
 +external-host#​ curl http://​172.16.1.X 
 + 
 +external-host#​ echo "GET http://​172.16.1.X"​ | vegeta attack -duration=20s -rate=100 | vegeta report 
 + 
 +server# tail -f /​var/​log/​syslog 
 +</​code>​ 
 + 
 +=== 4.2 Использование технологии Docker и docker-compose для масштабирования приложения webd на одном узле === 
 + 
 +  * Устанавливаем [[Технология Docker]] на server, и рассматриваем [[Технология Docker#​Создание образа для приложения вручную]] и образа из него (из под root) 
 +  * Рассматриваем [[Технология Docker#​Запуск в режиме демона и подключение к контейнеру]] 
 +  * Изучаем [[Технология Docker#​Процессы контейнера и системы]] и [[Технология Docker#​Анализ параметров запущенного контейнера]] (преподаватель,​ можно на node1, пока у всех ставится docker) 
 + 
 +  * Для удобства,​ выполнить [[Настройка командных интерпретаторов]] 
 +  * Используя [[Технология Docker#​Предоставление прав непривилегированным пользователям]] для gitlab-runner (пригодится для процесса CD в minikube), знакомимся с [[Технология Docker#​Создание образа для приложения с использованием Dockerfile]] 
 + 
 +  * [[Технология Docker#​Запуск в режиме демона и подключение к контейнеру]] несколько копий вручную,​ и, через [[Сервис Keepalived#​Настройка балансировки нагрузки]],​ повторяем нагрузочное тестирование (преподаватель) 
 +  * Знакомимся с [[Технология Docker#​docker-compose]] для запуска нескольких копий приложения (без sftp и vol) 
 + 
 +=== 4.3 Использование технологии Docker Registry для распространения приложения webd === 
 + 
 +Методически,​ достаточно показать на node1 
 + 
 +  * Создаем (Public, без README) проект webd 
 +  * Размещаем каталог webd в [[Сервис Git#​On-Premise gitlab]] пользуясь инструкцией к проекту (можно в теме 4.4) 
 +  * Включаем [[Инструмент GitLab#​GitLab Docker Registry]] 
 +  * Cохраняем образ, используя [[Технология Docker#​Локальные репозитории]] 
 +  * [[Сервис NFS]] на server (преподаватель) 
 +  * [[Сервис NFS#​Установка nfs клиента]] на node1,2,3 и монтирование /var/www 
 +  * Проверяем наличие,​ или [[Технология Docker#​Установка|устанавливаем]] Docker на node1,2,3 
 +  * Используя доступ к [[Технология Docker#​Локальные репозитории]] на node1,2,3 запускаем приложение 
 + 
 +=== 4.4 GitLab CI для Docker images === 
 + 
 +  * Размещаем каталог webd в [[Сервис Git#​On-Premise gitlab]] пользуясь инструкцией к проекту 
 +  * Автоматизируем сборку образа используя [[Средства программирования shell#​Проверка синтаксиса]] и [[Инструмент GitLab#​Пример shell docker]] GitLab CI/CD, не забыв назначить метки Gitlab Runner. Можно обсудить добавление переменных в проект и вывод их через env 
 + 
 +=== 4.5 CD приложения webd с использованием docker-compose === 
 + 
 +  * Модифицируем [[Технология Docker#​docker-compose]] для загрузки и запуска нескольких копий приложения и тестируем на server 
 +  * Используя [[Инструмент GitLab#​Подключение через API]] скачиваем на node1,2,3 файл [[Технология Docker#​docker-compose]] запускаем несколько экземпляров приложения и, через [[Сервис Keepalived#​Настройка балансировки нагрузки]],​ повторяем нагрузочное тестирование 
 +  * Считаем,​ что пришлось делать "​вручную":​ выбирать узлы, монтировать nfs, загружать файл docker-compose,​ выяснять порты - выход: [[Система Kubernetes]] 
 + 
 +==== Вопросы ==== 
 + 
 +  - Зачем нужен Docker? 
 +  - Чем Docker отличается от LXC? 
 +  - Из каких частей состоит имя образа?​ 
 +  - Чем Docker контейнер отличается от Docker образа?​ 
 +  - Как ПО в Docker контейнере может взаимодействовать с системой и другими контейнерами?​ 
 +  - Зачем нужен Dockerfile?​ 
 +  - Зачем "​запихивать"​ сразу много инструкций в команду RUN? 
 +  - Зачем нужен docker-compose?​ 
 +===== Модуль 5: Управление ПО с использованием Kubernetes ​ ===== 
 + 
 +==== Теория ==== 
 + 
 +  * [[Система Kubernetes]] 
 +==== Лабораторные работы:​ Тема лабораторных работ ==== 
 + 
 +=== 5.1 Установка и подключение к k8s === 
 + 
 +  * Производим [[Система Kubernetes#​Установка minikube]] для gitlab-runner@server (для доступа к репозиторию,​ на нем же, понадобится включить [[Сервисы Gateway и routing]]) 
 + 
 +=== 5.2 Базовые объекты k8s === 
 + 
 +  * Изучаем [[Система Kubernetes#​Базовые объекты k8s]]  
 +  * Для понимания работы [[Система Kubernetes#​Ingress]] (понадобится в следующем курсе),​ настраиваем [[Сервис HTTP#​Прокси "​красивого"​ URL в приложение (пример 3)|Nginx]] для доступа к приложению webd в minikube с хост системы  
 +  * Настраиваем [[Сервис Keepalived#​Настройка балансировки нагрузки|Keepalived]] и тестируем [[Утилита curl]] 
 +  * Тестируем livenessProbe с extern-host 
 + 
 +<​code>​ 
 +ext-host:~# echo "GET http://​webd.corpX.un"​ | vegeta attack -duration=20s -rate=400 -connect-to webd.corpX.un:​80:​172.16.1.X:​80 | vegeta report 
 +</​code>​ 
 + 
 +=== 5.3 Deploy в k8s === 
 + 
 +  * Автоматизируем deploy используя [[Инструмент GitLab#​Пример shell Kubernetes]] GitLab CD (см. выше) 
 +  * Тестируем "​выкатку"​ новой версии приложения через запрос несуществующего файла и [[Система Kubernetes#​Версии deployment]] 
 +  * Столкнувшись с необходимостью править версию в манифесте,​ рассмотрев вариант с envsubst в [[Инструмент GitLab#​Пример shell Kubernetes]],​ видим необходимость в Helm 
 +  * В финале,​ можно "​закоммитить"​ новую версию приложения прямо в GitLab 
 + 
 + 
 +==== Вопросы ==== 
 + 
 +  * Почему Kubernetes часто обозначают K8s? 
 +  * Чем K8s отличается от Docker-Compose?​ 
 +  * Что используется для описания состояния объектов в K8s? 
 +  * Как связаны понятия Deployment, Replica Sets, Pods? 
 +  * Для чего используются Namespace?​ 
 +===== Дополнительные материалы ===== 
 + 
 +  * [[https://​rutube.ru/​video/​010673aafbfa7669938d1c3fec3a2ed8|Зачем нужен Kubernetes?​]] 
 +  * [[https://​rutube.ru/​video/​299b61b457e95203906d9e60878993e3|Вход в Jenkins для администратора Linux]] 
 +  * [[https://​rutube.ru/​video/​5ba29eaa5f03107ea8d4b686ae7551a6|Развертывание инфраструктуры в On-premise облаке с использованием Terraform]] 
 + 
 + 
 + 
  
devops1._основные_инструменты_2024.1713280065.txt.gz · Last modified: 2024/04/16 18:07 by val