DevOps Philosophy

What is DevOps?

DevOps (Development и Operations) - это методология, объединяющая команды разработки и системного администрирования для ускорения и повышения качества доставки ПО.

DevOps as Agile methodology

DevOps возник как расширение и развитие Agile, добавляя операционное взаимодействие (объединение команд Dev и Ops) и непрерывность доставки. Вместе DevOps и Agile обеспечивают более эффективную разработку, запуск и улучшение ПО.

Соусы

Why are DevOps specialists called engineers?

Кто такой инженер?

Инженер — это профессионал, который занимается

  • изобретением
  • проектированием
  • созданием
  • анализом
  • поддержкой

технических систем.

Всем тем, что было описано выше и занимается “DevOps-инженер”.

Доп. материалы

Why are separate specialists needed for implementing DevOps practices?

Процессы разработки и эксплуатации постоянно меняются и требуют постоянного улучшения и внедрения новых инструментов автоматизации.
Разработчики должны быть сфокусированы на разработке — каждый должен делать свою работу, дабы качество продукта оставалось на высоком уровне.

Соусы

DevOps as a Service

DevOps as a Serviceоблачная или аутсорс модель, где все процессы CI/CD, мониторинг и менеджмент инфраструктуры выполняются внешним провайдером (cloud/outsourcing). Позволяет компаниям ускорять выпуск продукта без необходимости содержать свою DevOps-команду.


Linux

Purpose of Linux

GNU/LinuxFOSS OS *, обеспечивающая стабильную, безопасную и многозадачную работу устройств и приложений. Идеально подходит для серверов.

*🤓 family of open source Unix-like operating systems based on the Linux kernel

Linux OS and Kernel architecture


Соусы

Linux FHS


*Filesystem Hierarchy Standard

/etc/fstab

/etc/fstab — файл с таблицей монтирования файловых систем при загрузке.

Key differences between Linux and Windows

GNU/LinuxWindows
FOSSnot FOSS
Monolith kernelHybrid kernel
Эффективный и стабильный (особенно для серверов)Менее эффективный из-за кучи ресурсоемких процессов
Less vulnerabilitiesMore vulnerabilities

How to change hostname?

hostnamectl set-hostname 'new_hostname'
systemctl restart systemd-hostnamed

Альтернатива — изменение в файлах /etc/hostname и /etc/hosts.

Difference between systemd and init

  • systemd — современный менеджер инициализации с параллельным запуском сервисов и их управлением
  • init — более простой и последовательный

Load Average

Load Averageпоказатель средней нагрузки на систему за последние 1, 5 и 15 минут, который показывает среднее кол-во процессов, выполняющихся на CPU и ожидающих (включая также процессы в состоянии ожидания ввода-вывода).

inode

inodeструктура файловой системы, хранящая метаданные файла (права, владелец, указатели на блоки).

ls -li <file>
stat <file>
  • Soft/symbolic link — ярлык на путь
    ln [-s|--symbolic] /path/to/file_or_directory path/to/symlink
  • Hard link — доп. имя того же файла (того же inode).
    ln /path/to/file path/to/hardlink

Соусы

Zombie process

Зомби-процессы в Linux — дочерние процессы, которые завершились, но их родительские процессы не получили информацию о завершении (через syscall wait()). Они не занимают памяти (как процессы-сироты), но блокируют записи в таблице процессов, размер которой ограничен. То есть, зомби — нормальная часть жизненного цикла процесса, пока родитель не порождает слишком много зомби по ошибке (что может привести к превышению максимума процессов (NPROC) и новые процессы перестанут создаваться).

Их нельзя убить напрямую — нужно остановить/убить родителя, чтобы тот освободил ресурсы зомби.

  • Найти зомби
    ps aux | (head -1 && grep '[d]efunct')
  • Определить родителя (PPID)
    ps -xal | (head -1 && grep '[d]efunct')
  • Убить родителя
    kill -9 <PPID>
  • Массовое убийство зомби
    ps -xal | grep '[d]efunct' | awk '{ system ("kill -9 " $4) }'

Соусы

Termination Signals

  • SIGTERMзапрос на завершение (можно обработать/игнорировать)
  • SIGINTпрерывание от пользователя (Ctrl + C)
  • SIGQUITпрерывание с дампом ядра (Ctrl + \) (ошибка программы)
  • SIGKILLпринудительное немедленное завершение (нельзя обработать/игнорировать)
  • SIGHUPсигнал отключения терминала (часто используется для config reload)

Соусы

OOM Killer

OOM Killerмеханизм ядра Linux, убивающий процессы при нехватке памяти.

Как спасти процесс от OOM Killer:

  • Записать значение -17 в файл proc/PID/oom_adj
    pgrep -f <program> | while read PID; do echo '-17' > "/proc/${PID}/oom_adj"; done
  • Использовать опцию OOMScoreAdjust=-17 в .service файле (если система использет systemd)

* -17 — значение максимально низкого приоритета завершения


Git

Undo changes

  • Undo uncommited changes
    git restore <file>
    git checkout -- <file>
  • Undo commit
    git reset

Different between merge и rebase

  • merge сохраняет историю слияния
  • rebase переписывает историю, делая её линейной

Fix commit history

  • Исправить последний коммит
    git commit --amend
  • Исправить несколько коммитов
    git rebase -i

Branching strategies

  • Git Flow
    Сложная и структурированная модель с несколькими основными ветками:

    • main
    • develop
    • feature
    • release
    • fix

    Подходит для крупных команд с циклическими релизами и поддержкой нескольких версий продукта.

  • GitHub Flow
    Простая и быстрая модель, где все работают от main, создавая для каждой задачи кратковременную ветку.
    Облегчает частые релизы и CI/CD. Подходит для небольших команд и проектов с одним основным релизом.

  • Trunk Based Development
    Ориентирована на частое слияние в единую основную ветку (trunk), где ветки живут недолго.
    Способствует непрерывной интеграции и быстрому выпуску кода. Подходит для гибкой и быстрой разработки в небольших/средних командах.

git stash

  • git stash сохраняет изменения временно
    чтобы очистить рабочую директорию и переключиться на другую задачу/ветку, не создавая новых коммитов
  • git stash applyвозвращает

git cherry-pick

git cherry-pick позволяет выбрать конкретный коммит из одной ветки и применить его изменения в текущей, то есть перенести только эти изменения без слияния ветки целиком.

git worktree

git cherry-pick позволяет работать с разными ветками одновременно, создавая для них отдельные папки с рабочими директориями.


Networking

OSI and TCP/IP

OSI (Open Systems Interconnection) — эталонная модель, разработанная для описания функций телекоммуникационных или вычислительных систем, необходимых для сетевого взаимодействия. OSI сейчас не используется в реальном мире, поэтому появилась модель TCP/IP, по которой вся текущая сеть работает.

Соусы

What happens when you type google.com in your browser?

  • Resolving IP-address
    of the URL via DNS
  • Generate an HTTP request
    with headers (accept, user-agent, cookie, etc)
  • Open an HTTP connection
    to the resolved IP address
  • Send the request to the server
  • Receive the response from the server
  • Parse response headers
  • В зависимости от заголовков выполнение доп. действий
  • Decompress the response body if it’s compressed
    Например, gzip
  • Parse HTML code inside response body
  • Разрешение доп. ресурсов (картинки, стили, скрипты и т.д.)
  • Start loading those resources
    via their URLs using the same steps
  • Render HTML
    после загрузки необходимых ресурсов, загрузка оставшихся в фоне
  • Close HTTP connection
    when all resources are loaded

Соусы

TCP/UDP

  • TCPнадёжный протокол с контролем доставки
  • UDPбыстрый, без гарантии доставки
    Используется для данных, потеря части которых не страшна — видео, прямые трансляции, передача аудио и т.д.

DNS

DNS — Служба, переводящая доменные имена в IP-адреса и обратно.

Load Balancer

Load Balancer распределяет сетевой трафик между несколькими серверами для повышения отказоустойчивости и производительности.

IP-address

IP-addressлогический сетевой адрес устройства для идентификации в сети.
Состоит из октетов (размером в 1 байт), разделенных точками.

MAC-address

MAC-address — уникальный физический адрес сетевого интерфейса.

ICMP

ICMPпротокол для передачи служебных сообщений о состоянии сети (например, ping).

How HTTPS works?

Firewall

Firewall — средство фильтрации сетевого трафика по заданным правилам.

NAT

NAT — технология подмены IP-адресов при трансляции между локальной и внешней сетью.

iptables/ufw в Linux

  • iptables — инструмент ручной настройки правил фаервола
  • ufwупрощённая оболочка над ним

Clouds

IaaS/PaaS/SaaS

Это модели облачных сервисов.

  • IaaS (Infrastructure as a Service) даёт инфраструктуру как сервис
  • PaaS (Platform as a Service) — платформу для разработки
  • SaaS (Software as a Service) — готовые приложения

Соусы

How S3 works?

S3 хранит объекты в бакетах и предоставляет доступ через API или WebUI.


Security

Shift Left Security

Практика внедрения безопасности (тестирования) на ранних этапах разработки.


V12n

What is virtualization?

Разделение ресурсов физического устройства на несколько изолированных (виртуальных) сред.

Types of virtualization

Чем отличается гипервизор типа 1 от типа 2?

  • Тип 1 работает напрямую на железе
  • Тип 2поверх ОС.

Типы аппаратной виртуализации


Containerization

What is container?

Изолированная среда для запуска приложений с зависимостями.

Docker architecture

Difference between exec and attach

  • exec создает новый процесс в контейнере
  • attach подключается к существующему основному процессу контейнера

Which Dockerfile instructions create a new layer?

  • FROM
  • RUN
  • COPY
  • ADD

How do containers communicate?

Через общую сеть или volumes.


CI/CD

What is CI/CD?

cicd

Which service update strategy is safer: Blue-Green or Rolling Update?

Blue-Green безопаснее, т.к. есть полный откат на прежнюю версию.


IaC

What is Infrastructure as Code?

Автоматизация управления инфраструктурой через код.

The pros and cons of IaC

The pros and cons of infrastructure-as-code

Terraform

Инструмент управления инфраструктурой через код (IaC).

Ansible

Инструмент автоматизации конфигураций и развертывания.

Terraform Modules

Переиспользуемые блоки конфигурации для Terraform.

Terraform Workspaces

Механизм для управления разными окружениями в одном коде.


Development

API

Интерфейс взаимодействия между системами (REST, RPC, GraphQL).

Software development methodologies

Соусы

Project management tools

  • Jira
  • Trello
  • ClickUp
  • Asana

Monitoring/Logging/Alerting

Observability

Observability в DevOps — практика получения и анализа данных (логов, метрик, трассировок) для полного понимания состояния приложения и инфраструктуры в реальном времени и, следовательно, быстрой диагностики проблем.

Metrics collection approaches

  • 4 golden signals
  • RED
  • USE
  • LTES

Соусы

SLO/SLA/SLI

  • SLI (Service Level Indicator) — измеряемая метрика (реальность)
  • SLO (Service Level Objective) — целевой показатель (цель)
  • SLA (Service Level Agreement) — договорный уровень сервиса (гарантия)

Databases

Difference between SQL and NoSQL?

  • SQLреляционные БД со строгой схемой
  • NoSQLнереляционные, гибкие в структуре.

How to backup and restore DB?

  • mysqldump, pg_dump
  • mysql < dump.sql, psql -f dump.sql

Difference between replication and backup

  • Репликациясинхронное копирование данных
  • бэкап — сохранение снимка для восстановления

How to check database connections?

  • SHOW PROCESSLIST
  • pg_stat_activity

How to check table size?

Через системные метаданные/команды (pg_relation_size, information_schema).

How to perform DB schema migration?

Через миграционные инструменты (Liquibase, Flyway) или SQL-скрипты.


HR tips

Собеседования, и всё, что с ними связано


Соусы