Наш эксперт,
Игорь Курочкин, рассказал про практику Infrastructure as code (Инфраструктура как код) на открытом уроке курса DevOps практики и инструменты в 2018 году.
В ходе выступления затронуты следующие темы:
1. Введение в практику
Infrastructure as code (Инфраструктура как код) и модель технических практик;
2. Проблемы управления конфигурацией:
Server Sprawl (рост числа серверов),
Configuration drift (неконсистентное состояние),
Snowflake servers (сервера снежинки),
Fragile infrastructure (хрупкая инфраструктра),
Erosion (эрозия),
Automation Fear (страх автоматизации);
3. История сервисов и инструментов:
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);
4. Книги по практике и инструментам: Infrastructure as code: Managing Infrastructure with Puppet, Test-Driven Infrastructure with Chef, Customizing Chef, Ansible: Up and Running, Salt Essentials,
Infrastructure as Code, Terraform: Up and Running, Puppet Best practices;
5. Состояние практики в индустрии и технологических радарах на 2018 год:
Manual infrastructure management (2012),
Infrastructure as code (2012),
Immutable servers (2013),
Docker (2016),
Pipelines as Code (2017),
Pipelines for Infrastructure as Code (2018);
6. Цели внедрения и развития практики Infrastructure as code:
ускорение процесса поставки,
снижение количества ошибок и
улучшение взаимодействия команд;
7. Определение практики как автоматизация инфраструктуры с использованием практик из разработки;
8. Принципы практики:
воспроизводимая инфраструктура,
повторяемые процессы,
изменяемая инфраструктура и процессы;
9. Модели управления инфраструктурой (Ad Hoc, Configuration synchronisation, Immutable Infrastructure, Immutable Delivery),
инфраструктурный код (YAML, JSON, HCL, DSL, Erb, Epp, j2, tpl),
инфраструктурный репозиторий (Иерархия и слои, окружения, роли, модули, внешние зависимости, переменные, конфигурация для инструментов, тесты и документация), инфраструктурные слои (stacks, layers, base-service-app),
общий язык и способы взаимодействия (PR, MR, API, CDK, Development kit, CLI);
10. Практики из разработки: организация кода, политики версионирования (
Semantic Versioning 2.0.0) и ветвления (
Trunk-based Development, GitFlow, GitHub flow, GitLab flow), управление артефактами (сборка, публикация, хранение, маркетплейс) и внешние зависимости, тестирование и ревью изменений, CI/CD для инфраструктурного кода (pipelines для модуля, репозитория, внешних зависимостей, сборки образов и создания окружений), среда разработки (Development Kit);
11. Классификация, выбор и сравнение инструментов управления конфигурацией по следующим критериям: язык, DSL, опыт работы, модель управления, иерархия и изоляция, безопасность, масштабирование, интеграция в текущий стек, наличие инструментария, поддержка community, поддержка практик из разработки, командная работа;
12. Жизненный цикл управления конфигурацией, границы применимости, примеры из индустрии и сложные кейсы.
Подробнее в
презентации и записи выступления ниже: