User Tools

Site Tools


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

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._основные_инструменты_2025 [2025/02/13 12:10]
val [Модуль 7. Дополнительные материалы]
— (current)
Line 1: Line 1:
-====== DevOps1. Основные инструменты 2025 ====== 
  
-===== Программа курса ===== 
- 
-  * [[https://​www.specialist.ru/​course/​kuber|DevOps. Уровень 1. Инфраструктура как код, основные инструменты]] 
-  * [[https://​www.specialist.ru/​track/​dp-devops|ДП-ДЕВОПС-М]] 
- 
-===== Модуль 0. Подготовка к занятию ===== 
- 
-  - Узнать и записать свой номер стенда:​ X= 
-  - Сообщить его в чат преподавателю 
- 
-===== Модуль 1: Введение и развертывание стенда ===== 
- 
-==== Теория ==== 
- 
-  * [[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 === 
-<​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 === 
- 
-  * [[Настройка стендов слушателей#​Настройка виртуальных систем Unix]] с использованием [[Настройка стендов слушателей#​Скрипты автоконфигурации]] 
- 
-  * gate 
-<​code>​ 
-# sh net_gate.sh 
- 
-# init 6 
-</​code>​ 
- 
-  * server 
-<​code>​ 
-# sh net_server.sh 
- 
-# init 6 
-</​code>​ 
- 
-  * Создать в Putty профили gate, server и подключиться 
- 
-=== 1.3 Инициализация репозитория Git === 
- 
-  * [[Сервис Git]], команды init, add, commit для каталога /etc на server 
- 
-  * [[Финальная настройка DNS сервера]] ​ 
-<​code>​ 
-server:~# git -C conf/ pull 
- 
-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>​ 
- 
-=== 1.4 Работа с репозиторием Git === 
- 
-!!! Методическая рекомендация,​ запустить установку Docker (только на server) из лабораторной работы 2.1 
- 
-<​code>​ 
-server# cat /​etc/​bind/​corpX.un 
-</​code><​code>​ 
-... 
-webd            A       ​192.168.X.10 
-</​code>​ 
- 
-  * [[Сервис Git]], команды git -C /etc/ ..., log, show, diff, reset 
-==== Вопросы ==== 
- 
-  - Перечислите и объясните команды git 
- 
-===== Модуль 2: Docker ===== 
- 
-==== Теория ==== 
- 
-  * Ссылки в разделах [[Технология cgroup]], [[Технология namespaces]] и [[Технология Docker]] 
-  * [[https://​ru.wikipedia.org/​wiki/​Микросервисная_архитектура|Микросервисная архитектура]] 
- 
-==== Лабораторные работы:​ Установка docker и работа с контейнерами ==== 
- 
-=== 2.1 Собираем docker контейнер === 
- 
-  * [[Технология Docker#​Установка]] Docker из базового репозитория на **server** и из репозитория вендора на **gate** 
- 
-!!! Методическая рекомендация,​ запустить установку Golang из этой лабораторной работы 
- 
-  * Обсудить [[Технология Docker#​Создание образа для приложения вручную]] было в ЛИН3 
- 
-!!! Методическая рекомендация,​ запустить установку docker-compose из лабораторной работы 2.2 
- 
-  * Обсудить [[Технология Docker#​Создание образа для приложения с использованием Dockerfile]] будет в доп. практикуме 
- 
-== Приложение на Python == 
- 
-  * [[Язык программирования Python#​Виртуальная среда Python]] (учетная запись root на server) 
-  * Создаем [[Язык программирования Python#Web приложение]] на Python 
- 
-!!! Методическая рекомендация,​ запустить установку Vagrant из лабораторной работы 3.1 
- 
-  * Собираем образ [[Технология Docker#​Приложение python pywebd]] 
-  * Вопросы оптимизации Dockerfile и безопасности 
- 
-  * [[Технология Docker#​Анализ параметров запущенного контейнера]] 
- 
-== Приложение на Go == 
- 
-!!! Методическая рекомендация,​ запустить установку GitLab из лабораторной работы 4.1 
- 
-  * [[Язык программирования Golang]] (учетная запись root на gate) 
-  * Создаем [[Язык программирования Golang#Web приложение]] на Golang 
- 
-<​code>​ 
-~/gowebd# apt purge golang-go; apt autoremove -y 
-</​code>​ 
- 
-  * Собираем образ [[Технология Docker#​Приложение golang gowebd]] 
-  * Вопросы оптимизации размера образа 
- 
-  * Расширение [[Технология Docker#​docker buildx]] 
-  * Вопросы оптимизации времени сборки образа 
- 
-  * [[Технология Docker#​Обзор и удаление]] ненужных ресурсов Docker 
- 
-=== 2.2 Связываем и деплоим контейнеры с помощью docker-compose === 
- 
-  * [[Технология Docker#​Использование готовых образов приложений]] 
-  * Использование [[Технология Docker#​docker-compose]] 
- 
-  * Можно показать "​кубернетес"​ - [[Сервис HTTP#​Прокси "​красивого"​ URL в приложение (пример 3)|Использование прокси Nginx]] для доступа к приложению (если установился GitLab) 
- 
-==== Вопросы ==== 
- 
-  - Зачем нужен Docker? 
-  - Чем Docker отличается от LXC? 
-  - Чем Docker контейнер отличается от Docker образа?​ 
-  - Как ПО в Docker контейнере может взаимодействовать с системой и другими контейнерами?​ 
-  - Зачем нужен Dockerfile? 
-  - Зачем "​запихивать"​ сразу много инструкций в команду RUN? 
-  - Зачем нужен docker-compose?​ 
-===== Модуль 3. Инфраструктура как код ===== 
- 
-==== Теория ==== 
- 
-  * Построение ландшафта инфраструктуры на примере [[Технология Vagrant]] 
-  * Построение ландшафта облачной инфраструктуры с использованием [[https://​ru.wikipedia.org/​wiki/​Terraform|HashiCorp Terraform]] 
-  * Видео урок: [[On-premise Terraform]] 
-  * Управление инфраструктурой с использованием [[Сервис Ansible]] 
- 
-==== Лабораторные работы:​ Управление инфраструктурой ==== 
- 
-=== 3.1 Управление инфраструктурой с использованием Vagrant === 
- 
-!!! Методическая рекомендация,​ запустить установку Ansible из лабораторной работы 3.2 
- 
-  * Добавляем DNS записи nodeN A 192.168.X.200+N в [[Сервис DNS#​Настройка мастер сервера зоны corpX.un]] 
-  * Обзор команд [[Технология VirtualBox]] 
-  * Обзор [[Технология Vagrant]] 
-  * Развертываем с использованием [[Технология Vagrant#​Multi-Machine Vagrant Environments]] узлы кластера node1,2,3 
- 
-=== 3.2 Управление инфраструктурой с использованием Ansible === 
- 
-  * Общие принципы и модели управления (Push and Pull) 
-  * Ansible - [[Сервис Ansible#​Установка на управляющей системе]] 
-  * [[Сервис Ansible#​Настройка групп управляемых систем]] 
-  * [[Сервис Ansible#​Настройка транспорта ssh]] с [[Сервис SSH#​Парольная аутентификация]] 
-  * [[Сервис Ansible#​Использование модулей]] для тестирования связи с управляемыми системами 
-  * Установка Docker с помощью [[Сервис Ansible#​Использование playbook|Ansible playbook]] на node1,2,3 (лучше во время перерыва) 
-  * [[Сервис Ansible#​Использование шаблонов]] Jinja в playbook для установки Nginx (на gate, по окончании демонстрации удалить!!) 
-  * Обсудить варианты [[Сервис Ansible#​Использование handlers]] 
-  * Развертывание кластера приложения с [[Сервис Ansible#​Использование ролей]] Ansible 
- 
-==== Вопросы ==== 
- 
-  - Что общего и в чем отличие между Ansible, Vagrant и Terraform? 
-  - Что означает термин Provision в Vagrant? 
-  - Что такое module, playbook, role в Ansible? 
-  - Назовите каталоги в роли Ansible 
-  - Что должно быть установлено на целевой системе для управления через Ansible? 
-  - Каким образом Vagrant управляет VM? 
-  - Как реализован Ansible provision в Vagrant? 
- 
-===== Модуль 4. Continuous Integration ===== 
- 
-==== Теория ==== 
- 
-  * [[https://​ru.wikipedia.org/​wiki/​Непрерывная_интеграция]] 
-  * [[https://​simpleone.ru/​glossary/​ci-cd-cd-continuous-integration-continuous-delivery-continuous-deployment|CI/​CD/​CD. Continuous Integration / Continuous Delivery / Continuous Deployment]] 
- 
-  * [[https://​youtu.be/​FeD6VBY2Xss|Вебинар:​ Вход в CI/CD для Linux-админа]] 
-  * [[https://​habr.com/​ru/​articles/​716454/​|Статья:​ Самый простой пример CI/CD]] 
- 
-==== Лабораторные работы:​ От Git к CI/CD ==== 
- 
-=== 4.1 Обзор GitLab === 
- 
-  * [[Инструмент GitLab#​Установка из репозитория]] 
- 
-!!! Методическая рекомендация,​ скачать gitlab-runner из лабораторной работы 4.2 
- 
-  * [[Инструмент GitLab#​Управление пользователями]] (назначить УЗ student администратором) 
-  * Создаем новый репозиторий (Project name: openvpn1, Private, без README) в GitLab ​ 
-  * Пользуясь инструкцией к проекту,​ включаем [[Сервис Git]] для каталога openvpn1 и помещаем его в GitLab 
- 
-=== 4.2 Запуск пайплайнов из .gitlab-ci в gitlab-runners === 
- 
-  * [[Инструмент GitLab#​Установка из пакета]] GitLab Runner на server и его [[Инструмент GitLab#​Регистрация]] с меткой **ansible** и исполнителем **shell** 
- 
-  * Используя GitLab Pipeline Editor добавляем в проект openvpn1 [[Инструмент GitLab#​Пример shell ansible]] Pipeline и наблюдаем "​выкатку"​ в "​прод"​ после Commit в ветку main 
- 
-==== Вопросы ==== 
- 
-  - Чем отличается GitLab от Git? 
-  - Для чего нужен GitLab Runner? 
-  - Как называется файл для CI/CD в GitLab? 
- 
-===== Модуль 5. Обзор задач QA ===== 
- 
-==== Теория ==== 
- 
-  * [[https://​testengineer.ru/​dorogostoyashchie-bagi/​|7 эпичнейших багов в истории человечества]] 
- 
-  * [[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]] 
-  * Включаем [[Технология Docker#​Insecure Private Registry]] и [[Технология Docker#​Аутентификация в Registry]] 
-  * Создаем (Public, без README) проект gowebd 
-  * Cохраняем образ, [[Технология Docker#​Использование Private Registry]] 
- 
-!!! Методическая рекомендация,​ запустить установку minikube из лабораторной работы 6.1 
- 
-  * Можно продемонстрировать развертывание приложения на nodeN 
- 
-=== 5.3 Тестирование в процессе CI и управление версиями === 
- 
-  * Проводим [[Инструмент GitLab#​Установка в виде контейнера]] gitlab-runner на gate 
-  * Используем [[Инструмент GitLab#​Регистрация DooD]] для добавления runner в проект gowebd ​ 
- 
-  * Отключаем 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 образов 
- 
-==== Вопросы ==== 
- 
-  - Что такое "​ветка"​ в Git и почему переименовали master в main? 
-  - Из каких частей состоит имя образа?​ 
-  - Как работает DooD и DinD? 
-  - Что такое Linter? 
-  - Что такое Smoke test? 
- 
-===== Модуль 6. 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 ==== 
- 
-=== 6.1 Установка minikube === 
- 
-  * Для доступа к репозиторию,​ понадобится включить [[Сервисы Gateway и routing]] 
-  * [[Система Kubernetes#​Установка minikube]] для gitlab-runner@server (можно,​ если будет время, показать CD) 
- 
-=== 6.2 Создание deployment и service === 
- 
-  * Изучаем [[Система Kubernetes#​Базовые объекты k8s]] - [[Система Kubernetes#​Deployment]] и [[Система Kubernetes#​Service]] 
-  * Для понимания работы [[Система Kubernetes#​Ingress]] (будет в следующем курсе),​ можно продемонстрировать использование [[Сервис HTTP#​Прокси "​красивого"​ URL в приложение (пример 3)|Nginx]] для доступа к приложению webd в minikube с хост системы ​ 
- 
-  * Если есть 30 минут, можно показать CD через envsubst "3.2 Разворачивание приложения в kubernetes"​ из Девопс2 ​ 
-  * Понадобится назначить метку k8s-deploy ранеру и 
-<​code>​ 
-server# cp -v /​home/​gitlab-runner/​.minikube/​cache/​linux/​amd64/​v*/​kubectl /​usr/​local/​bin/​ 
-</​code>​ 
-  * Можно показать все, используя Web IDE 
-==== Вопросы ==== 
- 
-  * Почему Kubernetes часто обозначают K8s? 
-  * Чем K8s отличается от Docker-Compose?​ 
-  * Что используется для описания состояния объектов в K8s? 
-  * Как связаны понятия Deployment, Replica Sets, Pods? 
-  * Для чего используются 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._основные_инструменты_2025.1739437816.txt.gz · Last modified: 2025/02/13 12:10 by val