2. Введение
2
Infrastructure as a Service
Platform as a Service
Culture
Continuous Delivery
InfrastructureasCode
Applications
Production/SRE
MonitoringandObservability
3. Инфраструктура как
код
3
Infrastructure as a Service
Platform as a Service
Culture
Continuous Delivery
InfrastructureasCode
Applications
Production/SRE
MonitoringandObservability
4. План
• Проблемы, история и цели
• Определение, принципы и подходы
• Практики из разработки
• Инструменты
Надежные решения для сложной инфраструктуры
4
5. План
• Проблемы, история и цели
• Определение, принципы и подходы
• Практики из разработки
• Инструменты
Надежные решения для сложной инфраструктуры
5
6. Проблемы
• Server Sprawl (рост числа серверов)
• Configuration drift (неконсистентное состояние)
• Snowflake servers (сервера снежинки)
• Fragile infrastructure (хрупкая инфраструктра)
• Erosion (эрозия)
• Automation Fear (страх автоматизации)
Надежные решения для сложной инфраструктуры
6
8. Книги
• 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
9. Индустрия
• Технологический радар:
• 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
10. Цели
• Ускорение процесса поставки
• Снижение количества ошибок
• Улучшение взаимодействия команд
Надежные решения для сложной инфраструктуры
10
11. Инфраструктура как
код
11
Infrastructure as a Service
Platform as a Service
Culture
Continuous Delivery
InfrastructureasCode
Applications
Production/SRE
MonitoringandObservability
12. План
• Проблемы, история и цели
• Определение, принципы и подходы
• Практики из разработки
• Инструменты
Надежные решения для сложной инфраструктуры
12
14. Общие принципы
• Воспроизводимая инфраструктура
• Повторяемые процессы
• Изменяемая инфраструктура и процессы
Надежные решения для сложной инфраструктуры
14
15. Подходы
Надежные решения для сложной инфраструктуры
15
• Модели управления инфраструктурой
• Инфраструктурный код
• Инфраструктурный репозиторий
• Инфраструктурные слои (stack/layers)
• Общий язык общения
18. Инфраструктурный
репозиторий
• Репозиторий с инфраструктурным кодом
• Иерархия и слои - окружения, роли, модули
• Внешние зависимости
• Переменные
• Инструменты и конфигурация для инструментов
• Тесты и документация
Надежные решения для сложной инфраструктуры
18
19. Инфраструктурные
слои
Надежные решения для сложной инфраструктуры
19
Base
Service
Culture
Continuous Delivery
InfrastructureasCode
Application
Production/SRE
MonitoringandObservability
20. Общий язык
общения
• Инфраструктурный код
• Общие инструменты и модули
• Практики из разработки:
• Pull requests и diff изменений
• API и development kit (Среда разработки)
Надежные решения для сложной инфраструктуры
20
21. План
• Проблемы, история и цели
• Определение, принципы и подходы
• Практики из разработки
• Инструменты
Надежные решения для сложной инфраструктуры
21
22. Практики из
разработки
22
• Организация кода
• Политики версионирования и ветвления
• Управление артефактами и внешние зависимости
• Тестирование и ревью изменений
• CI/CD для инфраструктурного кода
• Среда разработки
23. Практики из
разработки
23
• Организация кода
• Политики версионирования и ветвления
• Управление артефактами и внешние зависимости
• Тестирование и ревью изменений
• CI/CD для инфраструктурного кода
• Среда разработки
24. Структура
репозиториев
• Моно репозиторий
• Мульти репозиторий
• Инфраструктурный код:
• вместе с кодом приложений
• отдельно
Надежные решения для сложной инфраструктуры
24
25. Иерархия
• На уровне практик:
• Отдельные репозитории
• На уровне инструментов:
• Environments, Roles, Profiles, Groups, ENC
Надежные решения для сложной инфраструктуры
25
28. Практики из
разработки
28
• Организация кода
• Политики версионирования и ветвления
• Управление артефактами и внешние зависимости
• Тестирование и ревью изменений
• CI/CD для инфраструктурного кода
• Среда разработки
29. Версионирование
• Semantic Versioning 2.0.0 https://semver.org
• Tom Preston-Werner (GitHub)
• X.X.X:
• MAJOR - несовместимые изменения
• MINOR - новый функционал
• PATCH - исправления
Надежные решения для сложной инфраструктуры
29
31. Практики из
разработки
31
• Организация кода
• Политики версионирования и ветвления
• Управление артефактами и внешние зависимости
• Тестирование и ревью изменений
• CI/CD для инфраструктурного кода
• Среда разработки
32. Управление артефактами
и внешние зависимости
Надежные решения для сложной инфраструктуры
32
• Инфраструктурный модуль как артефакт
• Сборка, публикация и хранение модулей
• Маркетплейс инфраструктурных модулей
• Управление внешними зависимостями
33. Практики из
разработки
33
• Организация кода
• Политики версионирования и ветвления
• Управление артефактами и внешние зависимости
• Тестирование и ревью изменений
• CI/CD для инфраструктурного кода
• Среда разработки
34. Тестирование
Надежные решения для сложной инфраструктуры
34
• Стиль языка и инфраструктурного кода
• Валидацию шаблонов и кода
• Функционал
• Результат
35. Стиль языка
Надежные решения для сложной инфраструктуры
35
• Линтеры для языка:
• Rubocop (Ruby)
• Pylint, flake8 (Python)
• Надстройки для Chef, Puppet, Salt, Ansible:
• Cookstyle
36. Стиль кода
Надежные решения для сложной инфраструктуры
36
• Проверяем соответствие Style Guides
• Линтеры для кода:
• Chef Foodcritic
• Puppet-lint
• Ansible-lint
• Salt-lint
40. Практики из
разработки
40
• Организация кода
• Политики версионирования и ветвления
• Управление артефактами и внешние зависимости
• Тестирование и ревью изменений
• CI/CD для инфраструктурного кода
• Среда разработки
41. CI/CD для
инфраструктрного кода
• Pipeline для модуля
• Pipeline для инфраструктурного репозитория
• Pipeline для внешних зависимостей
• Pipeline для сборки образов
• Pipeline для создания окружений
• …
Надежные решения для сложной инфраструктуры
41
42. CI/CD для
инфраструктрного кода
Надежные решения для сложной инфраструктуры
42
• Инструменты:
• Vagrant
• Test Kitchen (Chef, …)
• Molecule (Ansible)
• Beaker (Puppet)
43. Практики из
разработки
43
• Организация кода
• Политики версионирования и ветвления
• Управление артефактами и внешние зависимости
• Тестирование и ревью изменений
• CI/CD для инфраструктурного кода
• Среда разработки
44. Проблемы
Надежные решения для сложной инфраструктуры
44
• Разные версии инструментов
• Разные практики из разработки
45. Development Kit
• Локальная разработка и тестирование
• Одно окружение для Linux, OS X, Windows
• Набор CLI инструментов, библиотек и API
• Workflows и best practices
• Часть CI
Надежные решения для сложной инфраструктуры
45
49. План
• Проблемы, история и цели
• Определение, принципы и подходы
• Практики из разработки
• Инструменты
Надежные решения для сложной инфраструктуры
49
50. Проблемы с
инструментами
Надежные решения для сложной инфраструктуры
50
•Какие инструменты выбрать?
•Как их сравнить?
•Какие границы применимости?
•Как их использовать совместно?
51. Инструменты
Надежные решения для сложной инфраструктуры
51
•Dynamic Infrastructure Platforms
•Infrastructure definition
•Server configuration
•Infrastructure services
53. Система управления
конфигурацией
• DSL, декларативное или императивное описание
• Push или Pull модель
• Встроенные модули и ресурсы
• Иерархия, изоляция, сбор фактов
• Шаблонизаторы
• Идемпотентность
Надежные решения для сложной инфраструктуры
53
57. Оценка
Надежные решения для сложной инфраструктуры
57
• Язык программирования и DSL
• Опыт работы
• Модель управления
• Иерархия и изоляция
• Безопасность
• Масштабирование
• Интеграция в текущий стек
• Наличие инструментария
• Поддержка community
• Поддержка практик из разработки
• Командная работа
• Примеры из индустрии и сложные кейсы
• …
58. Границы
применимости
Надежные решения для сложной инфраструктуры
58
•Уровни Base, Service, Application
•Service Discovery и Failover
•Управление секретами
•Деплой
•Cloud, Database, Security, Containers
60. Кейсы
• Смена стека или передача сервиса
• Новый дата-центр
• Синхронизация окружений
• Тестовые окружения по требованию
• API инфраструктурной платформы и командная работа
• Мониторинг в виде кода
• …
Надежные решения для сложной инфраструктуры
60
61. Итого
• Автоматизация инфраструктуры с использованием
практик из разработки
• Помогает:
• Ускорить процесс поставки
• Снизить количество ошибок
• Улучшить взаимодействие команд
Надежные решения для сложной инфраструктуры
61
62. Онлайн курс OTUS
Надежные решения для сложной инфраструктуры
62
•DevOps практики и инструменты:
•20 ноября - День открытых дверей
•27 ноября - Начало занятий
•5 месяцев - Длительность курса
63. Вакансия
63
• Мы ищем людей, которым это интересно
• Пишите на dontpanic@express42.com
64. Ссылки
64
• Митапы DevOps Meetup Moscow
• Подкаст и телеграм канал DevOps Deflope
• Конференции по DevOps
• Книги из презентации
• Рассылка DevOps Weekly