# Мы с вами поговорим - что такое инфраструктура - концепция 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 (в том числе через терраформ) - управление жизнедеятельностью ресурсов в инфраструктуре через декларативные манифесты - широкое использование шаблонизации --- # Время для вопросов