Оптимизация 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-файлы и исключайте их из COPYENV 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
👍7
Aurora поддерживает до 5 read-replicas в разных зонах/регионах с высокой доступностью и кросс-региональным фейловером.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔2
Нет, нельзя изменить DNS у уже запущенного контейнера напрямую через CLI. Но есть обходные способы!
Самый надежный способ — перезапустить контейнер с нужными DNS-серверами
docker run --dns 8.8.8.8 --dns 8.8.4.4 -d my_container
Или задать DNS через
docker network docker network create mynet --dns=1.1.1.1
docker run --net=mynet -d my_container
Можно изменить DNS вручную внутри работающего контейнера
docker exec -it my_container sh
echo "nameserver 1.1.1.1" > /etc/resolv.conf
Можно подключить контейнер к другой сети с нужными DNS:
docker network create mynewnet --dns=8.8.8.8
docker network connect mynewnet my_container
Если контейнер использует сеть хоста (
--network host), можно поменять DNS на хосте: resolvectl dns eth0 8.8.8.8
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
- Producer отправляет сообщение в топик, который разбит на партиции.
- Kafka записывает в лог-файл на диск.
- Consumer читает сообщения, обращаясь к нужной партиции.
- Каждый consumer хранит offset, Kafka ничего не удаляет, пока не истечёт retention.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
В Kubernetes Control Plane — это набор компонентов, которые управляют всей кластерной системой. Он отвечает за контроль над состоянием кластера, управлением узлами (nodes) и развертыванием приложений.
Что делает: Это центральный компонент, предоставляющий API для управления кластером.
Почему нужен: Все взаимодействия, включая добавление/удаление узлов, создание подов и настройку сетей, проходят через API-сервер.
Как работает:
Принимает запросы от пользователей,
kubectl, и других компонентов.Проверяет подлинность запросов и валидирует данные.
Передает команды другим компонентам через REST API.
Что делает: Это распределённое key-value хранилище, которое сохраняет все данные о состоянии кластера.
Почему нужен: Все данные о конфигурации, статусе и метаданных кластера сохраняются в etcd. Если etcd выходит из строя, кластер теряет свою управляемость.
Как работает:
Хранит информацию о подах, конфигурации сетей и статусе всех компонентов.
Поддерживает консенсус между узлами, обеспечивая надёжность данных.
Что делает: Назначает поды на доступные узлы.
Почему нужен: Без планировщика поды не смогут быть развернуты на узлах.
Как работает:
Считывает незапланированные поды из API-сервера.
Анализирует доступные узлы на основе их ресурсов (CPU, память и т.д.).
Назначает узел для каждого пода на основе алгоритмов (например, минимальная загрузка).
Что делает: Управляет контроллерами, которые следят за состоянием ресурсов в кластере.
Почему нужен: Контроллеры — это "надсмотрщики", которые автоматически исправляют отклонения от желаемого состояния.
Как работает:
Включает несколько встроенных контроллеров:
Node Controller: Следит за доступностью узлов.
Replication Controller: Поддерживает нужное количество реплик подов.
Endpoint Controller: Обновляет
Endpoints-объекты.Service Account Controller: Создает учетные записи для сервисов.
Что делает: Управляет интеграцией с облачными провайдерами (например, AWS, GCP).
Почему нужен: Позволяет использовать облачные функции, такие как балансировка нагрузки, управление дисками и маршрутизацией.
Как работает:
Отвечает за создание LoadBalancer.
Управляет постоянными томами (Persistent Volumes), связанными с облачными хранилищами.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
- Пример: клиент шифрует данные публичным ключом сервера, а сервер расшифровывает их своим приватным.
Также используется в TLS-сертификатах, PGP, SSH.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
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
👍2💊1
DNS (Domain Name System) преобразует читаемые доменные имена (например,
Процесс включает:
- запрос к локальному кешу;
- обращение к DNS-рекурсору;
- переход к корневым серверам, затем к серверам доменов верхнего уровня (TLD), затем к авторитетным серверам;
- возврат IP-адреса клиенту.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Terraform стал популярнее, чем SaltStack, потому что он лучше решает задачи управления инфраструктурой как кодом (IaC) и обеспечивает декларативный и удобный подход.
Terraform = управление инфраструктурой (создание виртуальных машин, баз данных, сетей и т. д.).
SaltStack = управление конфигурацией (разворачивание ПО, управление пользователями, файлами и т. д.).
В современном DevOps важнее быстро и гибко создавать инфраструктуру (AWS, Kubernetes, облака).
Salt же больше заточен под настройку серверов, но это стало второстепенным.
Terraform = декларативный язык HCL (HashiCorp Configuration Language)
resource "aws_instance" "web" {
ami = "ami-123456"
instance_type = "t2.micro"
}
Terraform = не требует агентов, просто вызывает API облачных провайдеров.
Salt = требует установки Salt Master и Minion'ов на серверах.
Terraform нативно интегрируется с облаками (AWS, GCP, Azure, Kubernetes).
Salt тоже умеет работать с облаками, но его основное применение – настройка серверов.
- У Terraform больше модулей и провайдеров.
- Salt – сложнее настроить для облаков, и сообщество у него меньше.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊5👍1🔥1
CI заканчивается после:
- успешной сборки,
- прохождения тестов,
- публикации артефактов.
Далее идёт этап доставки (delivery) или развёртывания (deployment) — это уже CD.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Обычно хранятся в каталоге
/var/log. Также многие современные дистрибутивы используют систему журналирования systemd для управления и просмотра логов.Каталог
/var/log содержит логи большинства системных сервисов и приложений. Логи системных сообщений
/var/log/syslog: Содержит общие системные логи. /var/log/messages: Содержит общие системные сообщения (не во всех дистрибутивах).cat /var/log/syslog
less /var/log/syslog
tail -f /var/log/syslog
Логи конкретных сервисов
Apache: /var/log/apache2/ или /var/log/httpd/ Логи доступа: /var/log/apache2/access.log или /var/log/httpd/access_log Логи ошибок: /var/log/apache2/error.log или /var/log/httpd/error_log
tail -f /var/log/apache2/access.log
tail -f /var/log/apache2/error.log
Nginx: /var/log/nginx/ Логи доступа: /var/log/nginx/access.log Логи ошибок: /var/log/nginx/error.log
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log
MySQL: /var/log/mysql/ или /var/log/mysqld.log
tail -f /var/log/mysql/error.log
SSH: /var/log/auth.log или /var/log/secure
tail -f /var/log/auth.log
journalctl — это утилита для просмотра и управления журналами systemd. Она позволяет фильтровать логи по различным критериям, таким как время, сервис и уровень логирования.Основные команды
journalctlПросмотр всех журналов
journalctl
Логов конкретного сервиса
journalctl -u nginx.service
Последних логов и продолжение просмотра в реальном времени
journalctl -f
journalctl -u nginx.service -f
Логов за определённый период
journalctl --since "2024-07-25 12:00:00" --until "2024-07-25 13:00:00"
Логов с определённым уровнем логирования
journalctl -p err
journalctl -p warning
Логи доступа
tail -f /var/log/apache2/access.log
Логи ошибок
tail -f /var/log/apache2/error.log
Логи доступа
tail -f /var/log/nginx/access.log
Логи ошибок
tail -f /var/log/nginx/error.log
Все логи Nginx
journalctl -u nginx.service
Последние логи Nginx в реальном времени
journalctl -u nginx.service -f
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Из release-веток обычно:
- деплой идёт в staging/QA окружение для тестирования;
- после подтверждения — в master, что может инициировать production-деплой.
Это даёт возможность проверить стабильность перед боевым запуском.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
В Linux список дескрипторов файлов можно посмотреть, используя утилиты и команды, которые позволяют работать с процессами и их открытыми файлами. Основным методом является использование файловой системы
/proc, которая содержит информацию о процессах, включая их открытые файловые дескрипторы.Каждый процесс в Linux имеет свой подкаталог в
/proc с идентификатором процесса (PID). В подкаталоге fd хранятся ссылки на открытые дескрипторы файлов.ls -l /proc/$(pidof <имя_процесса>)/fd
Вывод
lrwx------ 1 user user 64 Dec 23 12:00 0 -> /dev/pts/0
lrwx------ 1 user user 64 Dec 23 12:00 1 -> /dev/pts/0
lrwx------ 1 user user 64 Dec 23 12:00 2 -> /dev/pts/0
Команда
lsof (list open files) отображает список всех открытых файлов в системе.lsof -p <PID>
Пример для всех процессов
lsof
Вывод
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 1234 user cwd DIR 8,1 4096 256 /home/user
bash 1234 user rtd DIR 8,1 4096 2 /
bash 1234 user 0u CHR 136,0 0 3 /dev/pts/0
bash 1234 user 1u CHR 136,0 0 3 /dev/pts/0
bash 1234 user 2u CHR 136,0 0 3 /dev/pts/0
Утилита
lsfd (из пакета util-linux) удобна для просмотра файловых дескрипторов.lsfd
Вывод
PID FD TTY TYPE DEVICE SIZE/OFF NODE NAME
1234 0 /dev/pts/0 CHR 136,0 0 3 /dev/pts/0
1234 1 /dev/pts/0 CHR 136,0 0 3 /dev/pts/0
1234 2 /dev/pts/0 CHR 136,0 0 3 /dev/pts/0
Список дескрипторов определенного пользователя:
lsof -u <имя_пользователя>
Список файлов определенного типа (например, сокеты):
lsof -i
Фильтрация по определенному файлу или устройству:
lsof /path/to/file
Определение, какие файлы, сокеты или устройства использует процесс.
Проверка, остаются ли ненужные дескрипторы открытыми.
Диагностика проблем, связанных с блокировкой файлов.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
1. Он регистрируется в GitLab и запускает задачи (jobs) из .gitlab-ci.yml.
2. Работает в разных режимах (shell, Docker, Kubernetes) для выполнения сборок, тестов и деплоя.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Security-тестирование – это процесс проверки системы на уязвимости, угрозы и риски атак. Оно помогает защитить данные и сервисы от хакеров.
- Загружают базу известных уязвимостей (CVE).
- Проверяют систему на наличие этих уязвимостей.
- Используют сигнатурный анализ (по шаблонам) и эвристический анализ (поведенческий).
- Автоматически подставляют вредоносные SQL-запросы (
' OR 1=1 --). - Проверяют, есть ли доступ к базе данных.
- Выполняют дамп данных, если нашли уязвимость.
SELECT * FROM users WHERE username = 'admin' --' AND password = 'password'
- Вставляют вредоносный JavaScript-код в форму ввода.
- Если скрипт исполняется в браузере – уязвимость найдена.
<script>alert('XSS!')</script>- Пробуют тысячи вариантов паролей (
rockyou.txt). - Используют
John the Ripper, Hydra, Hashcat. hydra -l admin -P passwords.txt 192.168.1.1 ssh
Захватывают пакеты сети (
tcpdump, Wireshark). Ищут передаваемые пароли, сессии, токены.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
1. Файловую систему — разбивка данных на блоки, управление метаданными.
2. ОС и драйверы — планируют чтение/запись, оптимизируют доступ.
3. Кэширование — часто используется буферизация в RAM.
4. Контроллер диска — управляет физическим доступом на уровне блоков.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Чтобы посмотреть логи работающего контейнера в Docker, используйте команду:
docker logs <container_id>
или
docker logs <container_name>
следить за логами в реальном времени (как
tail -f): docker logs -f <container_id>
показать только последние N строк:
docker logs --tail 100 <container_id>
добавить метки времени:
docker logs -t <container_id>
Если контейнер запущен через
docker-compose, можно использовать: docker-compose logs -f
или для конкретного сервиса:
docker-compose logs -f <service_name>
journalctl -u docker -f
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
1. livenessProbe
2. readinessProbe
3. startupProbe
Каждая решает свою задачу и настраивается отдельно в манифесте pod'а.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Если вам нужно собирать метрики (нагрузка, ошибки, задержки, бизнес-показатели) с вашего продукта, то вот лучшие инструменты
Prometheus – база данных временных рядов (time-series DB) для хранения метрик.
Grafana – мощная визуализация метрик.
Метрики собираются экспортерами (
node_exporter, blackbox_exporter и т. д.). Данные хранятся в Prometheus.
Grafana показывает красивые графики.
rate(http_requests_total[5m]) # Запросы в секунду за 5 минут
Устанавливается агент на сервер (
zabbix-agent). Сервер собирает метрики и генерирует алерты.Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Выделение ресурсов:
- Использование kubernetes requests/limits, cgroups, namespaces.
- Автоматическое масштабирование под CPU/Memory.
Балансировка нагрузки:
- Внутри кластера — через kube-proxy, kube-dns, Istio, Envoy.
- Наружу — Ingress Controller, L7 балансировщики (Nginx, Traefik), L4 (HAProxy, AWS ALB).
Масштабирование:
- Horizontal Pod Autoscaler по метрикам.
- Vertical Pod Autoscaler для подбора ресурсов.
- Cluster Autoscaler — масштабирует сам кластер.
Оркестрация + наблюдение:
- Prometheus + Grafana для метрик.
- Alertmanager для алертов.
- Tracing (Jaeger, OpenTelemetry).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍1
Максимальное количество адресов оперативной памяти (ОП), с которыми может взаимодействовать процессор, зависит от ширины адресной шины процессора. Адресная шина определяет, сколько уникальных адресов памяти процессор может адресовать.
Количество адресуемых ячеек памяти определяется по формуле:
\text{Максимальное количество адресов} = 2^{\text{ширина адресной шины (в битах)}}
Максимально возможное количество адресов:
2^{32} = 4,294,967,296 \, (\approx 4 \, \text{Гбайт})
Теоретический максимум
2^{64} = 18,446,744,073,709,551,616 \, (\approx 16 \, \text{эксабайт})
Однако современные процессоры обычно поддерживают меньше, например
Архитектура x86-64 (например, Intel и AMD): ограничена 48–57 битами для адресов памяти, что позволяет адресовать от 256 Тбайт до 128 Пбайт.
Производители процессоров могут использовать меньшее количество адресных линий, чтобы снизить сложность и стоимость. Например, современные 64-битные процессоры адресуют только часть 64-битного пространства (например, 48 бит).
Даже если процессор поддерживает большое количество адресов, максимальная память ограничивается количеством слотов памяти и их емкостью на материнской плате.
Некоторые адреса зарезервированы для системных нужд (например, для ввода/вывода или BIOS).
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM