User Tools

Site Tools


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

Differences

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

Link to this comparison view

devops1._основные_инструменты_2024 [2024/04/16 18:07]
val created
devops1._основные_инструменты_2024 [2024/04/16 18:19] (current)
val
Line 1: Line 1:
 ====== DevOps1. Основные инструменты ====== ====== DevOps1. Основные инструменты ======
 +
 +===== Программа курса =====
 +
 +  * [[https://​www.specialist.ru/​course/​kuber|DevOps. Уровень 1. Инфраструктура как код, основные инструменты]]
 +  * [[https://​www.specialist.ru/​track/​dp-devops|ДП-ДЕВОПС-М]]
 +
 +===== Модуль 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 -r 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 ===
 +
 +  * !!! Добавить HDD 20GB к 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 ===
 +
 +  * [[Управление файловыми системами в Linux#​Использование LVM]]
 +  * [[Финальная настройка 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>​
 +
 +==== Вопросы ====
 +
 +===== Модуль 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.11.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>​
 +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, собираем образ приложения "​вручную"​ из под root
 +  * Изучаем [[Технология Docker#​Процессы контейнера и системы]] и [[Технология Docker#​Анализ параметров запущенного контейнера]] (преподаватель,​ можно на node1, пока у всех ставится docker)
 +
 +  * Для удобства,​ выполнить [[Настройка командных интерпретаторов]]
 +  * Используя [[Технология Docker#​Предоставление прав непривилегированным пользователям]] для gitlab-runner (пригодится для процесса CD в minikube), знакомимся с [[Технология Docker#​Создание контейнера для приложения с использованием Dockerfile]]
 +
 +  * [[Технология Docker#​Запуск в режиме демона и подключение к контейнеру]] несколько копий вручную,​ и, через [[Сервис Keepalived#​Настройка балансировки нагрузки]],​ повторяем нагрузочное тестирование (преподаватель)
 +  * Знакомимся с [[Технология Docker#​docker-compose]] для запуска нескольких копий приложения
 +
 +=== 4.3 Использование технологии Docker Registry для распространения приложения webd ===
 +
 +Методически,​ достаточно показать на node1
 +
 +  * Создаем (Public, без README) проект webd и размещаем каталог webd в [[Сервис Git#​On-Premise gitlab]] пользуясь инструкцией к проекту
 +  * Включаем [[Инструмент GitLab#​GitLab Docker Registry]]
 +  * Cохраняем образ, используя [[Технология Docker#​Локальные репозитории]]
 +  * [[Сервис NFS]] на server (преподаватель)
 +  * [[Сервис NFS#​Установка nfs клиента]] на node1,2,3 и монтирование /var/www
 +  * Проверяем наличие,​ или устанавливаем Docker на node1,2,3
 +  * Используя доступ к [[Технология Docker#​Локальные репозитории]] на node1,2,3 запускаем приложение
 +
 +=== 4.4 GitLab CI для Docker images ===
 +
 +  * Автоматизируем сборку образа используя [[Средства программирования 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 ===
 +
 +  * Может закончиться место на диске VM server и понадобиться [[Управление ПО в Linux#​Удаление архива установленных пакетов]] плюс отключение [[Инструмент GitLab#​GitLab Prometheus]] или [[Управление файловыми системами в Linux#​Расширение существующего логического тома]]
 +  * Производим [[Система Kubernetes#​Установка minikube]] для gitlab-runner@server (для доступа к репозиторию,​ на нем же, понадобится включить [[Сервисы Gateway и routing]])
 +
 +=== 5.2 Базовые объекты k8s ===
 +
 +  * Изучаем [[Система Kubernetes#​Базовые объекты k8s]] (gitlab-runner@server:​~/​webd$)
 +  * Для понимания работы [[Система Kubernetes#​Ingress]] (понадобится в следующем курсе),​ настраиваем [[Сервис HTTP#​NGINX]] для доступа к приложению webd в minikube с хост системы ​
 +  * Тестируем livenessProbe с extern-host
 +<​code>​
 +extern-host#​ cat /etc/hosts
 +</​code><​code>​
 +...
 +172.16.1.X ​    ​webd.corpX.un
 +</​code>​
 +
 +=== 5.3 Deploy в k8s ===
 +
 +  * Автоматизируем deploy используя [[Инструмент GitLab#​Пример shell Kubernetes]] GitLab CD (см. выше), сталкиваемся с необходимостью править версию в манифесте,​ рассмотрев вариант envsubst видим, необходимость в Helm
 +  * В финале,​ можно "​собрать"​ новую версию приложения на gate из под учетной записи student
 +
 +==== Вопросы ====
 +
 +  * Почему Kubernetes часто обозначают K8s?
 +  * Чем K8s отличается от Docker-Compose?​
 +  * Что используется для описания состояния объектов в K8s?
 +  * Как связаны понятия Deployment, Replica Sets, Pods?
 +  * Для чего используются Namespace?
 +
 +===== Модуль 2: От Git к SCM к CI/CD =====
 +
 +  * !!! Заранее выполняем на server
 +  * [[Переменные окружения#​Установка переменных окружения]] http_proxy, https_proxy и no_proxy (только для ОО)
 +
 +  * Установку [[Инструмент 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#​Обновление сетевого репозитория из локального]] (копируем инструкции из посказки,​ ветка master)
 +  * Редактируем 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]]
 +
 +  * http://​server.corpX.un/​
 +  * Используем [[Инструмент GitLab#​Управление пользователями]] в GitLab для отключения авто регистрации,​ назначении пароля пользователю root и создания учетной записи student
 +
 +  * http://​server.corpX.un:​81/​mail
 +
 +!!! в теме Ansible
 +
 +  * Создаем новый репозиторий (Project name: openvpn1, Private, без README) в GitLab ​
 +  * Пользуясь инструкцией к проекту,​ включаем [[Сервис Git]] для каталога openvpn1 (ubuntu20 ветка master) и помещаем его в GitLab
 +
 +  * Устанавливаем и регистрируем [[Инструмент GitLab#​GitLab Runner]] (shell) на server
 +  * Используя GitLab Pipeline Editor добавляем в [[Инструмент GitLab#​Пример shell ansible]] Pipeline и наблюдаем выкатку в прод после Commit в master
 +
 +  * Добавляем параметры 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]]
 +  * Управление инфраструктурой на примере [[Сервис 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
 +  * Разворачиваем [[Пакет OpenVPN]] в конфигурации с [[Пакет OpenVPN#​Использование PAM аутентификации]] на node1,​2,​3 ​ с [[Сервис Ansible#​Использование ролей]] (не забыть про [[Сервисы 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?
 +
 +
 +
 +
 +===== Дополнительные материалы =====
  
devops1._основные_инструменты_2024.txt · Last modified: 2024/04/16 18:19 by val