Это подход в Docker:
- Используются несколько FROM в одном Dockerfile.
- Сборка проходит в первом (build stage), финальный образ собирается из второго (final stage) — без лишнего мусора.
Плюсы:
- меньше размер образа;
- разделение логики сборки и выполнения.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Ansible – мощный инструмент для автоматизации, но у него есть серьезные недостатки, особенно при масштабировании.
каждый раз Ansible подключается по SSH и выполняет задачи без предварительного кеширования
что замедляет процесс.
если целевой сервер слабый или без Python, выполнение плейбуков будет медленным.
по умолчанию Ansible выполняет задачи последовательно, что дольше, чем параллельные методы (например, в SaltStack).
yaml
- name: Установка Nginx
hosts: all
tasks:
- name: Установить Nginx
apt:
name: nginx
state: present
Запуск задач параллельно (
-f 50
) sh
ansible-playbook playbook.yml -f 50
Если 1000+ серверов, главный Ansible-узел может быстро перегрузиться.
Роли могут конфликтовать, если версии не совпадают. Ansible Galaxy не такой удобный, как Terraform Registry
Некоторые модули (особенно shell и command) не всегда понимают, применялась ли конфигурация раньше.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
GitOps — это подход, при котором инфраструктура и конфигурация приложений описываются декларативно в Git, а изменения автоматически применяются через CD-процессы. Все действия по управлению кластерами и сервисами происходят через Git, а не вручную. Это улучшает контроль версий, даёт аудит и упрощает откаты.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
В мире корпоративных (Enterprise) межсетевых экранов (firewall) существует множество решений от разных вендоров. Основные из них:
Palo Alto — один из лидеров в сфере NGFW. Он использует глубокий анализ трафика и машинное обучение для выявления угроз.
Контроль трафика на уровне приложений (App-ID)
Инспекция SSL/TLS
Встроенная защита от вредоносных программ (WildFire)
Интеграция с SIEM/SOAR
Cisco Firepower объединяет традиционные возможности Cisco ASA с функциями, полученными после покупки Sourcefire.
IPS/IDS (интеграция с Snort)
Защита от атак нулевого дня
Автоматизация защиты на базе машинного обучения
Полная интеграция с экосистемой Cisco
Fortinet — это NGFW, ориентированный на производительность и безопасность.
Встроенный SD-WAN
Антивирусный сканер и веб-фильтрация
DLP (Data Loss Prevention)
Поддержка IoT и OT-безопасности
Check Point — один из старейших игроков в сфере межсетевых экранов, известный своими решениями безопасности.
Инспекция шифрованного трафика
Защита от APT (Advanced Persistent Threats)
Встроенный Threat Intelligence (ThreatCloud)
- Многослойная защита от DoS/DDoS
Juniper предлагает мощные межсетевые экраны, которые часто используются в телекоммуникациях.
Высокая производительность
Поддержка виртуализации (vSRX)
Гибкая маршрутизация и VPN
Интеграция с AI для автоматического обнаружения угроз
Huawei предлагает сетевые экраны для корпоративного и государственного сектора.
Интеграция с 5G-сетями
Встроенные функции DDoS-защиты
Высокая масштабируемость
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Переход от Junior DevOps к Middle DevOps – это не просто накопление опыта в годах, а рост в глубине знаний, самостоятельности и умении решать сложные задачи.
- Создавать и оптимизировать Docker-образы.
- Понимать принципы
Dockerfile
, docker-compose
. - Работать с
Kubernetes
: деплой, сетевые политики, Helm-чарты. - Уметь описывать инфраструктуру как код (IaC).
- Писать модули Terraform.
- Использовать Ansible для автоматизации настройки серверов.
- Уметь строить сложные пайплайны (авто-тестирование, сборка, деплой).
- Оптимизировать сборку и доставку кода.
- Настроить алерты, дашборды.
- Анализировать логи и находить проблемы.
- Проектировать инфраструктуру с учетом отказоустойчивости и безопасности.
- Использовать сервисы типа
S3
, EC2
, Lambda
, VPC
, IAM
. - Глубокие знания Linux (
systemctl
, iptables
, networking
). - Написание скриптов для автоматизации (
Bash
, Python
). предлагайте улучшения в инфраструктуре.
любая рутинная работа должна быть заменена скриптом или IaC.
DevOps это не только сервера, но и помощь в доставке продукта.
сделайте свой pet-проект с CI/CD, Kubernetes и мониторингом.
DevOps-специалист должен быстро разбираться в новых технологиях.
даже если не ищете работу, это прокачивает вас.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
- Императивный подход к декларативной модели:
- Terraform сравнивает state и .tf.
- Если невозможно обновить — удаляет старый ресурс и создаёт новый.
- Это называется recreate.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
В Prometheus есть 4 типа метрик, которые используются для мониторинга и сбора данных.
Используется для подсчета событий, ошибок, запросов
Значение только увеличивается (нельзя уменьшить)
promql
http_requests_total
Как вывести количество запросов за последние 5 минут
promql
rate(http_requests_total[5m])
Пример экспозиции в приложении
go
httpRequests := prometheus.NewCounter(
prometheus.CounterOpts{
Name: "http_requests_total",
Help: "Total number of HTTP requests",
})
Используется для измерения текущего состояния (температура, RAM, CPU)
Значение может расти и уменьшаться
promql
node_memory_usage_bytes
Как вывести среднюю загрузку CPU за 5 минут
promql
avg(node_cpu_seconds_total)
Пример экспозиции в коде
go
cpuUsage := prometheus.NewGauge(
prometheus.GaugeOpts{
Name: "cpu_usage_percentage",
Help: "Current CPU usage",
})
Используется для измерения длительности, размера запросов
Делит данные по диапазонам (buckets)
promql
http_request_duration_seconds_bucket
Как вычислить среднее время отклика
promql
histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))
Пример в коде
go
requestDuration := prometheus.NewHistogram(
prometheus.HistogramOpts{
Name: "http_request_duration_seconds",
Help: "Histogram of response time for HTTP requests",
Buckets: prometheus.DefBuckets,
})
Показывает среднее, медиану, квантильное распределение
Используется для измерения задержек, времени отклика
promql
http_request_duration_seconds{quantile="0.99"}
Пример в коде:
go
requestSummary := prometheus.NewSummary(
prometheus.SummaryOpts{
Name: "http_request_duration_seconds",
Help: "Summary of response time for HTTP requests",
Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001},
})
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
ICMP не использует порты, потому что это не протокол транспортного уровня, а сетевого уровня. Он работает наравне с IP, и применяется для сообщений об ошибках и диагностике (например, ping, traceroute).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Оптимизация Docker-имеджа (или другого контейнерного имеджа) необходима для уменьшения его размера, ускорения сборки, повышения безопасности и повышения производительности контейнеров.
Почему: Базовый образ сильно влияет на размер. Например,
alpine
занимает ~5 МБ, в то время как ubuntu
или debian
могут превышать сотни мегабайт.Как: Замените базовый образ:
FROM alpine:latest
Почему: Временные файлы, кэш или артефакты сборки занимают место.
Как: Добавьте команды для очистки временных данных:
RUN apt-get update && apt-get install -y curl \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
Почему: Стадия сборки может содержать инструменты, которые не нужны в финальном образе.
Как
# Стадия сборки
FROM golang:1.20 as builder
WORKDIR /app
COPY . .
RUN go build -o app .
# Финальный образ
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/app .
CMD ["./app"]
Почему: Каждый
RUN
, COPY
, ADD
создаёт новый слой. Слишком много слоёв увеличивают размер образа.Как: Объединяйте команды:
RUN apt-get update && apt-get install -y curl wget \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
Почему: Переменные окружения с паролями или токенами могут быть случайно унаследованы.
Как: Используйте Docker secrets или
.env
-файлы и исключайте их из COPY
ENV APP_ENV=production
Почему: Частое скачивание зависимостей замедляет сборку.
Как: Переносите команды загрузки зависимостей ближе к началу:
COPY go.mod go.sum ./
RUN go mod download
Почему: Устаревшие или ненужные зависимости увеличивают размер и могут содержать уязвимости.
Как: Используйте сканеры вроде Trivy или Docker Scan для анализа.
trivy image myimage:latest
# 1. Используем минимальный базовый образ
FROM node:20-alpine as builder
# 2. Устанавливаем зависимости
WORKDIR /app
COPY package*.json ./
RUN npm install
# 3. Копируем код
COPY . .
# 4. Собираем проект
RUN npm run build
# Финальный минимальный образ
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Инфраструктура как код (IaC) — подход, при котором:
- инфраструктура (сети, серверы, доступы) описывается декларативно в коде;
- позволяет повторяемо и версионируемо управлять средой;
- инструменты: Terraform, Ansible, Pulumi.
Это ускоряет развертывание, минимизирует ошибки и упрощает сопровождение.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
DevOps-инженер и SRE (Site Reliability Engineer) — это роли, которые пересекаются в своих задачах, но имеют разные акценты и подходы.
Основная цель: Ускорить и автоматизировать процесс разработки, тестирования и развертывания приложений.
Подход: Сосредоточен на создании и поддержке CI/CD, инфраструктуры как кода (IaC) и инструментах автоматизации.
Фокус: Эффективность процессов разработки. Улучшение взаимодействия между командами разработки (Dev) и эксплуатации (Ops).
Основная цель: Обеспечение стабильности, надежности и производительности системы в продакшене.
Подход: Применяет инженерные подходы и автоматизацию для управления операциями и масштабированием.
Фокус: Стабильность и надежность системы. Мониторинг, устранение сбоев и управление инцидентами.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
- Docker Compose — инструмент для локальной разработки и управления многоконтейнерными приложениями с помощью docker-compose.yml.
- Docker Swarm — это средство оркестрации, позволяющее масштабировать, балансировать и управлять сервисами на кластере машин.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
В Kubernetes есть несколько механизмов, которые могут запретить или ограничить запуск подов на определенных нодах.
Taints – метки на нодах, запрещающие размещение подов, если у них нет соответствующего допуска (Toleration).
Используется для изоляции, приоритизации узлов или резервирования ресурсов.
kubectl taint nodes my-node key=value:NoSchedule
Разрешить конкретному поду запускаться на этой ноде
tolerations:
- key: "key"
operator: "Equal"
value: "value"
effect: "NoSchedule"
Запрещает запускаться на всех нодах, кроме указанных.
Используется для привязки подов к определенным серверам.
spec:
nodeSelector:
disktype: ssd
Позволяет задать гибкие условия (обязательные и предпочтительные).
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: region
operator: In
values:
- us-east-1
Запрещает запуск новых подов, если их уже запущено определенное количество.
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: my-pdb
spec:
maxUnavailable: 3
selector:
matchLabels:
app: my-app
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Используется параметр serial в playbook, который задает количество серверов, на которые применяется роль одновременно. Например, serial: 1 обновляет по одному серверу за раз, что снижает риски при развертывании.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Multi-stage (многоэтапная сборка) — это метод создания Docker-образов, позволяющий уменьшить их размер и повысить безопасность.
удаляем ненужные зависимости из финального образа.
не включаем инструменты сборки в рабочий контейнер.
меньший образ быстрее скачивается и запускается.
собираем приложение в одном окружении, а запускаем в другом.
Допустим, у нас есть приложение на Go. Мы сначала компилируем его в одном контейнере, а затем создаем минимальный образ для запуска.
# Этап 1: сборка
FROM golang:1.20 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp
# Этап 2: минимальный образ для запуска
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/myapp .
CMD ["./myapp"]
При сборке фронтенда мы можем сначала установить зависимости и собрать проект, а затем развернуть его на
nginx
. # Этап 1: сборка приложения
FROM node:18 AS builder
WORKDIR /app
COPY package.json ./
RUN npm install
COPY . .
RUN npm run build
# Этап 2: деплой на nginx
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
2. 3xx (Перенаправление): клиенту нужно выполнить дополнительные действия (например, 301 Moved Permanently).
3. 4xx (Ошибка клиента): ошибка в запросе клиента (например, 404 Not Found).
4. 5xx (Ошибка сервера): сервер не смог обработать запрос (например, 500 Internal Server Error).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Маска подсети (subnet mask) — это число, которое определяет, какая часть IP-адреса относится к сети, а какая — к хостам внутри этой сети.
Пример:
IP-адрес: 192.168.1.10
Маска подсети: 255.255.255.0
В двоичном виде
IP: 11000000.10101000.00000001.00001010 (192.168.1.10)
Маска: 11111111.11111111.11111111.00000000 (255.255.255.0)
Разделять сеть на логические сегменты (разделение на подсети). Определять, находятся ли два устройства в одной сети или им нужен маршрутизатор. Экономить IP-адреса, разбивая сеть на нужное количество хостов.
Если два устройства в одной подсети, они могут общаться напрямую. Если в разных — нужен маршрутизатор.
Вместо маски 255.255.255.0 можно записать /24.
Пример: 192.168.1.10/24 (означает, что первые 24 бита — это сеть).
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Кроме URL и тела (body), у HTTP-запроса есть:
- заголовки (headers) — содержат метаинформацию (тип данных, авторизация, длина и т.д.);
- метод (method) — GET, POST и т.д.;
- параметры запроса (query parameters);
- статус ответа (в ответе сервера).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Это виртуальная файловая система, предоставляющая доступ к информации о процессах и системе в реальном времени. Она не занимает место на диске, так как данные в ней формируются ядром Linux динамически. Эта файловая система называется procfs (процессная файловая система).
Предоставляет информацию о запущенных процессах, ресурсах системы и конфигурации ядра. Позволяет взаимодействовать с ядром, изменять параметры системы и получать данные о состоянии процессов.
Каждый процесс в системе имеет каталог в
/proc
, название которого соответствует его PID (Process ID). В этих каталогах содержится информация о конкретном процессе:/proc/[PID]/cmdline
: Команда, запустившая процесс./proc/[PID]/cwd
: Символическая ссылка на текущую рабочую директорию процесса./proc/[PID]/exe
: Символическая ссылка на исполняемый файл процесса./proc/[PID]/fd
: Директория с открытыми файловыми дескрипторами./proc/[PID]/status
: Детализированная информация о состоянии процесса (UID, GID, память и т.д.)./proc/cpuinfo
Информация о процессоре (модель, частота, количество ядер).
cat /proc/cpuinfo
/proc/meminfo
Информация о памяти (доступная память, кэш, использованная память).
cat /proc/meminfo
/proc/diskstats
: Статистика ввода-вывода для дисков./proc/uptime
: Время работы системы с момента загрузки./proc/loadavg
: Средняя нагрузка на систему за последние 1, 5 и 15 минут./proc/sys
: Содержит настраиваемые параметры ядра. Например, можно изменить значение максимального количества открытых файлов:echo 100000 > /proc/sys/fs/file-max
Некоторые популярные настройки
/proc/sys/net/ipv4/ip_forward
: Управление пересылкой IPv4-пакетов./proc/sys/kernel/pid_max
: Максимальный PID, который может быть назначен процессу./proc/net
:Информация о сетевых соединениях и интерфейсах.
Примеры:
/proc/net/dev
: Статистика сетевых интерфейсов./proc/net/tcp
: Состояние TCP-соединений./proc/devices
: Список всех зарегистрированных устройств (символьных и блочных)./proc/partitions
: Информация о разделах жесткого диска.Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
UNIQUE:
- Применяется для гарантии уникальности значений в столбце или группе столбцов.
- Можно использовать одновременно с NULL, но NULL не считается повтором (в большинстве СУБД).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM