# Мы с вами поговорим
- что такое инфраструктура
- концепция IaC
- контроль версий
- золотые образы
- управление конфигурациями
- локальные и тестовые окружения
- работа с облаками
- контейнеры и оркестраторы
---
# Инфраструктура
- сети
- сервера
- настроенные ОС
- безопасность
- аутентификация и авторизация
- SSL
- RBAC
- firewalls
- логи
- мониторинг
- система бэкапирования
---
# Задачи при работе с инфраструктурой
- развертывание
- настройка
- масштабирование
- обновление
---
# Реализации инфраструктуры
- baremetal
- виртуальные сервера
- облака: публичные и приватные
- контейнерные оркестраторы
---
# Ручное администрирование
- Человеческий фактор
- Отличия в настройках окружений
- Отсутствие повторяемости
- Отсутствие контроля
---
# Infrastructure as Code
- Инфраструктура описывается в виде специальных манифестов
- Манифесты хранятся в Git-репозитории
- Используются пайплайны (обработка манифестов при помощи
кода)
- Применяются правила разработки
- Версионирование
- Тестирование и ревью кода
- Управление артефактами
- используемые языки: yaml, hcl, json ...
---
# Инструменты инфраструктурного инженера
- Git (Github, Gitlab, Bitbucket, etc ...)
- CI/CD (Jenkins, Travis, GitLab CI, GitHub actions, etc ...)
- Packer: создание образов
- Vagrant: локальные и тестовые окружения
- Ansible: управление конфигурациями
- Salt, Chef, Puppet - если много серверов и требуется pull модель
- Terraform: работа с облаками
- K8s, nomad, docker swarm, rancher - контейнерные оркестраторы
---
# Git
- один или несколько репозиториев
- согласованный flow
- commit style
- protected branch
- тесты, линтеры
- инфраструктурные пайпланы
- лучше с ручным запуском
---
# Packer
- [Документация](https://www.packer.io/docs)
- Создание образов виртуальных машин
- Поддержка множества облачных провайдеров
- HCL2-манифесты (после 1.7.0)
- Основное применение - “Золотые образы”
---
# Попробуем собрать свой образ!

---
# Vagrant
- Написан на Ruby (и файл конфигурации тоже!)
- Обертка для множества провайдеров
- Работает с box-ами – сжатыми образами виртуальных машин
- Расширяется при помощи Plugin-ов
- Поддерживает provisioning (shell, ansible, file)
---
# Развернем небольшую конфигурацию вагрантом

---
# Ansible
- написан на python
- Доступ по ssh
- Большое кол-во модулей
- Инвенторные и не только плагины
- Большое кол-во готовых ролей (Ansible Galaxy)
- поддержка jinja2 темплейтов
- гибкая работа с переменными
- Возможность кастомизации
- Скромная поддержка Windows
- Неэффективность при работе с сотнями серверов
---
# Запустим ансибл плейбук на запущенные виртуалки

---
# Terraform
- Декларативное описание инфраструктуры
- также можно использовать шаблоны, циклы и условия
- Сохранение состояния (обычно в S3)
- Огромное число провайдеров
- Провайдер - библиотека для работы с API
- Управление всем, у чего есть CRUD API
- Предоставляет единый подход для работы с различными облаками и другими ресурсами
---
# Развернем терраформом инфраструктуру в yandex cloud

---
# Контейнеры (docker)
- стандартизированная дистрибуция
- декларативное описание окружения, сборки, депоймента
- ускорение релизного цикла
- изоляция
- идемпотентность
---
# Оркестраторы (Swarm, Nomad, Kubernetes etc..)
- позволяют создать единую инфраструктуру для жизнедеятельности контейнера
- управление инфраструктурой через API (в том числе через терраформ)
- управление жизнедеятельностью ресурсов в инфраструктуре через декларативные манифесты
- широкое использование шаблонизации
---
# Время для вопросов