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/21 08:19]
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|ДП-ДЕВОПС-М]]
  
-===== Модуль 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 42: Line 44:
 === 1.2 Настройка сети VM gate и server === === 1.2 Настройка сети VM gate и server ===
  
-  * !!! Добавить HDD 20GB к server 
   * [[Настройка стендов слушателей#​Настройка виртуальных систем Unix]] с использованием [[Настройка стендов слушателей#​Скрипты автоконфигурации]]   * [[Настройка стендов слушателей#​Настройка виртуальных систем Unix]] с использованием [[Настройка стендов слушателей#​Скрипты автоконфигурации]]
  
Line 61: Line 62:
   * Создать в Putty профили gate, server и подключиться   * Создать в Putty профили gate, server и подключиться
  
-=== 1.3 настройка сервиса ​DNS ===+=== 1.3 Инициализация ​репозитория Git === 
 + 
 +  * [[Сервис ​Git]], команды init, add, commit для каталога /etc на server
  
-  * [[Управление файловыми системами в Linux#​Использование LVM]] 
   * [[Финальная настройка 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>​ 
-  * [[Переменные окружения#Установка переменных окружения]] http_proxy, https_proxy и no_proxy (только для ОО) +server# ​cat /​etc/​bind/​corpX.un 
-  * Установку [[Инструмент Gitea]] +</​code><​code>​ 
-  * Установку [[Сервис JRE]] (и на gate) +... 
-  * Установку [[Инструмент Jenkins]] !!! и установку плагинов !!! +webd            A       ​192.168.X.10 
-  * Установку [[Сервис Ansible]] +</​code>​
-  * Cкачать deb пакет [[Инструмент GitLab#​GitLab Runner]] +
-  * Установку [[Инструмент GitLab]]+
  
-  * !!! Заранее выполняем на host системе +  * [[Сервис Git]], команды git -C /etc/ ..., log, show, diff, reset 
-  ​* Технология Vagrant [[Технология Vagrant#Установка]]+==== Вопросы ==== 
 + 
 +  ​- Перечислите и объясните команды git 
 + 
 +===== Модуль 2: Docker =====
  
 ==== Теория ==== ==== Теория ====
  
-  * [[Сервис ​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#​Определение наличия и правка профилей для ​служб]] !!! проверить, не качается ли что-то на 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#Обновление сетевого репозитория ​из локального]] (копируем инструкции из посказки,​ ветка master) +
-  * Редактируем 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) 
-  * [[https://​youtu.be/​FeD6VBY2Xss|Вход в CI/CD для Linux-админа]]+  * Создаем ​[[Язык программирования Python#Web приложение]] на Python
  
-=== 2.4 Знакомимся с GitLab CI/CD ===+!!! Методическая рекомендация, запустить установку Vagrant из лабораторной работы 3.1
  
-  * http://​server.corpX.un/​ +  * Собираем образ ​[[Технология Docker#Приложение python pywebd]] 
-  * Используем [[Инструмент GitLab#​Управление пользователями]] в GitLab для отключения авто регистрации, назначении пароля пользователю root и создания учетной записи student+  * Вопросы оптимизации Dockerfile и безопасности
  
-  * http://​server.corpX.un:​81/​mail+  * [[Технология Docker#​Анализ параметров запущенного контейнера]]
  
-!!! в теме 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 ​добавляем в [[Инструмент GitLab#Пример shell ansible]] Pipeline и наблюдаем выкатку в прод после Commit в master+  * Создаем [[Язык программирования 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 168: Line 173:
   * Построение ландшафта инфраструктуры на примере [[Технология Vagrant]]   * Построение ландшафта инфраструктуры на примере [[Технология Vagrant]]
   * Построение ландшафта облачной инфраструктуры с использованием [[https://​ru.wikipedia.org/​wiki/​Terraform|HashiCorp Terraform]]   * Построение ландшафта облачной инфраструктуры с использованием [[https://​ru.wikipedia.org/​wiki/​Terraform|HashiCorp Terraform]]
-  * Управление инфраструктурой ​на примере ​[[Сервис Ansible]]+  ​* Видео урок: [[On-premise Terraform]] 
 +  ​* Управление инфраструктурой ​с использованием [[Сервис 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]] openvpn, 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.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 201: 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://​lindevs.com/​install-vegeta-on-ubuntu|Install Vegeta on Ubuntu 20.04]] +  * [[Инструмент GitLab#​Установка из репозитория]]
-  * [[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)]]+!!! Методическая рекомендация,​ скачать gitlab-runner из лабораторной работы 4.2
  
-  * duration=60s rate=400 выдерживают 10 экземпляров приложения +  * [[Инструмент GitLab#Управление пользователями]] (назначить УЗ student администратором) 
-  * в качестве external-host можно использовать gate +  * Создаем новый репозиторий (Project name: openvpn1, Private, без README) в GitLab  
-<​code>​ +  * Пользуясь инструкцией к проекту, ​включаем [[Сервис Git]] для каталога openvpn1 и помещаем его в GitLab
-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+=== 4.2 Запуск пайплайнов из .gitlab-ci в gitlab-runners ===
  
-server# ​tail -f /​var/​log/​syslog +  * [[Инструмент GitLab#​Установка из пакета]] GitLab Runner на server ​и его [[Инструмент GitLab#Регистрация]] с меткой **ansible** и исполнителем **shell**
-</​code>​+
  
-=== 4.2 Использование технологии Docker и docker-compose для масштабирования приложения webd на одном узле ===+  * Используя GitLab Pipeline Editor добавляем в проект openvpn1 [[Инструмент GitLab#Пример shell ansible]] Pipeline ​и наблюдаем "​выкатку" в "​прод"​ после Commit в ветку main
  
-  * Устанавливаем [[Технология Docker]] на server, собираем образ ​приложения "​вручную"​ из под root +==== Вопросы ​====
-  * Изучаем [[Технология Docker#​Процессы контейнера и системы]] и [[Технология Docker#​Анализ параметров запущенного контейнера]] (преподаватель,​ можно на node1, пока у всех ставится docker)+
  
-  ​* Используя [[Технология Docker#​Предоставление прав непривилегированным пользователям]] и su - gitlab-runner (пригодится для процесса CD в minikube, для удобства работы выполнить [[Настройка командных интерпретаторов]]),​ знакомимся с [[Технология Docker#​Создание контейнера ​для ​приложения с использованием Dockerfile]]+  ​- Чем отличается GitLab ​от Git? 
 +  - Для чего нужен GitLab Runner? 
 +  - Как называется ​файл для ​CI/CD в GitLab?
  
-  * [[Технология Docker#​Запуск в режиме ​демона и подключение к контейнеру]] несколько копий вручную,​ и, через [[Сервис Keepalived#​Настройка ​балансировки нагрузки]], повторяем нагрузочное тестирование (преподаватель) +===== Модуль ​5. Обзор задач QA =====
-  * Знакомимся с [[Технология Docker#​docker-compose]] для запуска нескольких копий приложения+
  
-=== 4.3 Использование технологии Docker Registry для ​распространения приложения webd ===+==== Теория ​====
  
-Методически, достаточно показать на node1+  * [[https://​testengineer.ru/​dorogostoyashchie-bagi/​|7 эпичнейших багов в истории ​человечества]]
  
-  * Создаем ​(Public, ​без README) ​проект webd и размещаем каталог ​webd в [[Сервис ​Git#On-Premise gitlab]] пользуясь инструкцией к проекту+  * [[https://​ru.wikipedia.org/​wiki/​Тестирование_программного_обеспечения]] 
 +  * [[https://​www.atlassian.com/​ru/​continuous-delivery/​software-testing/​types-of-software-testing|Различные виды тестирования ПО]] 
 + 
 +  * [[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/​|В чем отличия нагрузочного от стресс-тестирования]] 
 +==== Лабораторные работы:​ Задачи тестирования ==== 
 + 
 +=== 5.1 Ручное тестирование функциональности и работа с ветками проекта === 
 + 
 +  * Понадобится 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 на node1,2,3 +
-  * Используя доступ к [[Технология Docker#Локальные репозитории]] на node1,2,3 запускаем приложение+
  
-=== 4.4 GitLab CI для Docker images ===+!!! Методическая рекомендация,​ запустить установку minikube из лабораторной работы 6.1
  
-  * Автоматизируем сборку образа используя [[Средства программирования shell#Проверка синтаксиса]] и [[Инструмент GitLab#​Пример shell docker]] GitLab CI/CD, не забыв назначить метки Gitlab Runner. Можно обсудить добавление перемнных ​ в проект и вывод их через env+  * Можно продемонстрировать развертывание ​приложения на nodeN
  
-=== 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 ​===
  
-  * Может закончиться место на диске VM server ​и понадобиться [[Управление ПО в Linux#​Удаление архива установленных пакетов]] плюс отключение [[Инструмент GitLab#​GitLab Prometheus]] или [[Управление файловыми системами в Linux#​Расширение существующего логического тома]] +  * Для доступа к репозиторию, понадобится включить [[Сервисы Gateway ​и routing]] 
-  * Производим ​[[Система Kubernetes#​Установка minikube]] для gitlab-runner@server (для доступа к репозиторию, на нем же, понадобится включить [[Сервисы 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#NGINX]] для доступа к приложению webd в minikube с хост системы  +  * Для понимания работы [[Система Kubernetes#​Ingress]] (будет в следующем курсе), ​можно продемонстрировать использование [[Сервис HTTP#Прокси "​красивого"​ URL в приложение (пример 3)|Nginx]] для доступа к приложению webd в minikube с хост системы ​ 
-  * Тестируем livenessProbe ​с extern-host+ 
 +  * Если ​есть 30 минут, можно показать CD через envsubst "**3.3 Разворачивание нужной версии приложения в kubernetes**"​ из Девопс2  
 +  * Понадобится назначить метку k8s-deploy ранеру и
 <​code>​ <​code>​
-extern-hostcat /etc/hosts +servercp -v /home/gitlab-runner/.minikube/​cache/​linux/​amd64/​v*/​kubectl /​usr/​local/​bin/​
-</code><​code>​ +
-... +
-172.16.1.X ​    ​webd.corpX.un+
 </​code>​ </​code>​
- +  ​Можно показать все, ​используя Web IDE
-=== 5.3 Deploy в k8s === +
- +
-  ​Автоматизируем deploy используя [[Инструмент GitLab#​Пример shell Kubernetes]] GitLab CD (см. выше), сталкиваемся с необходимостью править версию в манифесте, рассмотрев вариант envsubst видим необходимость в Helm +
- +
 ==== Вопросы ==== ==== Вопросы ====
  
Line 310: 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._основные_инструменты.1695273549.txt.gz · Last modified: 2023/09/21 08:19 by val