---
# System prepended metadata

title: Мы с вами поговорим

---

# Мы с вами поговорим

- что такое инфраструктура
- концепция 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)
- Основное применение - “Золотые образы”

---

# Попробуем собрать свой образ!

![](https://i.imgur.com/uDc6XsV.png)

---

# Vagrant

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

---

# Развернем небольшую конфигурацию вагрантом

![](https://i.imgur.com/uDc6XsV.png)


---

# Ansible

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

---

# Запустим ансибл плейбук на запущенные виртуалки

![](https://i.imgur.com/uDc6XsV.png)


---

# Terraform

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

---

# Развернем терраформом инфраструктуру в yandex cloud

![](https://i.imgur.com/uDc6XsV.png)

---

# Контейнеры (docker)

- стандартизированная дистрибуция
- декларативное описание окружения, сборки, депоймента
- ускорение релизного цикла
- изоляция
- идемпотентность

---

# Оркестраторы (Swarm, Nomad, Kubernetes etc..)

- позволяют создать единую инфраструктуру для жизнедеятельности контейнера
- управление инфраструктурой через API (в том числе через терраформ)
- управление жизнедеятельностью ресурсов в инфраструктуре через декларативные манифесты
- широкое использование шаблонизации

---

# Время для вопросов


