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._основные_инструменты [2024/11/23 11:51]
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|ДП-ДЕВОПС-М]]
  
-  * [[https://​dzen.ru/​a/​ZVIBk2kT0ntemhwK|∞ Дорожная карта DevOps-инженера в 2023 году]]+===== Модуль 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 62: Line 62:
   * Создать в Putty профили gate, server и подключиться   * Создать в Putty профили gate, server и подключиться
  
-=== 1.3 настройка сервиса ​DNS ===+=== 1.3 Инициализация ​репозитория Git === 
 + 
 +  * [[Сервис ​Git]], команды init, add, commit для каталога /etc на server
  
   * [[Финальная настройка 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>​ 
 +server# cat /​etc/​bind/​corpX.un 
 +</​code><​code>​ 
 +... 
 +webd            A       ​192.168.X.10 
 +</​code>​
  
-  * Установку [[Инструмент Gitea]] +  * [[Сервис ​Git]], команды git -C /etc/ ..., log, show, diff, reset 
-  * Установку ​[[Сервис ​JRE]] (и на gate) +==== Вопросы ====
-  * Установку [[Инструмент Jenkins]] !!! и установку ​плагинов !!!+
  
-  ​* Установку [[Сервис Ansible]] +  ​- Перечислите и объясните команды git
-  * Cкачать deb пакет [[Инструмент GitLab#​GitLab Runner]] +
-  * Установку [[Инструмент GitLab]]+
  
-  * !!! Заранее выполняем на host системе +===== Модуль 2: Docker =====
-  * Технология Vagrant [[Технология Vagrant#​Установка]]+
  
 ==== Теория ==== ==== Теория ====
  
-  * [[Сервис ​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#​Определение наличия и правка профилей для ​служб]] (удалить ​профиль) !!! перед перезагрузкой gate, проверить,​ не качается ли что-то на 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#Обновление сетевого репозитория ​из локального]] (копируем инструкции из подсказки) +
-  * Редактируем 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) 
 +  * Создаем [[Язык программирования Python#Web приложение]] на Python
  
-=== 2.4 Знакомимся с GitLab CI/CD ===+!!! Методическая рекомендация, запустить установку Vagrant из лабораторной работы 3.1
  
-  * [[https://​youtu.be/​FeD6VBY2Xss|Вебинар: Вход в CI/CD для Linux-админа]] +  * Собираем образ [[Технология Docker#Приложение python pywebd]] 
-  * [[https://​habr.com/​ru/​articles/​716454/​|Статья:​ Самый ​простой пример CI/CD]]+  * Вопросы оптимизации Dockerfile и безопасности
  
-  * Установка ​[[Инструмент GitLab]] +  * [[Технология Docker#Анализ параметров запущенного контейнера]]
-  * http://​server.corpX.un/​ +
-  * Используем [[Инструмент GitLab#Управление пользователями]] в GitLab для назначении ​пароля пользователю root и создания учетной записи student (лучше назначить его администратором)+
  
-!!! в теме Ansible+== 2.1.3 Приложение на Go ==
  
-  * Создаем новый репозиторий (Project name: openvpn1Private, без README) в GitLab  +!!! Методическая рекомендация, запустить установку GitLab ​из лабораторной работы 4.1
-  * Пользуясь инструкцией к проекту, включаем [[Сервис Git]] для каталога openvpn1 (ubuntu20 ветка master) и помещаем его в GitLab+
  
-  * Устанавливаем и регистрируем [[Инструмент GitLab#​GitLab Runner]] (shellна server +  * [[Язык программирования Golang]] (учетная запись root на gate
-  * Используя GitLab Pipeline Editor ​добавляем в проект openvpn1 [[Инструмент GitLab#Пример shell ansible]] Pipeline и наблюдаем выкатку в прод после Commit в master/main+  * Создаем ​[[Язык ​программирования Golang#Web приложение]] на Golang
  
-  * Добавляем параметры dhcp-option,​block-outside-dns и Commit в test с созданием Merge requests и наблюдаем выкатку в тестовую среду, проверяем работу сервиса в ней+<​code>​ 
 +~/gowebd# apt purge golang-go; apt autoremove ​-
 +</​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 171: Line 174:
   * Построение ландшафта облачной инфраструктуры с использованием [[https://​ru.wikipedia.org/​wiki/​Terraform|HashiCorp Terraform]]   * Построение ландшафта облачной инфраструктуры с использованием [[https://​ru.wikipedia.org/​wiki/​Terraform|HashiCorp Terraform]]
   * Видео урок: [[On-premise Terraform]]   * Видео урок: [[On-premise Terraform]]
-  * Управление инфраструктурой ​на примере [[Сервис Ansible]]+  * Управление инфраструктурой ​с использованием [[Сервис 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]], модуль 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.2 Управление инфраструктурой с использованием Ansible ===
  
-=== 3.3 Использование Ansible в Vagrant ===+  * Общие принципы и модели управления (Push and Pull) 
 +  * Ansible - [[Сервис Ansible#​Установка на управляющей системе]] 
 +  * [[Сервис Ansible#​Настройка групп управляемых систем]] 
 +  * [[Сервис Ansible#​Настройка транспорта ssh]] с [[Сервис SSH#​Парольная аутентификация]] 
 +  * [[Сервис Ansible#​Использование модулей]] для тестирования связи с управляемыми системами 
 +  * Установка Docker с помощью [[Сервис Ansible#​Использование playbook|Ansible playbook]] на node1,2,(лучше во время перерыва) 
 +  * [[Сервис Ansible#Использование ​шаблонов]] Jinja в playbook для установки Nginx (на gate, по окончании демонстрации удалить!!) 
 +  * Обсудить варианты [[Сервис ​Ansible#​Использование handlers]] 
 +  * Развертывание кластера приложения с [[Сервис Ansible#​Использование ролей]] Ansible
  
-  * Преподаватель демонстрирует установку docker на node1,2,3 с [[Сервис Ansible#​Использование playbook]] для [[Технология Vagrant#​Provision с использованием ansible]] в Vagrant 
 ==== Вопросы ==== ==== Вопросы ====
  
Line 204: 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://​github.com/​wg/​wrk|wrk - a HTTP benchmarking tool]]+  * [[Инструмент GitLab#​Установка из репозитория]]
  
-  * [[https://​lindevs.com/​install-vegeta-on-ubuntu|Install Vegeta on Ubuntu 20.04]] +!!! Методическая рекомендация,​ скачать gitlab-runner из лабораторной работы 4.2
-  * [[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)]]+  * [[Инструмент GitLab#​Управление пользователями]] ​(назначить УЗ student администратором) 
 +  * Создаем новый репозиторий (Project name: openvpn1, Private, без READMEв GitLab  
 +  * Пользуясь инструкцией к проекту,​ включаем [[Сервис Git]] для каталога openvpn1 и помещаем его в GitLab
  
-  * duration=60s rate=400 выдерживают 10 экземпляров ​приложения +=== 4.2 Запуск пайплайнов из .gitlab-ci ​в gitlab-runners ===
-  * в качестве external-host можно использовать gate +
-<​code>​ +
-cmd> route add 172.16.1.0 mask 255.255.255.0 10.5.N.178+
  
-external-hostcurl http://​172.16.1.X+  * [[Инструмент GitLab#Установка из пакета]] GitLab Runner на server и его [[Инструмент GitLab#​Регистрация]] с меткой **ansible** и исполнителем **shell**
  
-external-hostecho "GET http://​172.16.1.X" ​| vegeta attack -duration=20s -rate=100 | vegeta report+  * Используя GitLab Pipeline Editor добавляем в проект openvpn1 [[Инструмент GitLab#Пример shell ansible]] Pipeline и наблюдаем ​"выкатку" ​в "​прод"​ после Commit в ветку main
  
-server# tail -f /​var/​log/​syslog +==== Вопросы ====
-</​code>​+
  
-=== 4.2 Использование технологии Docker и docker-compose для масштабирования приложения webd на одном узле ===+  - Чем ​отличается GitLab ​от Git? 
 +  ​Для чего нужен ​GitLab Runner? 
 +  - Как ​называется файл для CI/CD в GitLab?
  
-  * Устанавливаем [[Технология Docker]] на server, и рассматриваем [[Технология Docker#​Создание образа для приложения вручную]] и образа из него (из под root) +===== Модуль 5. Обзор задач ​QA =====
-  * Рассматриваем [[Технология Docker#​Запуск в режиме демона и подключение к контейнеру]] +
-  * Изучаем [[Технология Docker#​Процессы контейнера и системы]] и [[Технология Docker#​Анализ параметров запущенного контейнера]] (преподаватель,​ можно на node1, пока у всех ставится docker)+
  
-  * Для удобства,​ выполнить [[Настройка командных интерпретаторов]] +==== Теория ​====
-  * Используя [[Технология Docker#Предоставление прав непривилегированным пользователям]] для gitlab-runner (пригодится для процесса CD в minikube), знакомимся с [[Технология Docker#​Создание образа для приложения с использованием Dockerfile]]+
  
-  * [[Технология Docker#Запуск в режиме демона и подключение к контейнеру]] несколько копий ​вручную,​ и, через [[Сервис Keepalived#​Настройка балансировки нагрузки]], повторяем нагрузочное тестирование (преподаватель) +  * [[https://​testengineer.ru/​dorogostoyashchie-bagi/​|7 эпичнейших багов в истории ​человечества]]
-  * Знакомимся с [[Технология Docker#​docker-compose]] для запуска нескольких копий приложения (без sftp и vol)+
  
-=== 4.3 Использование ​технологии Docker Registry для распространения ​приложения ​webd ===+  * [[https://​ru.wikipedia.org/​wiki/​Тестирование_программного_обеспечения]] 
 +  * [[https://​www.atlassian.com/​ru/​continuous-delivery/​software-testing/​types-of-software-testing|Различные виды тестирования ​ПО]]
  
-Методически, достаточно ​показать на node1+  * [[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/​|В чем отличия нагрузочного от стресс-тестирования]] 
 +==== Лабораторные работы: Задачи тестирования ====
  
-  * Создаем (Public, ​без README) ​проект ​webd +=== 5.1 Ручное тестирование функциональности и работа с ветками ​проекта === 
-  * Размещаем каталог ​webd в [[Сервис ​Git#On-Premise gitlab]] пользуясь инструкцией к проекту (можно ​в теме ​4.4)+ 
 +  * Понадобится 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#Установка|устанавливаем]] Docker на node1,2,3 +
-  * Используя доступ к [[Технология Docker#​Локальные репозитории]] на node1,2,3 запускаем приложение+
  
-=== 4.4 GitLab CI для Docker images ===+!!! Методическая рекомендация,​ запустить установку minikube из лабораторной работы 6.1
  
-  * Размещаем каталог webd в [[Сервис Git#​On-Premise gitlab]] пользуясь инструкцией к проекту +  * Можно продемонстрировать развертывание ​приложения на nodeN
-  * Автоматизируем сборку образа используя [[Средства программирования shell#Проверка синтаксиса]] и [[Инструмент GitLab#​Пример shell docker]] GitLab CI/CD, не забыв назначить метки Gitlab Runner. Можно обсудить добавление переменных в проект и вывод их через env+
  
-=== 4.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 ​===
  
-  * Производим [[Система Kubernetes#​Установка minikube]] для gitlab-runner@server (для доступа к репозиторию, на нем же, понадобится включить [[Сервисы Gateway и routing]])+  * Для доступа к репозиторию,​ понадобится включить [[Сервисы 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#​Прокси "​красивого"​ URL в приложение (пример 3)|Nginx]] для доступа к приложению webd в minikube с хост системы ​ +  * Для понимания работы [[Система Kubernetes#​Ingress]] (будет в следующем курсе), ​можно продемонстрировать использование [[Сервис HTTP#​Прокси "​красивого"​ URL в приложение (пример 3)|Nginx]] для доступа к приложению webd в minikube с хост системы ​
-  * Настраиваем [[Сервис Keepalived#​Настройка балансировки нагрузки|Keepalived]] и тестируем [[Утилита curl]] +
-  * Тестируем livenessProbe с extern-host+
  
 +  * Если есть 30 минут, можно показать CD через envsubst "**3.3 Разворачивание нужной версии приложения в kubernetes**"​ из Девопс2 ​
 +  * Понадобится назначить метку k8s-deploy ранеру и
 <​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+servercp -v /home/gitlab-runner/.minikube/​cache/​linux/​amd64/​v*/​kubectl /​usr/​local/​bin/​
 </​code>​ </​code>​
- +  ​Можно показать все, используя ​Web IDE
-=== 5.3 Deploy в k8s === +
- +
-  ​Автоматизируем deploy используя [[Инструмент GitLab#​Пример shell Kubernetes]] GitLab CD (см. выше) +
-  * Тестируем "выкатку"​ новой версии приложения через ​запрос несуществующего файла и [[Система Kubernetes#​Версии deployment]] +
-  * Столкнувшись с необходимостью править версию в манифесте, рассмотрев вариант ​с envsubst в [[Инструмент GitLab#​Пример shell Kubernetes]],​ видим необходимость в Helm +
-  * В финале,​ можно "закоммитить"​ новую версию приложения прямо в GitLab +
- +
 ==== Вопросы ==== ==== Вопросы ====
  
Line 322: 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 - в режиме просмотра
devops1._основные_инструменты.1732351891.txt.gz · Last modified: 2024/11/23 11:51 by val