User Tools

Site Tools


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

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
devops1._основные_инструменты [2023/09/20 09:58]
val [Лабораторные работы: Работа с контейнерами Docker]
devops1._основные_инструменты [2024/10/28 07:17] (current)
val
Line 5: Line 5:
   * [[https://​www.specialist.ru/​course/​kuber|DevOps. Уровень 1. Инфраструктура как код, основные инструменты]]   * [[https://​www.specialist.ru/​course/​kuber|DevOps. Уровень 1. Инфраструктура как код, основные инструменты]]
   * [[https://​www.specialist.ru/​track/​dp-devops|ДП-ДЕВОПС-М]]   * [[https://​www.specialist.ru/​track/​dp-devops|ДП-ДЕВОПС-М]]
 +
 +  * [[https://​dzen.ru/​a/​ZVIBk2kT0ntemhwK|∞ Дорожная карта DevOps-инженера в 2023 году]]
  
 ===== Модуль 0. Подготовка стенда в классе ===== ===== Модуль 0. Подготовка стенда в классе =====
Line 42: Line 44:
 === 1.2 Настройка сети VM gate и server === === 1.2 Настройка сети VM gate и server ===
  
-  * !!! Добавить HDD 20GB к server 
   * [[Настройка стендов слушателей#​Настройка виртуальных систем Unix]] с использованием [[Настройка стендов слушателей#​Скрипты автоконфигурации]]   * [[Настройка стендов слушателей#​Настройка виртуальных систем Unix]] с использованием [[Настройка стендов слушателей#​Скрипты автоконфигурации]]
  
Line 63: Line 64:
 === 1.3 настройка сервиса DNS === === 1.3 настройка сервиса DNS ===
  
-  * [[Управление файловыми системами в Linux#​Использование LVM]] 
   * [[Финальная настройка DNS сервера]] ​   * [[Финальная настройка DNS сервера]] ​
 <​code>​ <​code>​
Line 84: Line 84:
  
   * !!! Заранее выполняем на server   * !!! Заранее выполняем на server
-  * [[Переменные окружения#​Установка переменных окружения]] http_proxy, https_proxy и no_proxy (только для ОО)+
   * Установку [[Инструмент Gitea]]   * Установку [[Инструмент Gitea]]
   * Установку [[Сервис JRE]] (и на gate)   * Установку [[Сервис JRE]] (и на gate)
   * Установку [[Инструмент Jenkins]] !!! и установку плагинов !!!   * Установку [[Инструмент Jenkins]] !!! и установку плагинов !!!
 +
   * Установку [[Сервис Ansible]]   * Установку [[Сервис Ansible]]
   * Cкачать deb пакет [[Инструмент GitLab#​GitLab Runner]]   * Cкачать deb пакет [[Инструмент GitLab#​GitLab Runner]]
Line 111: Line 112:
   * [[Сервис DHCP#​Статистика DHCP сервера]]   * [[Сервис DHCP#​Статистика DHCP сервера]]
   * [[Установка ПО из исходных текстов#​Использование утилиты make]] (установить)   * [[Установка ПО из исходных текстов#​Использование утилиты make]] (установить)
-  * [[Модуль AppArmor#​Определение наличия и правка профилей для служб]] !!! проверить,​ не качается ли что-то на server !!!+  * [[Модуль AppArmor#​Определение наличия и правка профилей для служб]] ​(удалить профиль) ​!!! перед перезагрузкой gate, проверить,​ не качается ли что-то на server !!!
 <​code>​ <​code>​
 gate# su - student gate# su - student
 </​code>​ </​code>​
   * [[Установка ПО из исходных текстов#​Использование make для сопровождения файлов конфигурации сервиса]]   * [[Установка ПО из исходных текстов#​Использование make для сопровождения файлов конфигурации сервиса]]
-  * [[Сервис Git]] для каталога ~student/​dhcp/​ на gate+  * [[Сервис Git]] для каталога ~student/​dhcp/​ на gate (лучше в следующей лабораторной)
  
 === 2.2 Знакомимся с SCM Gitea === === 2.2 Знакомимся с SCM Gitea ===
Line 122: Line 123:
   * [[Инструмент Gitea]]   * [[Инструмент Gitea]]
   * Подключаемся как student, Repository Name: dhcp   * Подключаемся как student, Repository Name: dhcp
-  * [[Сервис Git#​Обновление сетевого репозитория из локального]] (копируем инструкции из посказки, ветка master)+  * [[Сервис Git#​Обновление сетевого репозитория из локального]] (копируем инструкции из подсказки)
   * Редактируем dhcpd.conf в Gitea (Commit to master branch)   * Редактируем dhcpd.conf в Gitea (Commit to master branch)
  
Line 132: Line 133:
  
   * [[Инструмент Jenkins]]   * [[Инструмент Jenkins]]
-  * [[https://​youtu.be/​FeD6VBY2Xss|Вход в CI/CD для Linux-админа]] 
  
 === 2.4 Знакомимся с GitLab CI/CD === === 2.4 Знакомимся с GitLab CI/CD ===
  
-  * http://server.corpX.un/ +  * [[https://youtu.be/FeD6VBY2Xss|Вебинар: Вход в CI/CD для Linux-админа]] 
-  * Используем [[Инструмент GitLab#​Управление пользователями]] ​в GitLab для отключения ​авто регистрации, назначении ​пароля пользователю root и создания учетной записи student+  * [[https://​habr.com/​ru/​articles/​716454/​|Статья: Самый ​простой пример CI/CD]]
  
-  * http://​server.corpX.un:81/mail+  ​* Установка [[Инструмент GitLab]] 
 +  ​* http://​server.corpX.un/​ 
 +  * Используем [[Инструмент GitLab#​Управление пользователями]] в GitLab для назначении пароля пользователю root и создания учетной записи student (лучше назначить его администратором)
  
 !!! в теме Ansible !!! в теме Ansible
Line 147: Line 149:
  
   * Устанавливаем и регистрируем [[Инструмент GitLab#​GitLab Runner]] (shell) на server   * Устанавливаем и регистрируем [[Инструмент GitLab#​GitLab Runner]] (shell) на server
-  * Используя GitLab Pipeline Editor добавляем в [[Инструмент GitLab#​Пример shell ansible]] Pipeline и наблюдаем выкатку в прод после Commit в master+  * Используя GitLab Pipeline Editor добавляем в проект openvpn1 ​[[Инструмент GitLab#​Пример shell ansible]] Pipeline и наблюдаем выкатку в прод после Commit в master/main
  
   * Добавляем параметры dhcp-option,​block-outside-dns и Commit в test с созданием Merge requests и наблюдаем выкатку в тестовую среду, проверяем работу сервиса в ней   * Добавляем параметры dhcp-option,​block-outside-dns и Commit в test с созданием Merge requests и наблюдаем выкатку в тестовую среду, проверяем работу сервиса в ней
Line 168: Line 170:
   * Построение ландшафта инфраструктуры на примере [[Технология Vagrant]]   * Построение ландшафта инфраструктуры на примере [[Технология Vagrant]]
   * Построение ландшафта облачной инфраструктуры с использованием [[https://​ru.wikipedia.org/​wiki/​Terraform|HashiCorp Terraform]]   * Построение ландшафта облачной инфраструктуры с использованием [[https://​ru.wikipedia.org/​wiki/​Terraform|HashiCorp Terraform]]
 +  * Видео урок: [[On-premise Terraform]]
   * Управление инфраструктурой на примере [[Сервис Ansible]]   * Управление инфраструктурой на примере [[Сервис Ansible]]
  
Line 181: Line 184:
 === 3.2 Использование Ansible === === 3.2 Использование Ansible ===
  
-  * [[Сервис Ansible]] openvpn, docker (только слушатели),​ можно addusers.yml для OpenVPN+  * [[Сервис Ansible]], модуль apt на примере ​openvpn, ​playbook ​docker (только слушатели),​ можно addusers.yml ​(для OpenVPN)
   * Преподаватель импортирует систему Windows для тестирования OpenVPN   * Преподаватель импортирует систему Windows для тестирования OpenVPN
-  * Разворачиваем [[Пакет OpenVPN]] в конфигурации с [[Пакет OpenVPN#​Использование PAM аутентификации]] на node1,​2,​3  ​с [[Сервис Ansible#​Использование ролей]] ​(не забыть про [[Сервисы Gateway и routing#​Управление таблицей маршрутизации]] на gate)+  * C [[Сервис Ansible#​Использование ролей]] разворачиваем [[Пакет OpenVPN]] в конфигурации с [[Пакет OpenVPN#​Использование PAM аутентификации]] на node1,​2,​3 ​ (не забыть про [[Сервисы Gateway и routing#​Управление таблицей маршрутизации]] на gate)
   * Для подключения используем [[Сервис Keepalived]] в режиме [[Сервис Keepalived#​Настройка балансировки нагрузки]] и corpX.ovpn ([[Пакет OpenVPN#​Настройка клиента]]) в windows или linux   * Для подключения используем [[Сервис Keepalived]] в режиме [[Сервис Keepalived#​Настройка балансировки нагрузки]] и corpX.ovpn ([[Пакет OpenVPN#​Настройка клиента]]) в windows или linux
   * Можно добавить [[Сервис NAT]] для зрелищности   * Можно добавить [[Сервис NAT]] для зрелищности
Line 215: Line 218:
  
   * Через [[Сервис Keepalived#​Настройка балансировки нагрузки]] в Keepalived предоставляем доступ снаружи ​   * Через [[Сервис 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://​lindevs.com/​install-vegeta-on-ubuntu|Install Vegeta on Ubuntu 20.04]]
   * [[https://​github.com/​tsenart/​vegeta/​releases|github/​tsenart/​vegeta/​releases]]   * [[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://​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)]]   * [[https://​serverfault.com/​questions/​389645/​ftp-tcp-server-failing-looping|ftp/​tcp server failing (looping)]]
Line 225: Line 230:
   * в качестве external-host можно использовать gate   * в качестве external-host можно использовать gate
 <​code>​ <​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#​ curl http://​172.16.1.X
  
-external-host#​ echo "GET http://​172.16.1.X"​ | vegeta attack -duration=60s -rate=400 | vegeta report+external-host#​ echo "GET http://​172.16.1.X"​ | vegeta attack -duration=20s -rate=100 | vegeta report
  
 server# tail -f /​var/​log/​syslog server# tail -f /​var/​log/​syslog
Line 234: Line 241:
 === 4.2 Использование технологии Docker и docker-compose для масштабирования приложения webd на одном узле === === 4.2 Использование технологии Docker и docker-compose для масштабирования приложения webd на одном узле ===
  
-  * Устанавливаем [[Технология Docker]] на server, ​собираем образ приложения ​"вручную" ​из под root+  * Устанавливаем [[Технология Docker]] на server, и рассматриваем ​[[Технология Docker#​Создание контейнера для ​приложения вручную]] и образа из него (из под root
 +  * Рассматриваем [[Технология Docker#​Запуск в режиме демона и подключение к контейнеру]]
   * Изучаем [[Технология Docker#​Процессы контейнера и системы]] и [[Технология Docker#​Анализ параметров запущенного контейнера]] (преподаватель,​ можно на node1, пока у всех ставится docker)   * Изучаем [[Технология Docker#​Процессы контейнера и системы]] и [[Технология Docker#​Анализ параметров запущенного контейнера]] (преподаватель,​ можно на node1, пока у всех ставится docker)
  
-  * Используя [[Технология Docker#​Предоставление прав непривилегированным пользователям]] ​и su - gitlab-runner (пригодится для процесса CD в minikube, для удобства работы выполнить [[Настройка командных интерпретаторов]]), знакомимся с [[Технология Docker#​Создание контейнера для приложения с использованием Dockerfile]]+  ​* Для удобства,​ выполнить [[Настройка командных интерпретаторов]] 
 +  ​* Используя [[Технология Docker#​Предоставление прав непривилегированным пользователям]] ​для ​gitlab-runner (пригодится для процесса CD в minikube), знакомимся с [[Технология Docker#​Создание контейнера для приложения с использованием Dockerfile]]
  
   * [[Технология Docker#​Запуск в режиме демона и подключение к контейнеру]] несколько копий вручную,​ и, через [[Сервис Keepalived#​Настройка балансировки нагрузки]],​ повторяем нагрузочное тестирование (преподаватель)   * [[Технология Docker#​Запуск в режиме демона и подключение к контейнеру]] несколько копий вручную,​ и, через [[Сервис Keepalived#​Настройка балансировки нагрузки]],​ повторяем нагрузочное тестирование (преподаватель)
-  * Знакомимся с [[Технология Docker#​docker-compose]] для запуска нескольких копий приложения+  * Знакомимся с [[Технология Docker#​docker-compose]] для запуска нескольких копий приложения ​(без sftp и vol)
  
 === 4.3 Использование технологии Docker Registry для распространения приложения webd === === 4.3 Использование технологии Docker Registry для распространения приложения webd ===
Line 246: Line 255:
 Методически,​ достаточно показать на node1 Методически,​ достаточно показать на node1
  
-  * Создаем (Public, без README) проект webd и размещаем каталог webd в [[Сервис Git#​On-Premise gitlab]] пользуясь инструкцией к проекту+  * Создаем (Public, без README) проект webd 
 +  * Размещаем каталог webd в [[Сервис Git#​On-Premise gitlab]] пользуясь инструкцией к проекту ​(можно в теме 4.4)
   * Включаем [[Инструмент GitLab#​GitLab Docker Registry]]   * Включаем [[Инструмент GitLab#​GitLab Docker Registry]]
   * Cохраняем образ, используя [[Технология Docker#​Локальные репозитории]]   * Cохраняем образ, используя [[Технология Docker#​Локальные репозитории]]
   * [[Сервис NFS]] на server (преподаватель)   * [[Сервис NFS]] на server (преподаватель)
   * [[Сервис NFS#​Установка nfs клиента]] на node1,2,3 и монтирование /var/www   * [[Сервис NFS#​Установка nfs клиента]] на node1,2,3 и монтирование /var/www
-  * Проверяем наличие,​ или устанавливаем Docker на node1,2,3+  * Проверяем наличие,​ или ​[[Технология Docker#​Установка|устанавливаем]] Docker на node1,2,3
   * Используя доступ к [[Технология Docker#​Локальные репозитории]] на node1,2,3 запускаем приложение   * Используя доступ к [[Технология Docker#​Локальные репозитории]] на node1,2,3 запускаем приложение
  
 === 4.4 GitLab CI для Docker images === === 4.4 GitLab CI для Docker images ===
  
-  * Автоматизируем сборку образа используя [[Средства программирования shell#​Проверка синтаксиса]] и [[Инструмент GitLab#​Пример shell docker]] GitLab CI/CD, не забыв назначить метки Gitlab Runner. Можно обсудить добавление перемнных ​ в проект и вывод их через env+  ​* Размещаем каталог webd в [[Сервис Git#​On-Premise gitlab]] пользуясь инструкцией к проекту 
 +  ​* Автоматизируем сборку образа используя [[Средства программирования shell#​Проверка синтаксиса]] и [[Инструмент GitLab#​Пример shell docker]] GitLab CI/CD, не забыв назначить метки Gitlab Runner. Можно обсудить добавление переменных в проект и вывод их через env
  
 === 4.5 CD приложения webd с использованием docker-compose === === 4.5 CD приложения webd с использованием docker-compose ===
Line 288: Line 299:
 === 5.2 Базовые объекты k8s === === 5.2 Базовые объекты k8s ===
  
-  * Изучаем [[Система Kubernetes#​Базовые объекты k8s]] +  ​* [[Настройка командных интерпретаторов]] (gitlab-runner@server) 
-  * Для понимания работы [[Система Kubernetes#​Ingress]] (понадобится в следующем курсе),​ настраиваем [[Сервис HTTP#NGINX]] для доступа к приложению webd в minikube с хост системы ​+  ​* Изучаем [[Система Kubernetes#​Базовые объекты k8s]]  
 +  * Для понимания работы [[Система Kubernetes#​Ingress]] (понадобится в следующем курсе),​ настраиваем [[Сервис HTTP#Прокси "​красивого"​ URL в приложение (пример 3)|Nginx]] для доступа к приложению webd в minikube с хост системы ​ 
 +  * Настраиваем [[Сервис Keepalived#​Настройка балансировки нагрузки|Keepalived]] и тестируем [[Утилита curl]]
   * Тестируем livenessProbe с extern-host   * Тестируем livenessProbe с extern-host
 <​code>​ <​code>​
Line 296: Line 309:
 ... ...
 172.16.1.X ​    ​webd.corpX.un 172.16.1.X ​    ​webd.corpX.un
 +</​code>​
 +
 +  или
 +
 +<​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>​ </​code>​
  
 === 5.3 Deploy в k8s === === 5.3 Deploy в k8s ===
  
-  * Автоматизируем deploy используя [[Инструмент GitLab#​Пример shell Kubernetes]] GitLab CDсталкиваемся с необходимостью править версию в манифесте,​ рассмотрев вариант envsubst видим необходимость в Helm+  * Автоматизируем deploy используя [[Инструмент GitLab#​Пример shell Kubernetes]] GitLab CD (см. выше) 
 +  * Тестируем "​выкатку" новой версии приложения через запрос несуществующего файла и [[Система Kubernetes#​Версии deployment]] 
 +  * Столкнувшись ​с необходимостью править версию в манифесте,​ рассмотрев вариант ​с envsubst ​в [[Инструмент GitLab#​Пример shell Kubernetes]], ​видим необходимость в Helm 
 +  * В финале,​ можно "​закоммитить"​ новую версию приложения прямо в GitLab
  
  
devops1._основные_инструменты.1695193126.txt.gz · Last modified: 2023/09/20 09:58 by val