Slide 1

Slide 1 text

Инфраструктура как код Игорь Курочкин Express 42

Slide 2

Slide 2 text

Введение 2 Infrastructure as a Service Platform as a Service Culture Continuous Delivery Infrastructure as Code Applications Production/SRE Monitoring and Observability

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

Проблемы • Server Sprawl (рост числа серверов) • Con fi guration drift (неконсистентное состояние) • Snow fl ake servers (сервера снежинки) • Fragile infrastructure (хрупкая инфраструктра) • Erosion (эрозия) • Automation Fear (страх автоматизации) Надежные решения для сложной инфраструктуры 6

Slide 7

Slide 7 text

История • … • 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

Slide 8

Slide 8 text

Книги • 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

Slide 9

Slide 9 text

Индустрия • Технологический радар: • 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

Slide 10

Slide 10 text

Цели • Ускорение процесса поставки • Снижение количества ошибок • Улучшение взаимодействия команд Надежные решения для сложной инфраструктуры 10

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

Инфраструктура как код Надежные решения для сложной инфраструктуры 13 • Автоматизация инфраструктуры с использованием практик из разработки

Slide 14

Slide 14 text

Общие принципы • Воспроизводимая инфраструктура • Повторяемые процессы • Изменяемая инфраструктура и процессы Надежные решения для сложной инфраструктуры 14

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

Инфраструктурные слои Надежные решения для сложной инфраструктуры 19 Base Service Culture Continuous Delivery Infrastructure as Code Application Production/SRE Monitoring and Observability

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

Иерархия • На уровне практик: • Отдельные репозитории • На уровне инструментов: • Environments, Roles, Pro fi les, Groups, ENC Надежные решения для сложной инфраструктуры 25

Slide 26

Slide 26 text

Chef Надежные решения для сложной инфраструктуры 26

Slide 27

Slide 27 text

Puppet Надежные решения для сложной инфраструктуры 27

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

Версионирование • Semantic Versioning 2.0.0 https://semver.org • Tom Preston-Werner (GitHub) • X.X.X: • MAJOR - несовместимые изменения • MINOR - новый функционал • PATCH - исправления Надежные решения для сложной инфраструктуры 29

Slide 30

Slide 30 text

Ветвление 30 • Trunk Based Development • https://trunkbaseddevelopment.com • GitHub Flow • Git fl ow

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

Стиль кода Надежные решения для сложной инфраструктуры 36 • Проверяем соответствие Style Guides • Линтеры для кода: • Chef Foodcritic • Puppet-lint • Ansible-lint • Salt-lint

Slide 37

Slide 37 text

Валидация Надежные решения для сложной инфраструктуры 37 • Валидация ERB, JSON, YAML • puppet parser validate, puppet-syntax, metadata-json- lint • ansible-playbook --syntax-check • salt-call

Slide 38

Slide 38 text

Функциональные тесты Надежные решения для сложной инфраструктуры 38 • Тестируем функционал: • ChefSpec • rspec-puppet, rspec-puppet-facts, puppet-retrospec • Ansible script, stat, uri, assert

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

CI/CD для инфраструктрного кода Надежные решения для сложной инфраструктуры 43 • Инструменты: • Vagrant • Test Kitchen (Chef, …) • Molecule (Ansible) • Beaker (Puppet)

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

Проблемы Надежные решения для сложной инфраструктуры 45 • Разные версии инструментов • Разные практики из разработки

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

Chef DK Надежные решения для сложной инфраструктуры 47

Slide 48

Slide 48 text

Puppet DK Надежные решения для сложной инфраструктуры 48

Slide 49

Slide 49 text

Puppet DK Надежные решения для сложной инфраструктуры 49

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

Проблемы с инструментами Надежные решения для сложной инфраструктуры 51 • Какие инструменты выбрать? • Как их сравнить? • Какие границы применимости? • Как их использовать совместно?

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

Инструменты Надежные решения для сложной инфраструктуры 53 • Dynamic Infrastructure Platforms (Cloud) • Infrastructure de fi nition (Terraform, CloudFormation) • Server con fi guration (Chef, Puppet, Ansible, Salt) • Infrastructure services (…)

Slide 54

Slide 54 text

Система управления конфигурацией • DSL, декларативное или императивное описание • Push или Pull модель • Встроенные модули и ресурсы • Иерархия, изоляция, сбор фактов • Шаблонизаторы • Идемпотентность Надежные решения для сложной инфраструктуры 54

Slide 55

Slide 55 text

Жизненный цикл Надежные решения для сложной инфраструктуры 55

Slide 56

Slide 56 text

Как выбрать? • Посмотреть на индустрию • Оценить самостоятельно • Сделать MVP Надежные решения для сложной инфраструктуры 56

Slide 57

Slide 57 text

Индустрия Надежные решения для сложной инфраструктуры 57

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

Границы применимости Надежные решения для сложной инфраструктуры 59 • Уровни Base, Service, Application • Service Discovery и Failover • Управление секретами • Деплой • Cloud, Database, Security, Containers

Slide 60

Slide 60 text

Современный стек Надежные решения для сложной инфраструктуры 60 • Chef 14 • Puppet 6 • Ansible 2.7 • Salt 2018 • Terraform 0.12

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

Онлайн курс OTUS Надежные решения для сложной инфраструктуры 63 • DevOps практики и инструменты: • 20 ноября - День открытых дверей • 27 ноября - Начало занятий • 5 месяцев - Длительность курса

Slide 64

Slide 64 text

Вакансия 64 • Мы ищем людей, которым это интересно • Пишите на [email protected]

Slide 65

Slide 65 text

Ссылки 65 • Митапы DevOps Meetup Moscow • Подкаст и телеграм канал DevOps De fl ope • Конференции по DevOps • Книги из презентации • Рассылка DevOps Weekly

Slide 66

Slide 66 text

Вопросы?