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/Linux — FOSS 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/Linux | Windows |
---|---|
FOSS | not FOSS |
Monolith kernel | Hybrid kernel |
Эффективный и стабильный (особенно для серверов) | Менее эффективный из-за кучи ресурсоемких процессов |
Less vulnerabilities | More 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/hard links
- 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?
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
Собеседования, и всё, что с ними связано
Соусы