Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Инфраструктура как код @OTUS

Igor Kurochkin
November 01, 2018
8

Инфраструктура как код @OTUS

Инфраструктура как код.
Слайды с лекции Игоря Курочкина для курса DevOps практики и инструменты на Отусе.
https://www.youtube.com/watch?v=ciA4Cezw0AE

Igor Kurochkin

November 01, 2018
Tweet

Transcript

  1. Введение 2 Infrastructure as a Service Platform as a Service

    Culture Continuous Delivery Infrastructure as Code Applications Production/SRE Monitoring and Observability
  2. Инфраструктура как код 3 Infrastructure as a Service Platform as

    a Service Culture Continuous Delivery Infrastructure as Code Applications Production/SRE Monitoring and Observability
  3. План • Проблемы, история и цели • Определение, принципы и

    подходы • Практики из разработки • Инструменты Надежные решения для сложной инфраструктуры 4
  4. План • Проблемы, история и цели • Определение, принципы и

    подходы • Практики из разработки • Инструменты Надежные решения для сложной инфраструктуры 5
  5. Проблемы • Server Sprawl (рост числа серверов) • Con fi

    guration drift (неконсистентное состояние) • Snow fl ake servers (сервера снежинки) • Fragile infrastructure (хрупкая инфраструктра) • Erosion (эрозия) • Automation Fear (страх автоматизации) Надежные решения для сложной инфраструктуры 6
  6. История • … • CFEngine (1993), Puppet (2005) • AWS

    (2006), Chef/Opscode (2009) • DevOps (2009) • Vagrant (2010), CloudFormation (2011) • Salt (2011), Ansible (2012), HashiCorp (2012) • Docker (2013), Terraform (2014), Kubernetes (2014) • Vespene (2018), OpsMop (2018) Надежные решения для сложной инфраструктуры 7
  7. Книги • 2011 Managing Infrastructure with Puppet • 2011 Test-Driven

    Infrastructure with Chef • 2014 Customizing Chef • 2015 Ansible: Up and Running • 2015 Salt Essentials • 2016 Infrastructure as Code • 2017 Terraform: Up and Running • 2018 Puppet Best practices Надежные решения для сложной инфраструктуры 8
  8. Индустрия • Технологический радар: • 2012 Manual infrastructure management HOLD

    • 2012 Infrastructure as code ADOPT • 2013 Immutable servers ADOPT • 2016 Docker ADOPT • 2017 Pipelines as Code ADOPT • 2018 Pipelines for Infrastructure as Code TRIAL Надежные решения для сложной инфраструктуры 9
  9. Цели • Ускорение процесса поставки • Снижение количества ошибок •

    Улучшение взаимодействия команд Надежные решения для сложной инфраструктуры 10
  10. Инфраструктура как код 11 Infrastructure as a Service Platform as

    a Service Culture Continuous Delivery Infrastructure as Code Applications Production/SRE Monitoring and Observability
  11. План • Проблемы, история и цели • Определение, принципы и

    подходы • Практики из разработки • Инструменты Надежные решения для сложной инфраструктуры 12
  12. Инфраструктура как код Надежные решения для сложной инфраструктуры 13 •

    Автоматизация инфраструктуры с использованием практик из разработки
  13. Общие принципы • Воспроизводимая инфраструктура • Повторяемые процессы • Изменяемая

    инфраструктура и процессы Надежные решения для сложной инфраструктуры 14
  14. Подходы Надежные решения для сложной инфраструктуры 15 • Модели управления

    инфраструктурой • Инфраструктурный код • Инфраструктурный репозиторий • Инфраструктурные слои (stack/layers) • Общий язык общения
  15. Модели управления инфраструктурой Надежные решения для сложной инфраструктуры 16 •

    Ad Hoc • Con fi guration synchronisation • Immutable Infrastructure • Immutable Delivery (Containerized Services)
  16. Инфраструктурный код Надежные решения для сложной инфраструктуры 17 • Код,

    шаблоны, конфигурация: • YAML, JSON, HCL • DSL (Chef, Puppet, RSpec*) • Erb, Epp, j2, tpl • Ruby, Python, Go, PowerShell, …
  17. Инфраструктурный репозиторий • Репозиторий с инфраструктурным кодом • Иерархия и

    слои - окружения, роли, модули • Внешние зависимости • Переменные • Инструменты и конфигурация для инструментов • Тесты и документация Надежные решения для сложной инфраструктуры 18
  18. Инфраструктурные слои Надежные решения для сложной инфраструктуры 19 Base Service

    Culture Continuous Delivery Infrastructure as Code Application Production/SRE Monitoring and Observability
  19. Общий язык общения • Инфраструктурный код • Общие инструменты и

    модули • Практики из разработки: • Pull requests и diff изменений • API и development kit (Среда разработки) Надежные решения для сложной инфраструктуры 20
  20. План • Проблемы, история и цели • Определение, принципы и

    подходы • Практики из разработки • Инструменты Надежные решения для сложной инфраструктуры 21
  21. Практики из разработки 22 • Организация кода • Политики версионирования

    и ветвления • Управление артефактами и внешние зависимости • Тестирование и ревью изменений • CI/CD для инфраструктурного кода • Среда разработки
  22. Практики из разработки 23 • Организация кода • Политики версионирования

    и ветвления • Управление артефактами и внешние зависимости • Тестирование и ревью изменений • CI/CD для инфраструктурного кода • Среда разработки
  23. Структура репозиториев • Моно репозиторий • Мульти репозиторий • Инфраструктурный

    код: • вместе с кодом приложений • отдельно Надежные решения для сложной инфраструктуры 24
  24. Иерархия • На уровне практик: • Отдельные репозитории • На

    уровне инструментов: • Environments, Roles, Pro fi les, Groups, ENC Надежные решения для сложной инфраструктуры 25
  25. Практики из разработки 28 • Организация кода • Политики версионирования

    и ветвления • Управление артефактами и внешние зависимости • Тестирование и ревью изменений • CI/CD для инфраструктурного кода • Среда разработки
  26. Версионирование • Semantic Versioning 2.0.0 https://semver.org • Tom Preston-Werner (GitHub)

    • X.X.X: • MAJOR - несовместимые изменения • MINOR - новый функционал • PATCH - исправления Надежные решения для сложной инфраструктуры 29
  27. Практики из разработки 31 • Организация кода • Политики версионирования

    и ветвления • Управление артефактами и внешние зависимости • Тестирование и ревью изменений • CI/CD для инфраструктурного кода • Среда разработки
  28. Управление артефактами и внешние зависимости Надежные решения для сложной инфраструктуры

    32 • Инфраструктурный модуль как артефакт • Сборка, публикация и хранение модулей • Маркетплейс инфраструктурных модулей • Управление внешними зависимостями
  29. Практики из разработки 33 • Организация кода • Политики версионирования

    и ветвления • Управление артефактами и внешние зависимости • Тестирование и ревью изменений • CI/CD для инфраструктурного кода • Среда разработки
  30. Тестирование Надежные решения для сложной инфраструктуры 34 • Стиль языка

    и инфраструктурного кода • Валидацию шаблонов и кода • Функционал • Интеграцию и результат
  31. Стиль языка Надежные решения для сложной инфраструктуры 35 • Линтеры

    для языка: • Rubocop (Ruby) • Pylint, fl ake8 (Python) • Надстройки для Chef, Puppet, Salt, Ansible: • Cookstyle
  32. Стиль кода Надежные решения для сложной инфраструктуры 36 • Проверяем

    соответствие Style Guides • Линтеры для кода: • Chef Foodcritic • Puppet-lint • Ansible-lint • Salt-lint
  33. Валидация Надежные решения для сложной инфраструктуры 37 • Валидация ERB,

    JSON, YAML • puppet parser validate, puppet-syntax, metadata-json- lint • ansible-playbook --syntax-check • salt-call
  34. Функциональные тесты Надежные решения для сложной инфраструктуры 38 • Тестируем

    функционал: • ChefSpec • rspec-puppet, rspec-puppet-facts, puppet-retrospec • Ansible script, stat, uri, assert
  35. Интеграционные тесты Надежные решения для сложной инфраструктуры 39 • Проверяем

    результат: • Serverspec (Ruby) • InSpec (Ruby) • Testinfra (Python) • Goss (Go)
  36. Интеграционные тесты Надежные решения для сложной инфраструктуры 40 • Проверяем

    результат: • Serverspec (Ruby) • InSpec (Ruby) • Testinfra (Python) • Goss (Go)
  37. Практики из разработки 41 • Организация кода • Политики версионирования

    и ветвления • Управление артефактами и внешние зависимости • Тестирование и ревью изменений • CI/CD для инфраструктурного кода • Среда разработки
  38. CI/CD для инфраструктрного кода • Pipeline для модуля • Pipeline

    для инфраструктурного репозитория • Pipeline для внешних зависимостей • Pipeline для сборки образов • Pipeline для создания окружений • … Надежные решения для сложной инфраструктуры 42
  39. CI/CD для инфраструктрного кода Надежные решения для сложной инфраструктуры 43

    • Инструменты: • Vagrant • Test Kitchen (Chef, …) • Molecule (Ansible) • Beaker (Puppet)
  40. Практики из разработки 44 • Организация кода • Политики версионирования

    и ветвления • Управление артефактами и внешние зависимости • Тестирование и ревью изменений • CI/CD для инфраструктурного кода • Среда разработки
  41. Development Kit • Локальная разработка и тестирование • Одно окружение

    для Linux, OS X, Windows • Набор CLI инструментов, библиотек и API • Work fl ows и best practices • Часть CI Надежные решения для сложной инфраструктуры 46
  42. План • Проблемы, история и цели • Определение, принципы и

    подходы • Практики из разработки • Инструменты Надежные решения для сложной инфраструктуры 50
  43. Проблемы с инструментами Надежные решения для сложной инфраструктуры 51 •

    Какие инструменты выбрать? • Как их сравнить? • Какие границы применимости? • Как их использовать совместно?
  44. Инструменты Надежные решения для сложной инфраструктуры 52 • Dynamic Infrastructure

    Platforms • Infrastructure de fi nition • Server con fi guration • Infrastructure services
  45. Инструменты Надежные решения для сложной инфраструктуры 53 • Dynamic Infrastructure

    Platforms (Cloud) • Infrastructure de fi nition (Terraform, CloudFormation) • Server con fi guration (Chef, Puppet, Ansible, Salt) • Infrastructure services (…)
  46. Система управления конфигурацией • DSL, декларативное или императивное описание •

    Push или Pull модель • Встроенные модули и ресурсы • Иерархия, изоляция, сбор фактов • Шаблонизаторы • Идемпотентность Надежные решения для сложной инфраструктуры 54
  47. Как выбрать? • Посмотреть на индустрию • Оценить самостоятельно •

    Сделать MVP Надежные решения для сложной инфраструктуры 56
  48. Оценка Надежные решения для сложной инфраструктуры 58 • Язык программирования

    и DSL • Опыт работы • Модель управления • Иерархия и изоляция • Безопасность • Масштабирование • Интеграция в текущий стек • Наличие инструментария • Поддержка community • Поддержка практик из разработки • Командная работа • Примеры из индустрии и сложные кейсы • …
  49. Границы применимости Надежные решения для сложной инфраструктуры 59 • Уровни

    Base, Service, Application • Service Discovery и Failover • Управление секретами • Деплой • Cloud, Database, Security, Containers
  50. Кейсы • Смена стека или передача сервиса • Новый дата-центр

    • Синхронизация окружений • Тестовые окружения по требованию • API инфраструктурной платформы и командная работа • Мониторинг в виде кода • … Надежные решения для сложной инфраструктуры 61
  51. Итого • Автоматизация инфраструктуры с использованием практик из разработки •

    Помогает: • Ускорить процесс поставки • Снизить количество ошибок • Улучшить взаимодействие команд Надежные решения для сложной инфраструктуры 62
  52. Онлайн курс OTUS Надежные решения для сложной инфраструктуры 63 •

    DevOps практики и инструменты: • 20 ноября - День открытых дверей • 27 ноября - Начало занятий • 5 месяцев - Длительность курса
  53. Ссылки 65 • Митапы DevOps Meetup Moscow • Подкаст и

    телеграм канал DevOps De fl ope • Конференции по DevOps • Книги из презентации • Рассылка DevOps Weekly