learning:devops
Различия
Показаны различия между двумя версиями страницы.
learning:devops [27.02.2023 13:50] – [Terraform - управление инфраструктурой] viacheslav | learning:devops [30.07.2024 19:21] (текущий) – внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== DevOps ====== | ||
+ | MVP (Minimal Viable Product) - быстро написанное ПО/ | ||
+ | |||
+ | Жизненный цикл ПО - от планирования до прекращения использования. | ||
+ | - Планирование, | ||
+ | - Определение требований (спецификация ПО) | ||
+ | - Проектирование архитектуры | ||
+ | - Разработка | ||
+ | - Тестирование | ||
+ | - Развёртывание и поддержка | ||
+ | |||
+ | Модели разработки определяют стиль и подход, | ||
+ | * Waterfall - поэтапная модель. Хорошо документировано и спланировано, | ||
+ | * V-модель - на каждом этапе параллельно проводится тестирование. Мало ошибок, | ||
+ | * Agile - работающий продукт важнее документация, | ||
+ | * Scrum - постоянные мелкие улучшения. | ||
+ | |||
+ | Книги: | ||
+ | Джефф Сазерленд - Scrum. Революционный метод управления проектами\\ | ||
+ | Эндрю Стеллман, | ||
+ | |||
+ | ===== git (VCS, version control system) ===== | ||
+ | VCS обеспечивает хранение версий ПО и вносимые изменения каждого разработчика. Соответственно, | ||
+ | |||
+ | Сохранение состояния проекта - как снапшот, | ||
+ | |||
+ | Книги: | ||
+ | Скотт Шакон - [[https:// | ||
+ | |||
+ | ==== Ветвления ==== | ||
+ | === Trunk-Based Development === | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Подходит для мелких проектов и небольших команд, | ||
+ | |||
+ | === Feature Branch Workflow === | ||
+ | |||
+ | Feature Branch Workflow - новые функции разрабатываются отдельно от master (где всегда содержится рабочий код), ветки feature существуют долго, в рамках этих веток делаются pull-реквесты для совместной работы. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | === Gitflow === | ||
+ | |||
+ | Gitflow - основная разработка ведётся в ветке develop, ветки feature делаются от неё и сливаются с ней же. Master - это история релизов с единственной производной от неё - hotfix, где правятся баги. После исправления ошибок hotfix сливается с master и develop. Когда в develop достаточно изменений для релиза, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | https:// | ||
+ | |||
+ | === Gitlab flow === | ||
+ | Разработка ведётся аналогично GitHub flow — в отдельных ветках, | ||
+ | - Master/main - тестовое окружение | ||
+ | - Preprod - опытное окружение | ||
+ | - Prod - пром | ||
+ | |||
+ | {{: | ||
+ | |||
+ | https:// | ||
+ | |||
+ | Использование веток релиза нужно, если ПО выпускается для внешних пользователей. В этом случае ветки нужно называть с использованием минорной версии, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Сливать изменения в тематических ветках нужно именно в мастер (не в релиз!), | ||
+ | |||
+ | Слияние с основной веткой и последующий cherry-pick в релизную называется " | ||
+ | |||
+ | Некоторые проекты также имеют ветку stable, которая указывает на тот же коммит, | ||
+ | ===== Бережливое производство ===== | ||
+ | Lean manufacturing - это постоянный поиск улучшения процессов и снижение количества ненужных и неэффективных действий. Важно определить ценность продукта - то, что решает ключевую потребность (проблему, | ||
+ | |||
+ | Принципы: | ||
+ | - Сформулировать ценность | ||
+ | - Организовать процесс её создания (планирование, | ||
+ | - Обеспечить бесперебойную работу над реализацией - все должны быть заняты делом, а не простаивать и ждать друг друга | ||
+ | - Не работать без запроса - " | ||
+ | - Постоянно работать над улучшением | ||
+ | |||
+ | Применительно к разработке тормозом являются ручное развёртывание, | ||
+ | |||
+ | Книги: | ||
+ | * Бережливое производство: | ||
+ | * Continuous delivery. Практика непрерывных апдейтов. Эберхард Вольф | ||
+ | * Непрерывное развёртывание ПО. Автоматизация процессов сборки, | ||
+ | |||
+ | ===== Какие проблемы решает DevOps ===== | ||
+ | DevOps нацелен на решение следующих проблем: | ||
+ | * Функциональные колодцы - изолированность отделов (разработка, | ||
+ | * Нисходящая спираль - хаотичное делегирование задач отделам из-за недопонимания, | ||
+ | |||
+ | Примеры: | ||
+ | |||
+ | Необходимо выстраивать горизонтальные связи, т. е., непосредственное общение сотрудников между собой и обращение к соответствующему отделу в случае каких-то проблем самих сотрудников. | ||
+ | |||
+ | Книги: " | ||
+ | |||
+ | DevOps = бережливое производство + Agile. Есть несколько методологий Agile: | ||
+ | |||
+ | ==== Scrum ==== | ||
+ | - Разделение цели на конкретные задачи (user-story), | ||
+ | - Разделение времени работы группы на // | ||
+ | - Согласование с заказчиком приоритетов и планов по результатам работы прошедшего спринта. | ||
+ | - Улучшение процесса после каждого спринта. | ||
+ | |||
+ | Скрам подразумевает // | ||
+ | |||
+ | Большая встреча планирования проводится в начале спринта. Сложность каждой задачи оцениваются коллективно в очках (story-points) и группе даются те задачи, | ||
+ | |||
+ | Стендап - короткая ежедневная встреча в рамках группы. Каждый участник отвечает на вопросы: | ||
+ | - Что я сделал вчера? | ||
+ | - Что я собираюсь сделать сегодня? | ||
+ | - Есть ли проблемы, | ||
+ | |||
+ | В конце спринта - 2 больших совещания: | ||
+ | |||
+ | Скрам критикуется за бюрократию, | ||
+ | |||
+ | ==== Kanban ==== | ||
+ | Визуализация этапов, | ||
+ | ^Задача ^Разработка\\ Лимит 3 ^Выполнено ^Тестирование\\ Лимит 2 ^Протестировано ^Развёртывание\\ Лимит 2 ^Работает ^Завершено ^ | ||
+ | |7 |4 | |5 |2 |3 | |1 | | ||
+ | |8 |6 | | | | | | | | ||
+ | |9 | | | | | | | | | ||
+ | |||
+ | Каждый // | ||
+ | |||
+ | * В Канбане задача может двигаться только слева направо //по потоку// | ||
+ | * Поиск " | ||
+ | |||
+ | ===== 3 пути DevOps ===== | ||
+ | ==== Поток создания ценности ==== | ||
+ | - Работа должна быть на виду, процессы - прозрачными. Определение, | ||
+ | - Постоянный поиск и решение проблем. Автоматизация. | ||
+ | - Уменьшать кол-во делегирований. Чтобы устранить перебрасывание задач и ожидание. | ||
+ | - Уменьшать кол-во незавершённой работы. Сократить постоянную дерготню и переключение с задачи на задачу до передачи её на следующий этап. | ||
+ | - Уменьшать объём самих задач. С ними легче справиться, | ||
+ | |||
+ | ==== Обратная связь ==== | ||
+ | Необходима связь как с клиентом, | ||
+ | |||
+ | ==== Научный подход к новациям и ошибкам ==== | ||
+ | Необходимо экспериментировать в контролируемой среде, чтобы развиваться. Принимать рацпредложения. | ||
+ | |||
+ | Ошибки - не заниматься поиском и наказанием виноватых, | ||
+ | |||
+ | Ошибки можно делать в контролируемой среде и намеренно с целью выявить слабые места, например, | ||
+ | |||
+ | Книги: " | ||
+ | |||
+ | ==== 5 идеалов ==== | ||
+ | - Стремление к простоте - код, оргструктура и процессы не должны быть запутанно-сложными | ||
+ | - Удовольствие от работы, | ||
+ | - Постоянное совершенствование | ||
+ | - Психологическая безопасность - открытое обсуждение проблем и выработка механизма их предотвращения вместо поиска крайнего | ||
+ | - Внимание к нуждам заказчика, | ||
+ | |||
+ | [[https:// | ||
+ | [[https:// | ||
+ | |||
+ | ===== Проверка кода ===== | ||
+ | Существуют стандарты оформления кода (code conventions) - это правила, | ||
+ | |||
+ | Помимо проверки на стандарты оформления, | ||
+ | * SAST (Static Application Security Testing) - т. н. " | ||
+ | * DAST (Dynamic Application Security Testing) - " | ||
+ | * IAST (Interactive Application Security Testing) - анализ работы приложения изнутри. Это мониторинг, | ||
+ | * RASP (Runtime Application Security Protection) - анализ поведения приложения и контекста выполнения. Сканирование запросов и анализ их обработки приложением. Может не только сообщать о подозрительной активности, | ||
+ | |||
+ | ==== SonarQube ==== | ||
+ | Популярный сервис проверки кода. Что умеет: | ||
+ | * Анализ кода и поиск ошибок в популярных языках программирования | ||
+ | * Отчёты об ошибках | ||
+ | * Интегрируется с IDE (VSCode и т. п.) и репозиториями (Gitlab), встраивается в пайплайны (GitLab, Jenkins) | ||
+ | * История показателей качества кода, графики | ||
+ | * Плагины для расширения набора функций | ||
+ | |||
+ | Как происходит анализ: | ||
+ | - // | ||
+ | - // | ||
+ | - К проекту применяется профиль качества и выставляется // | ||
+ | - По результатам анализа высылается письмо или webhook | ||
+ | |||
+ | [[https:// | ||
+ | [[https:// | ||
+ | [[https:// | ||
+ | [[https:// | ||
+ | |||
+ | ===== Инфраструктура как код (IAC) ===== | ||
+ | Инфраструктура как код (IAC, IAaC от англ. Infrastructure as a Code) — подход к управлению и описанию инфраструктуры через конфигурационные файлы, а не через ручное редактирование конфигураций на серверах. Процесс настройки инфраструктуры становится аналогичен процессу программирования ПО. Границы между написанием приложений и созданием сред для этих приложений стираются. Используя IAC мы получаем много преимуществ: | ||
+ | * Нет ручной настройки | ||
+ | * Настройка (создание) инфраструктуры занимает гораздо меньше времени | ||
+ | * Масштабируемость: | ||
+ | * Возможность использовать git для отслеживания изменений в инфраструктуре | ||
+ | * Воспроизводимость: | ||
+ | * Ценность элемента инфраструктуры падает: | ||
+ | |||
+ | https:// | ||
+ | |||
+ | Vagrant для гипервизора (на сентябрь 2022 закрыт для РФ). | ||
+ | |||
+ | * Сервера-снежинки - каждый сервер уникален, | ||
+ | * Сервера-фениксы - сервер развёртывается из конфигурационного файла, что позволяет его развёртывать и масштабировать очень быстро. | ||
+ | |||
+ | Kief Morris - Infrastructure as code | ||
+ | |||
+ | ==== Terraform - управление инфраструктурой ==== | ||
+ | :!: Свободный аналог - Opentofu. https:// | ||
+ | |||
+ | Скачать: | ||
+ | <code bash> | ||
+ | export PATH=$PATH:/ | ||
+ | </ | ||
+ | |||
+ | Файл для скачивания доп. компонентов с серверов Яндекса вместо родного сайта. | ||
+ | <file yaml ~/ | ||
+ | provider_installation { | ||
+ | network_mirror { | ||
+ | url = " | ||
+ | include = [" | ||
+ | } | ||
+ | direct { | ||
+ | exclude = [" | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | Далее нужно [[https:// | ||
+ | |||
+ | <code bash> | ||
+ | # Справка | ||
+ | terraform --help | ||
+ | terraform apply --help | ||
+ | |||
+ | terraform fmt # форматирование файлов Terraform в текущем каталоге | ||
+ | terraform init # подготовка необходимого для работы в текущем каталоге (установка провайдеров, | ||
+ | terraform validate # проверка файлов Terraform на синтаксические ошибки | ||
+ | terraform plan # вывод плана изменений | ||
+ | terraform apply # применение изменений конфигурации инфраструктуры | ||
+ | terraform destroy # удаление инфраструктуры, | ||
+ | terraform output # вывод значений переменных состояния | ||
+ | terraform show # текущее состояние инфраструктуры | ||
+ | terraform state # манипуляции с файлами состояния | ||
+ | terraform version # версия Terraform | ||
+ | |||
+ | # Шаги при работе с Terraform | ||
+ | terraform init → terraform validate → terraform plan → terraform apply → terraform destroy | ||
+ | </ | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | ==== Управление конфигурацией ==== | ||
+ | Системы управления конфигурацией (SCM) появились из необходимости автоматизации процесса конфигурации серверов. Это контроль и отслеживание изменений в системе: | ||
+ | |||
+ | Задачи SCM (software configuration management): | ||
+ | * определение, | ||
+ | * предоставление информации, | ||
+ | * быстрое и удобное применение определённой версии рабочей конфигурации | ||
+ | |||
+ | Вместо скриптов и консольных команд, | ||
+ | |||
+ | Задачи SCM (software configuration management): | ||
+ | * определение, | ||
+ | * предоставление информации, | ||
+ | * быстрое и удобное применение определённой версии рабочей конфигурации | ||
+ | |||
+ | | ^ Ansible | ||
+ | ^Язык |Python, любой для модулей |Ruby |Ruby, Erlang |Python, ZeroMQ | | ||
+ | ^Манифест |yaml |свой формат |Ruby DSL |yaml | | ||
+ | ^Агенты |нет (SSH/WinRM) |требуется |требуется |требуется, | ||
+ | ^Инфраструктура |простая |сложная |средняя |средняя | | ||
+ | ^Популярность |большая |средняя |средняя |низкая | | ||
+ | ^Сложность освоения |невысокая |средняя |средняя |средняя | | ||
+ | |||
+ | [[https:// | ||
+ | ===== CI/CD ===== | ||
+ | **Continuous integration (CI):**\\ | ||
+ | Build [<color # | ||
+ | |||
+ | **Continuous Delivery (CD):**\\ | ||
+ | Build [<color # | ||
+ | |||
+ | **Continuous Deployment (CD):**\\ | ||
+ | Build [<color # | ||
+ | |||
+ | ===== SaaS ===== | ||
+ | Software as a Service - приложение как сервис, | ||
+ | |||
+ | 12 факторов, | ||
+ | |||
+ | - База кода - одно приложение - один репозиторий. Разрабы могут создавать ветки (не репозитории) и деплоить на тестовые стенды. Приложение не собирается из нескольких репозиториев одновременно, | ||
+ | - Зависимости - они все должны быть прописаны, | ||
+ | - Конфигурация - переменные для подключения ко внешним сервисам нужно хранить в конфигах, | ||
+ | - Сторонние службы - любые изменения, | ||
+ | - Сборка, | ||
+ | - Процессы - так как приложение может быть в любой момент масштабировано, | ||
+ | - Привязка портов - каждое приложение должно иметь собственный порт для связи с ним. | ||
+ | - Параллелизм - приложение должно уметь масштабироваться не только вертикально (добавлением ресурсов), | ||
+ | - Утилизируемость - приложение по-максимуму независимо от состояния (stateless), | ||
+ | - Минимальная разница тест/ | ||
+ | - Логи - пишутся в stdout, а не в файл, т. к. в облаках обработкой логов будет заниматься внешний сервис. | ||
+ | - Администрирование - возможность подключения к работающему приложению и запуска скриптов, | ||
+ | |||
+ | https:// | ||
+ | https:// | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||