Показаны различия между двумя версиями страницы.
— |
методология_devops:ключевые_понятия_и_принципы_devops [2025/05/31 19:53] (текущий) kirill создано |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | # Конспект лекции: | ||
+ | |||
+ | --- | ||
+ | |||
+ | ## 1. Введение | ||
+ | |||
+ | DevOps (Development & Operations) — это подход к созданию, | ||
+ | |||
+ | --- | ||
+ | |||
+ | ## 2. История и мотивация | ||
+ | |||
+ | - **Проблемы традиционного подхода** | ||
+ | 1. Разделение ответственности: | ||
+ | 2. Узкие места: долгий цикл выпуска, | ||
+ | 3. Небольшая скорость реакции на запросы бизнеса и изменения в требованиях. | ||
+ | |||
+ | - **Возникновение DevOps** | ||
+ | 1. Идеи берут начало в Agile-движении (начало 2000-х). | ||
+ | 2. 2009–2010 гг. — термин «DevOps» становится популярным после беседы Патрика Дебуа на конференции Agile. | ||
+ | 3. Основная мотивация: | ||
+ | |||
+ | --- | ||
+ | |||
+ | ## 3. Определение DevOps | ||
+ | |||
+ | > DevOps — это культура, | ||
+ | |||
+ | Основные элементы определения: | ||
+ | 1. **Культура сотрудничества** | ||
+ | 2. **Автоматизация процессов** | ||
+ | 3. **Непрерывная интеграция и доставка (CI/ | ||
+ | 4. **Непрерывное измерение и обратная связь** | ||
+ | |||
+ | --- | ||
+ | |||
+ | ## 4. Основные цели DevOps | ||
+ | |||
+ | 1. **Ускорение Time-to-Market** | ||
+ | - Частые и надежные релизы (несколько раз в день, неделю). | ||
+ | 2. **Увеличение стабильности и качества** | ||
+ | - Меньшее число аварийных релизов, | ||
+ | 3. **Снижение затрат и рисков** | ||
+ | - Автоматизация позволяет избегать человеческих ошибок, | ||
+ | 4. **Сокращение «разрыва» между командами** | ||
+ | - Минимизация конфликтов, | ||
+ | |||
+ | --- | ||
+ | |||
+ | ## 5. Ключевые концепции DevOps | ||
+ | |||
+ | ### 5.1. Культурные принципы | ||
+ | |||
+ | - **Сотрудничество и общая ответственность** | ||
+ | - Команды разработчиков и эксплуатации работают как единое целое, вместе отвечают за результат. | ||
+ | - Обмен знаниями: | ||
+ | |||
+ | - **Сдвиг влево (Shift Left)** | ||
+ | - Традиционно тестирование, | ||
+ | - В DevOps эти задачи «сдвигаются» ближе к началу цикла разработки: | ||
+ | - Автоматические юнит- и интеграционные тесты. | ||
+ | - Статический анализ кода. | ||
+ | - Сканы на уязвимости. | ||
+ | |||
+ | - **Культура непрерывного улучшения (Continuous Improvement)** | ||
+ | - Внедрение практик ретроспектив, | ||
+ | - Анализ ошибок и поиск способов предотвращения повторных инцидентов. | ||
+ | - Kaizen-подход: | ||
+ | |||
+ | - **Принцип «You build it, you run it»** | ||
+ | - Команды, | ||
+ | - Повышает ответственность и мотивацию писать более надежный и поддерживаемый код. | ||
+ | |||
+ | ### 5.2. Автоматизация (Automation) | ||
+ | |||
+ | - **Зачем нужна автоматизация? | ||
+ | - Исключение рутинных, | ||
+ | - Ускорение процесса сборки, | ||
+ | - Снижение числа ошибок вследствие человеческого фактора. | ||
+ | |||
+ | - **Области автоматизации** | ||
+ | 1. **Сборка и тестирование** | ||
+ | - Инструменты: | ||
+ | - Автоматизированные сборки при каждом коммите, | ||
+ | 2. **Развертывание (Deployment)** | ||
+ | - Инструменты: | ||
+ | - Скрипты и playbook’и для автоматизированного Provisioning (создания инфраструктуры) и конфигурации серверов. | ||
+ | 3. **Мониторинг и логирование** | ||
+ | - Инструменты: | ||
+ | - Автоматическая агрегация метрик, | ||
+ | 4. **Инфраструктура как код (IaC)** | ||
+ | - Хранение описания инфраструктуры в виде версионируемого кода. | ||
+ | - Возможность повторного воспроизведения окружений, | ||
+ | |||
+ | ### 5.3. Непрерывная интеграция (Continuous Integration, | ||
+ | |||
+ | - **Суть CI** | ||
+ | - Каждое изменение (commit) разработчика автоматически интегрируется в основной (master) ветку. | ||
+ | - Запуск набора автоматических тестов, | ||
+ | - Раннее выявление дефектов, | ||
+ | |||
+ | - **Основные компоненты CI** | ||
+ | 1. **VCS (Version Control System)** | ||
+ | - Git (GitHub, GitLab, Bitbucket). | ||
+ | 2. **CI-сервер** | ||
+ | - Запускает сборки по коммитам, | ||
+ | 3. **Набор автоматизированных тестов** | ||
+ | - Юнит-тесты, | ||
+ | |||
+ | - **Показатели эффективности CI** | ||
+ | - Время прохождения билдов. | ||
+ | - Процент успешных сборок. | ||
+ | - Среднее время обнаружения и исправления дефекта. | ||
+ | |||
+ | ### 5.4. Непрерывная доставка и развертывание (Continuous Delivery & Deployment, CD) | ||
+ | |||
+ | - **Continuous Delivery** | ||
+ | - Кодовая база всегда находится в состоянии, | ||
+ | - Автоматизация пакетов, | ||
+ | - Ручной шаг (approval) перед выпуском в production. | ||
+ | |||
+ | - **Continuous Deployment** | ||
+ | - Автоматизация полного цикла: от коммита до продакшн-развертывания без ручных вмешательств. | ||
+ | - Вклчает Canary Deployment, Blue-Green Deployment, Rolling updates. | ||
+ | |||
+ | - **Поток CD** | ||
+ | 1. CI: сборка + тестирование → | ||
+ | 2. Сборка артефакта (docker image, jar, пакет) → | ||
+ | 3. Интеграционные/ | ||
+ | 4. Маштабируемое развертывание в production (включая стратегии деплоя: | ||
+ | |||
+ | - **Стратегии развертывания** | ||
+ | - **Blue-Green Deployment**: | ||
+ | - Две идентичные среды: “Blue” (текущая prod) и “Green” (новая версия). | ||
+ | - После успешных тестов в “Green” переключение трафика, | ||
+ | - **Canary Deployment**: | ||
+ | - Постепенное развёртывание новой версии на небольшой % инстансов (канареек). | ||
+ | - Мониторинг поведения, | ||
+ | - **Rolling Deployment**: | ||
+ | - Поочередная замена экземпляров старой версии на новую, без полного прерывания сервиса. | ||
+ | |||
+ | --- | ||
+ | |||
+ | ## 6. Инфраструктура как код (Infrastructure as Code, IaC) | ||
+ | |||
+ | - **Суть IaC** | ||
+ | - Описание и управление инфраструктурой (серверы, | ||
+ | - Версионирование конфигурации: | ||
+ | |||
+ | - **Преимущества** | ||
+ | 1. **Повторяемость**: | ||
+ | 2. **Прозрачность**: | ||
+ | 3. **Автоматизация**: | ||
+ | |||
+ | - **Основные инструменты** | ||
+ | - **Terraform** (HashiCorp) | ||
+ | - Декларативный язык HCL, управление ресурсами в облаках AWS, GCP, Azure и др. | ||
+ | - **Ansible** | ||
+ | - SSH-базированная автоматизация конфигурации, | ||
+ | - **Chef / Puppet** | ||
+ | - Серверно-агентная архитектура, | ||
+ | - **AWS CloudFormation**, | ||
+ | |||
+ | - **Практики IaC** | ||
+ | 1. **Декларативный подход** (Terraform, CloudFormation): | ||
+ | 2. **Идемпотентность**: | ||
+ | 3. **Модульность**: | ||
+ | 4. **Версионирование и ревью**: | ||
+ | |||
+ | --- | ||
+ | |||
+ | ## 7. Мониторинг, | ||
+ | |||
+ | ### 7.1. Мониторинг (Monitoring) | ||
+ | |||
+ | - **Цели мониторинга** | ||
+ | 1. Раннее обнаружение инцидентов (падение сервиса, | ||
+ | 2. Сбор метрик производительности (CPU, память, | ||
+ | 3. Оценка пользовательского опыта (SLIs/ | ||
+ | |||
+ | - **Типы мониторинга** | ||
+ | 1. **Инфраструктурный мониторинг**: | ||
+ | 2. **Приложенческий мониторинг**: | ||
+ | 3. **Логирование**: | ||
+ | 4. **Аналитика пользовательского поведения**: | ||
+ | |||
+ | - **Инструменты мониторинга** | ||
+ | - **Prometheus + Grafana** | ||
+ | - Prometheus: сбор метрик через pull-модель, | ||
+ | - Grafana: визуализация, | ||
+ | - **ELK Stack (Elasticsearch, | ||
+ | - Сборка и фильтрация логов, хранение в Elasticsearch, | ||
+ | - **Datadog, New Relic, Splunk** — SaaS-решения для мониторинга и логирования. | ||
+ | - **Jaeger, Zipkin** — распределённые трассировки для микросервисных архитектур. | ||
+ | |||
+ | ### 7.2. Обратная связь (Feedback) | ||
+ | |||
+ | - **Быстрая обратная связь** | ||
+ | - Инструменты CI/CD могут отправлять уведомления (Slack, Email, Teams) о статусе билдов/ | ||
+ | - Интеграция с системами управления инцидентами (PagerDuty, Opsgenie) для экстренного оповещения SRE/ | ||
+ | |||
+ | - **Метрики и метрики качества** | ||
+ | 1. **MTTR (Mean Time to Recover)** — среднее время восстановления после сбоя. | ||
+ | 2. **MTBF (Mean Time Between Failures)** — среднее время между отказами. | ||
+ | 3. **Deployment Frequency** — частота релизов в production. | ||
+ | 4. **Change Lead Time** — время от коммита кода до его успешного релиза в prod. | ||
+ | 5. **Error/ | ||
+ | |||
+ | - **Ретроспективы и постмортемы** | ||
+ | - Проведение ретроспектив после каждого крупного релиза или инцидента. | ||
+ | - Без вины (blameless): | ||
+ | |||
+ | --- | ||
+ | |||
+ | ## 8. Безопасность в DevOps (DevSecOps) | ||
+ | |||
+ | - **DevSecOps** | ||
+ | - Интеграция процессов безопасности (Security) во все этапы разработки и эксплуатации. | ||
+ | - Идея «сдвиг влево» для безопасности: | ||
+ | |||
+ | - **Ключевые практики DevSecOps** | ||
+ | 1. **Статический анализ безопасности (SAST)** | ||
+ | - Инструменты: | ||
+ | - Проверка кода на наличие уязвимостей, | ||
+ | 2. **Динамический анализ (DAST)** | ||
+ | - Сканы уже запущенного приложения на уязвимости (OWASP ZAP, Burp Suite). | ||
+ | 3. **SCA (Software Composition Analysis)** | ||
+ | - Проверка библиотек и зависимостей на известные уязвимости (OWASP Dependency-Check, | ||
+ | 4. **Управление секретами и ключами** | ||
+ | - Хранение паролей, | ||
+ | 5. **Контейнерная безопасность** | ||
+ | - Сканирование Docker-образов (Clair, Anchore). | ||
+ | - Минимизация размера и привилегий контейнера. | ||
+ | 6. **Политики и соответствие (Compliance)** | ||
+ | - Внедрение правил безопасности в pipeline (Policy as Code, e.g. Open Policy Agent). | ||
+ | - Аудит и логирование изменений инфраструктуры и кода. | ||
+ | |||
+ | --- | ||
+ | |||
+ | ## 9. Архитектуры и стратегии развертывания в DevOps | ||
+ | |||
+ | ### 9.1. Монолит vs. Микросервисы | ||
+ | |||
+ | - **Монолит** | ||
+ | - Единственное приложение со всеми компонентами (UI, БД, бизнес-логика). | ||
+ | - Проще разворачивать и отлаживать на начальных этапах, | ||
+ | |||
+ | - **Микросервисы** | ||
+ | - Архитектурный стиль, когда приложение разбито на набор мелких сервисов, | ||
+ | - Каждый сервис можно автономно разрабатывать, | ||
+ | - Упрощает независимое масштабирование, | ||
+ | |||
+ | ### 9.2. Контейнеризация и оркестрация | ||
+ | |||
+ | - **Контейнеры (Docker)** | ||
+ | - Легковесная виртуализация на уровне ОС. | ||
+ | - Обеспечивает предсказуемую среду выполнения (зависимости, | ||
+ | |||
+ | - **Orchestration (Kubernetes)** | ||
+ | - Управление группами контейнеров: | ||
+ | - Ключевые объекты Kubernetes: Pods, Deployments, | ||
+ | |||
+ | - **Преимущества** | ||
+ | 1. **Изоляция и предсказуемость**: | ||
+ | 2. **Масштабирование**: | ||
+ | 3. **Управление конфигурацией**: | ||
+ | |||
+ | --- | ||
+ | |||
+ | ## 10. Организационные аспекты и роли | ||
+ | |||
+ | - **DevOps-команда или DevOps-инженер? | ||
+ | - **DevOps-инженер** — специалист, | ||
+ | - **DevOps-команда** — кросс-функциональная группа, | ||
+ | |||
+ | - **Основные роли и обязанности** | ||
+ | 1. **Разработчики (Developers)** | ||
+ | - Пишут код, покрывают его тестами, | ||
+ | 2. **Инженеры по обеспечению качества (QA, Test Engineers)** | ||
+ | - Автоматизация тестов, | ||
+ | 3. **SRE (Site Reliability Engineer)** | ||
+ | - Фокусируются на стабильности, | ||
+ | - Пишут инструменты для автоматизации операций, | ||
+ | 4. **Инженеры по инфраструктуре (Infrastructure Engineers)** | ||
+ | - Настройка и поддержка серверов, | ||
+ | - Управление конфигурацией, | ||
+ | 5. **Security Engineer / DevSecOps** | ||
+ | - Интегрируют практики безопасности во все этапы CI/ | ||
+ | - Проводят аудиты, | ||
+ | |||
+ | - **Взаимодействие и коммуникация** | ||
+ | - **Ежедневные стендапы** (Daily Standups) | ||
+ | - **Ретроспективы** (Sprint Retrospectives) для обсуждения результатов и поиска улучшений. | ||
+ | - **Документация**: | ||
+ | |||
+ | --- | ||
+ | |||
+ | ## 11. Лучшие практики DevOps | ||
+ | |||
+ | 1. **Версионирование всего** | ||
+ | - Код приложения, | ||
+ | 2. **Малые и частые релизы** | ||
+ | - Менее рискованные, | ||
+ | 3. **Автоматизированное тестирование** | ||
+ | - Юнит-тесты, | ||
+ | 4. **Канареечные релизы и blue-green** | ||
+ | - Обеспечивают бесперебойность, | ||
+ | 5. **Непрерывный мониторинг и alerting** | ||
+ | - Чёткие SLA/SLO, настроенные алерты при отклонении ключевых метрик. | ||
+ | 6. **Разделение окружений** | ||
+ | - Dev → QA/Staging → Production. | ||
+ | - Изоляция тестовых данных, | ||
+ | 7. **Документирование процессов и архитектуры** | ||
+ | - Архитектурные диаграммы, | ||
+ | 8. **Обратная связь и ретроспективы** | ||
+ | - Постоянное улучшение процессов, | ||
+ | 9. **Постепенное расширение DevOps-культуры** | ||
+ | - Начать с одного проекта или небольшого этапа, показать результат (quick wins), затем масштабировать на всю организацию. | ||
+ | |||
+ | --- | ||
+ | |||
+ | ## 12. Основные метрики и KPI в DevOps | ||
+ | |||
+ | 1. **Deployment Frequency** — частота релизов в production. | ||
+ | 2. **Lead Time for Changes** — время от момента коммита до рабочего релиза. | ||
+ | 3. **Change Failure Rate** — процент релизов, | ||
+ | 4. **Mean Time to Recovery (MTTR)** — среднее время восстановления после сбоя. | ||
+ | 5. **Availability / Uptime** — доля времени, | ||
+ | 6. **Customer Ticket Volume** — количество обращений пользователей по непродуктивности. | ||
+ | 7. **Time to Detect (TTD)** — среднее время обнаружения проблемы. | ||
+ | |||
+ | Метрики должны быть прозрачными и доступными для всех команд. Их регулярный анализ позволяет выявлять узкие места и принимать решения, | ||
+ | |||
+ | --- | ||
+ | |||
+ | ## 13. Инструменты и стэк технологий DevOps | ||
+ | |||
+ | | Категория | ||
+ | |-----------------------------|--------------------------------------------------------------------------------------------------| | ||
+ | | **Система контроля версий** | Git, GitHub, GitLab, Bitbucket | ||
+ | | **CI/ | ||
+ | | **Управление конфигурацией**| Ansible, Chef, Puppet, SaltStack | ||
+ | | **IaC (Infrastructure as Code)** | Terraform, CloudFormation, | ||
+ | | **Контейнеризация** | ||
+ | | **Оркестрация контейнеров** | Kubernetes, OpenShift | ||
+ | | **Мониторинг и алертинг** | ||
+ | | **Логирование и трассировка** | ELK Stack (Elasticsearch, | ||
+ | | **Управление секретами** | ||
+ | | **Управление артефактами** | ||
+ | | **Security / DevSecOps** | ||
+ | | **Облачные платформы** | ||
+ | | **Системы управления инцидентами** | PagerDuty, Opsgenie, VictorOps | ||
+ | |||
+ | --- | ||
+ | |||
+ | ## 14. Примеры и кейсы | ||
+ | |||
+ | ### 14.1. Пример реализации CI/CD для веб-приложения | ||
+ | |||
+ | 1. **Репозиторий на GitLab** | ||
+ | - Каждое изменение в ветке `develop` автоматически запускает pipeline. | ||
+ | 2. **Pipeline stages** | ||
+ | 1. **Build**: сборка артефакта (Docker-образ). | ||
+ | 2. **Unit Tests**: запуск автотестов. | ||
+ | 3. **Static Code Analysis**: проверка через SonarQube. | ||
+ | 4. **Integration Tests**: деплой в staging-окружение, | ||
+ | 5. **Approval**: | ||
+ | 6. **Deploy to Production**: | ||
+ | |||
+ | ### 14.2. Кейсы внедрения DevOps в компании | ||
+ | |||
+ | - **Spotify** | ||
+ | - Использовала микросервисную архитектуру, | ||
+ | - Команды-«племена» (tribes) с автономией: | ||
+ | - **Netflix** | ||
+ | - Масштабируемое CI/CD, автоматизированное тестирование отказоустойчивости (Chaos Engineering, | ||
+ | - Внедрение принципов «You build it, you run it» и сильная культура ответственности. | ||
+ | - **Amazon** | ||
+ | - Постоянная доставка (Continuous Deployment). Ежедневные релизы сотен изменений. | ||
+ | - Высокая степень автоматизации: | ||
+ | |||
+ | --- | ||
+ | |||
+ | ## 15. Трудности и риски при внедрении DevOps | ||
+ | |||
+ | 1. **Сопротивление изменениям** | ||
+ | - Люди, привыкшие к традиционным методам, | ||
+ | - Важна культура обучения, | ||
+ | |||
+ | 2. **Недостаток навыков и знаний** | ||
+ | - DevOps-инженеры должны владеть широким стеком технологий (CI/CD, контейнеры, | ||
+ | - Необходимы обучение, | ||
+ | |||
+ | 3. **Сложность интеграции сторонних инструментов** | ||
+ | - Различные системы (мониторинг, | ||
+ | |||
+ | 4. **Проблемы безопасности** | ||
+ | - Без должного внимания к безопасности (DevSecOps) можно внедрить уязвимые контейнеры, | ||
+ | |||
+ | 5. **Управление инфраструктурным «дрейфом»** | ||
+ | - Если инфраструктура создаётся вручную, | ||
+ | - Решение: | ||
+ | |||
+ | --- | ||
+ | |||
+ | ## 16. Заключение и рекомендации | ||
+ | |||
+ | 1. **Начинайте с культуры** | ||
+ | - DevOps — прежде всего культурный сдвиг: открытость, | ||
+ | 2. **Автоматизируйте всё, что можно** | ||
+ | - От сборки и тестирования до развертывания и мониторинга. | ||
+ | 3. **Стремитесь к непрерывной доставке** | ||
+ | - Делайте релизы малых, управляемых частей, | ||
+ | 4. **Используйте IaC** | ||
+ | - Контролируйте инфраструктуру через код, чтобы обеспечить повторяемость и прозрачность. | ||
+ | 5. **Внедряйте мониторинг и аналитику** | ||
+ | - Своевременное обнаружение проблем — ключ к быстрому восстановлению. | ||
+ | 6. **Обязательное внимание к безопасности** | ||
+ | - Интегрируйте практики безопасности на всех этапах разработки (shift-left security). | ||
+ | 7. **Непрерывно обучайтесь и совершенствуйтесь** | ||
+ | - Участвуйте в конференциях, | ||
+ | |||
+ | --- | ||
+ | |||
+ | ## 17. Литература и ресурсы для дальнейшего изучения | ||
+ | |||
+ | 1. **Книги** | ||
+ | - “The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win” — Gene Kim, Kevin Behr, George Spafford. | ||
+ | - “The DevOps Handbook: How to Create World-Class Agility, Reliability, | ||
+ | - “Accelerate: | ||
+ | |||
+ | 2. **Онлайн-ресурсы** | ||
+ | - [DevOps.com](https:// | ||
+ | - [The DevOps Institute](https:// | ||
+ | - [Docker Documentation](https:// | ||
+ | - [Kubernetes Documentation](https:// | ||
+ | |||
+ | 3. **Сообщества и конференции** | ||
+ | - **DevOpsDays** — локальные мероприятия по всему миру. | ||
+ | - **KubeCon + CloudNativeCon** — ключевое событие для облачных и контейнерных технологий. | ||
+ | - **Meetup-группы** в вашем городе (поиск на meetup.com). | ||
+ | |||
+ | --- | ||