DevOps - это подход, методология и даже культура и философия процесса разработки, при котором программисты, тестировщики и системные администраторы могут работать над продуктом быстрее и эффективнее.
Подход помогает снизить ошибки при передаче проекта от разработчиков к тестировщикам и сисадминам и наладить между ними взаимодействие.
В основе лежит идея, что разработка, тестирование и эксплуатация цифровых продуктов — это единый, бесшовный и циклический процесс.
Это набор практик, нацеленных на активное взаимодействие и интеграцию специалистов по разработке и эксплуатации.
Нацелена на то, чтобы помогать организациям быстрее создавать и обновлять программные продукты (популяризация термина DevOps в 2009 г.).
chmod (от англ. change mode) — команда для изменения прав доступа к файлам и каталогам, используемая в Unix-подобных операционных системах
Архитектура веб-сервиса, которая позволит переключаться между версиями по распространенным схемам развертывания:
- канареечного развертывания (canary deployment).
Обе схемы используют пару бэкендов: «синий» и «зеленый».
Сначала на одном из бэкендов (например, на «синем») размещается стабильная версия, доступная пользователям, а другой («зеленый») используется для тестирования следующей версии. Когда тестирование окончено, бэкенды меняются ролями:
- При сине-зеленом развертывании весь пользовательский трафик одномоментно перераспределяется с одного бэкенда на другой. Сине-зеленое развертывание (blue-green deployment) — это метод внесения изменений в веб-сервер, приложение или сервер базы данных, путем замены чередующихся промышленных и промежуточных серверов.
- При канареечном развертывании переключение происходит постепенно, начиная с части пользователей.
После этого основным становится «зеленый» бэкенд, а на «синем» бэкенде можно тестировать следующую версию сервиса. Также, пока на «синем» бэкенде остается предыдущая версия, на нее можно откатить сервис, снова поменяв бэкенды ролями.
Канареечный релиз (canary release) — это метод снижения риска внедрения новой версии в эксплуатацию путем предоставления изменения небольшому подмножеству пользователей с нарастанием до состояния, когда это изменение становится доступным для всех
Балансировщик нагрузки (Load Balancer) — сервис, помогающий серверам эффективно перемещать данные, оптимизирующий использование ресурсов доставки приложений и предотвращающий перегрузки. Он управляет потоком информации между локальным или облачным хранилищем и конечным устройством — ПК, ноутбук, планшет или смартфон.
С помощью инструмента Docker девопс организует упаковку кода в контейнеры. Примерно как обычные грузовые контейнеры, которые благодаря стандартным габаритам укладываются, как конструктор, на палубе любого сухогруза. Только внутри виртуальных контейнеров — код, который «едет» на сервер, чтобы там исполняться. Девопс настраивает систему управления контейнерами — Swarm. Она следит за их состоянием, совместной работой, распределяет нагрузку.
Контейнеризация помогает:
- увеличить скорость выкладки кода на сервер, так как контейнер при запуске уже готов к работе
- быстро вернуться к предыдущей версии, если в новой обнаружились проблемы: закачиваем старые контейнеры — и снова все работает
- В итоге программисты сосредоточены на своей главной задаче: пишут код. А девопс помогает пройти весь остальной путь: собирает проверенные коды в контейнер, отправляет его на сервер и добавляет к уже работающей программе.
Окружения среды разработки:
- Local - компьютер разработчика
- Development - сервер разработки выступающий как песочница, где разработчик может выполнить unit-тестирование
- Integration - основа для построения CI, или для тестирования сайд-эффектов разработчиком
- Testing/Test/Internal Acceptance - окружение в котором выполняется тестирование интерфейса. Команда контроля качества проверяет что новый код не будет иметь влияния на существующую функциональность системы после деплоя нового кода в тестовое окружение.
- Staging/Stage/Model/Pre-Production/Demo - зеркало прод окружения
- Production/Live - серверы конечных пользователей/клиентов
Мерж реквест / Пул реквест - мерж-реквест или пулл-реквест создаётся в системе управления git-репозиториями. Это запрос на мерж одной ветки в другую, подобно задаче, назначаемый на какого-либо исполнителя. GitHub и Bitbucket используют термин «пулл-реквест», потому что первое необходимое действие — сделать пулл предлагаемой ветки.
Деплой - это развертывание/помещение исполняемого кода на сервер, где он будет работать.
Deploy - это целый процесс действий, которые делают программный продукт готовым к использованию:
- выпуск;
- установка;
- активация;
- адаптация;
- обновление;
- исправление ошибок и другие.
разработчиков, позволяющий создавать, публиковать, запускать и управлять контейнерными приложениями. Это платформа, которая позволяет упаковать в контейнер приложение со всем окружением и зависимостями, а затем доставить и запустить его в целевой системе.
Создание образов - docker Build создает базовый образ контейнера, который включает все необходимое для запуска приложения — его код, двоичные файлы, сценарии, зависимости, конфигурацию, переменные среды и другое. Для определения и запуска много контейнерных приложений применяется инструмент docker compose.
Docker daemon - сервис, через который осуществляется взаимодействие с контейнерами
Docker client - интерфейс командной строки управления Docker daemon
Docker image - файл (образ), из которого разворачиваются контейнеры
Docker container - развернутое из образа приложение
Docker registry - репо с докер образами
Docker file - инструкция для сборки образа
Kubernetes (K8s) — портативная платформа оркестрации контейнеров с открытым исходным кодом. Этот инструмент используется для автоматизации развертывания контейнерных приложений на разных хостах, а также планового масштабирования и управления ими.
Для чего нужен Kubernetes
- Управление контейнерами на нескольких хостах одновременно.
- Оптимизация ресурсов используемого оборудования.
- Автоматическое развертывание и обновления приложений.
- Подключение и добавление хранилищ для запуска приложений с отслеживанием состояния.
- Масштабирование контейнерных приложений и их ресурсов на лету.
- Декларативное управление службами, что гарантирует полный контроль над развернутыми приложениями.
- Автоматический контроль работоспособность и восстановление приложений с помощью функций автозапуска, автозамены, авторепликации и автомасштабирования.
Виртуальная машина — это полноценная операционная система внутри другой ОС, с собственным ядром и другими изолированными ресурсами. Контейнер — не готовый «компьютер», а лишь изолированный механизм для запуска одного приложения.
В отличие от аппаратной виртуализации, контейнеризация обеспечивает разделение ресурсов не на аппаратном уровне, а на базе ядра операционной системы. Контейнеры более легковесны, менее требовательны и полностью зависимы от «материнской» ОС, чем VM.
Контейнер приложения — экземпляр исполняемого программного обеспечения (ПО), который объединяет двоичный код приложения вместе со всеми связанными файлами конфигурации, библиотеками, зависимостями и средой выполнения.
Смысл и главное преимущество технологии в том, что контейнер абстрагирует приложение от операционной системы хоста, то есть остается автономным, благодаря чему становится легко переносимым — способным работать на любой платформе
Зачем нужна контейнеризация?
- Контейнеры решают критически важную проблему переносимости кода. Они сводят на нет возможные противоречия между собственной локальной средой разработки и производственной средой приложения.
- Упаковка в контейнеры позволяя отделить код от базовой инфраструктуры, в которой он работает. В производственной среде этот контейнер можно запускать на любом компьютере, на котором есть платформа контейнеризации. В продакшене код будет работать также хорошо, как и на машине программиста.
Преимущества контейнеризации:
- Контейнеризация стала ключевым техническим компонентом для обеспечения непрерывного развертывания и уменьшения жизненного цикла инновации продукта. Благодаря тому, что предприятия разбивают монолитную архитектуру своих производств на гибкие контейнерные микросервисы, время вывода на рынок начинает отсчитываться не в месяцах, а в днях.
- Упрощение конфигурирования приложений. Стандартный контейнер Docker универсален. Упакованное в него приложение может работать без дополнительных настроек где угодно — на персональном компьютере (ПК, Mac, Linux), в облаке, на локальных серверах и даже на пограничных устройствах.
- Контейнерная технология крайне эффективна как средство повышения эффективности разработки. Небольшие группы могут разрабатывать и упаковывать свои приложения на локальных устройствах (например, ноутбуках), а затем развертывать его в практически любой тестовой или производственной среде. Время и усилия, сэкономленные при тестировании и развертывании, кардинально меняют правила игры во всем процессе автоматизации производства.
- Контейнеры легко воспроизвести, поэтому их удобно использовать для автоматического масштабирования приложений.
Что такое inode в Linux?
Индексный дескриптор в файловой системе, который хранит метаданные о файлах, за исключением имени файла. В дескрипторе хранится: длина файла в байтах, id устройства с файлом, id пользователя владельца файла, id группы файла, режим файла (права доступа), timestamp последнего изменения файла, счётчик хардлинков, указатели на блоки файла.
Что такое POSIX?
Набор стандартов, описывающих интерфейсы между операционной системой и прикладной программой (системный API), библиотеку языка C и набор приложений и их интерфейсов. Создан для совместимости различных Unix-подобных дистрибутивов.