Когда под (Pod) не работает или ведёт себя странно, нужно уметь его дебажить.
Сначала смотрим, работает ли под вообще
kubectl get pods
Если под запустился, но работает странно, смотрим логи:
kubectl logs pod-name
Если в поде несколько контейнеров:
kubectl logs pod-name -c container-name
Если под перезапускается, а нам нужны старые логи:
kubectl logs pod-name --previous
Смотрим подробную информацию о поде:
kubectl describe pod pod-name
Если под запущен, можно подключиться внутрь и посмотреть файлы, процессы:
kubectl exec -it pod-name -- /bin/sh
Если в контейнере есть только
bash
: kubectl exec -it pod-name -- /bin/bash
Полезные команды внутри контейнера:
ps aux # Смотрим запущенные процессы
netstat -tulnp # Проверяем открытые порты
env # Проверяем переменные окружения
cat /etc/resolv.conf # Проверяем DNS
Если под ведёт себя странно, можно посмотреть его полное описание:
kubectl get pod pod-name -o yaml
Иногда под не запускается из-за нехватки CPU или памяти. Проверяем узел (
node
): kubectl describe node node-name
Если проблема с ресурсами, будет что-то вроде:
Warning FailedScheduling insufficient memory
Если под не может достучаться до сервиса, тестируем сеть:
kubectl exec -it pod-name -- nslookup service-name
kubectl exec -it pod-name -- ping 8.8.8.8
kubectl exec -it pod-name -- curl http://service-name:8080
Если под не стартует, можно запустить дебажный контейнер
kubectl debug pod-name -it --image=busybox
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Unix — это семейство операционных систем, разработанное как многозадачная, многопользовательская система. Он стал основой для многих других ОС (Linux, BSD, macOS) и задал стандарты в системной архитектуре и командной строке.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊9👍2
Это три модели облачных вычислений, которые различаются уровнем предоставляемых услуг и степенью ответственности между пользователем и провайдером.
IaaS предоставляет инфраструктуру как услугу. Пользователь получает доступ к виртуализированным вычислительным ресурсам, таким как серверы, хранилища, сети и операционные системы.
Виртуальные машины, диски, сетевые ресурсы и другие элементы инфраструктуры.
AWS EC2, Google Compute Engine, Microsoft Azure VMs.
Настраивает операционные системы, устанавливает ПО, управляет сетью и обеспечивает безопасность.
Компания разворачивает свои приложения в облаке, используя виртуальные машины и настройку сети по своим потребностям.
PaaS предоставляет платформу для разработки, тестирования и развертывания приложений. Провайдер управляет инфраструктурой, а пользователь сосредотачивается на написании и запуске приложений.
Среду для разработки, включая операционную систему, базы данных, серверы приложений, инструменты разработки и т. д.
AWS Elastic Beanstalk, Google App Engine, Heroku, Microsoft Azure App Service.
Пишет код, тестирует приложения и развертывает их на платформе.
- Пример использования:
Разработчики используют платформу для быстрого развертывания веб-приложений без необходимости управления серверами и сетями.
SaaS предоставляет готовые приложения как услугу. Пользователь просто использует программное обеспечение через интернет.
Полностью готовое приложение, доступное через браузер или клиентскую программу.
Gmail, Microsoft 365, Google Drive, Salesforce, Slack.
Пользуется функциональностью приложения, не заботясь о технической стороне.
Организация использует Google Workspace для корпоративной электронной почты и совместной работы.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2💊1
- Вынести кэш в Redis/Memcached;
- Реплицировать базу и направить SELECT-запросы на слейвы;
- Использовать шардинг;
- Оптимизировать запросы и индексы;
- Перевести тяжёлые отчёты в async-процессы.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6💊2
Чтобы мониторить Docker-контейнеры, нужно отслеживать ключевые метрики, которые помогут определить нагрузку, утечки памяти, падения контейнеров и проблемы с сетью.
CPU (Нагрузка на процессор)
Memory (Использование памяти)
Network (Сетевой трафик)
Disk I/O (Диск и файловая система)
Container Lifecycle (Состояние контейнеров)
% использования CPU контейнером
% CPU в системе и пользователе
Throttling (ограничение CPU)
docker stats --format "table {{.Name}}\t{{.CPUPerc}}"
Метрика в Prometheus (cadvisor)
rate(container_cpu_usage_seconds_total{name="my-container"}[5m]) * 100
RSS (реальная память, используемая процессами)
Cache (используемая кэшированная память)
OOM (Out of Memory kills)
docker stats --format "table {{.Name}}\t{{.MemUsage}}"
Метрика в Prometheus
container_memory_usage_bytes{name="my-container"}
Rx/Tx Bytes (входящий и исходящий трафик)
Количество соединений
docker stats --format "table {{.Name}}\t{{.NetIO}}"
Метрика в Prometheus
rate(container_network_transmit_bytes_total{name="my-container"}[5m])
Количество операций чтения/записи
Объем данных, записанных/прочитанных контейнером
docker stats --format "table {{.Name}}\t{{.BlockIO}}"
Метрика в Prometheus
rate(container_fs_writes_bytes_total{name="my-container"}[5m])
Перезапуски контейнера (Restart Count)
Состояние контейнера (Running, Exited, Dead)
docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Restarts}}"
Метрика в Prometheus
container_start_time_seconds{name="my-container"}
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
- total — общее количество памяти;
- used — занято (включая кеши и буферы);
- free — физически свободно;
- shared — используется совместно;
- buff/cache — используется системой под буферы и кэш;
- available — сколько реально доступно для новых программ без вытеснения.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1
Коды ответа (HTTP status codes) от веб-сервера представляют собой числовые коды, которые отправляются клиенту (обычно веб-браузеру) в ответ на его запрос. Эти коды помогают клиенту понять, что произошло с его запросом: был ли он успешен, произошла ли ошибка, требуется ли дополнительное действие и т.д.
Запрос принят, продолжается обработка.
100 Continue: Сервер получил начальную часть запроса, и клиент должен продолжать.
101 Switching Protocols: Сервер принимает запрос на изменение протокола.
Запрос успешно обработан.
200 OK: Запрос успешно обработан, и сервер возвращает запрошенные данные.
201 Created: Запрос успешно выполнен, и в результате создан новый ресурс.
202 Accepted: Запрос принят для обработки, но обработка еще не завершена.
204 No Content: Запрос успешно выполнен, но сервер не возвращает никакого содержимого.
Для завершения обработки запроса требуется дальнейшее действие со стороны клиента.
301 Moved Permanently: Запрашиваемый ресурс был перемещен на новый постоянный URL.
302 Found: Запрашиваемый ресурс временно доступен по другому URL.
304 Not Modified: Запрашиваемый ресурс не изменился со времени последнего доступа (кэширование).
307 Temporary Redirect: Запрашиваемый ресурс временно доступен по другому URL. Клиент должен использовать исходный метод для нового запроса.
Ошибка в запросе клиента.
400 Bad Request: Сервер не может обработать запрос из-за неверного синтаксиса.
401 Unauthorized: Запрос требует аутентификации.
403 Forbidden: Сервер понял запрос, но отказывается его выполнять.
404 Not Found: Запрашиваемый ресурс не найден на сервере.
405 Method Not Allowed: Метод, указанный в запросе, не разрешен для запрашиваемого ресурса.
409 Conflict: Запрос не может быть выполнен из-за конфликта с текущим состоянием ресурса.
Ошибка на стороне сервера при попытке обработки запроса.
500 Internal Server Error: Общая ошибка сервера. Сервер не может выполнить запрос.
501 Not Implemented: Сервер не поддерживает функциональность, необходимую для выполнения запроса.
502 Bad Gateway: Сервер, действуя как шлюз или прокси, получил неверный ответ от вышестоящего сервера.
503 Service Unavailable: Сервер временно недоступен, обычно из-за перегрузки или технического обслуживания.
504 Gateway Timeout: Сервер, действуя как шлюз или прокси, не дождался ответа от вышестоящего сервера.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5💊1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Для определения размера узла (node) в кластере Kubernetes необходимо собрать информацию о различных ресурсах, таких как количество процессоров (CPU), объем оперативной памяти (RAM) и объем дискового пространства, доступные на узле. Эти данные можно получить с помощью команды
kubectl
.Для начала необходимо получить список узлов в кластере:
kubectl get nodes
Для каждого узла из списка можно получить подробную информацию о ресурсах с помощью команды
kubectl describe node <node-name>
:kubectl describe node <node-name>
Чтобы получить информацию о ресурсах узлов в удобном для обработки формате (JSON или YAML), можно использовать команду
kubectl get node <node-name> -o json
или kubectl get node <node-name> -o yaml
:kubectl get node <node-name> -o json
Пример вывода команды
{
"kind": "Node",
"apiVersion": "v1",
"metadata": {
"name": "node1"
},
"status": {
"capacity": {
"cpu": "4",
"memory": "16384000Ki",
"ephemeral-storage": "100Gi"
},
"allocatable": {
"cpu": "4",
"memory": "16334000Ki",
"ephemeral-storage": "98Gi"
}
}
}
- CPU: Количество процессоров.
- Memory: Объем оперативной памяти (в Ki, где 1 Ki = 1024 байт).
- Ephemeral Storage: Объем временного дискового пространства.
Допустим, узел имеет следующие ресурсы:
- CPU: 4
- Memory: 16334000Ki (примерно 15.58 GiB)
- Ephemeral Storage: 98Gi
Память в Kubernetes часто указывается в КиБ (Kibibytes). Для конвертации в гигабайты (GiB) используется следующая формула:
\text{Memory (GiB)} = \frac{\text{Memory (KiB)}}{1024 \times 1024}
Пример:
\text{Memory (GiB)} = \frac{16334000}{1024 \times 1024} \approx 15.58
В результате, размер узла можно представить как:
CPU: 4
Memory: 15.58 GiB
Ephemeral Storage: 98 GiB
Если необходимо собрать и обработать данные для всех узлов в кластере, можно использовать скрипт. Например, на bash с использованием
jq
для обработки JSON:#!/bin/bash
nodes=$(kubectl get nodes -o json | jq -r '.items[].metadata.name')
for node in $nodes; do
echo "Node: $node"
kubectl get node $node -o json | jq '.status.capacity, .status.allocatable'
echo ""
done
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2💊2
Нет, не рекомендуется. terraform.tfstate не должен храниться в Git или системах контроля версий, потому что:
- Он может содержать чувствительные данные (пароли, IP, токены).
- Возможны конфликты при одновременной работе.
- Отсутствует блокировка (lock) на время операций.
Рекомендуемые варианты:
- Terraform Cloud / Enterprise
- Remote backends: S3 с DynamoDB для блокировки, Azure Blob, GCS
- Использование lock-механизмов и шифрования
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
Это архитектурная модель, разработанная Docker для управления сетями контейнеров. Она описывает, как создаются, управляются и взаимодействуют сетевые компоненты в Docker-контейнерах. CNM служит основой для организации сетей Docker и позволяет подключать контейнеры к различным сетевым средам, обеспечивая гибкость, масштабируемость и безопасность.
Это изолированная среда, где настраиваются сетевые интерфейсы контейнера, такие как IP-адреса, маршруты и DNS. Что включает: veth-пара интерфейсов (виртуальный Ethernet): соединяет контейнер с внешней сетью. Конфигурации маршрутов и сетевых правил.
Точка подключения контейнера к сети. Функции: Обеспечивает контейнеру связь с другими контейнерами или внешними сетями. Соединяет Sandbox с Network.
Логическая сущность, объединяющая Endpoints для обеспечения взаимодействия контейнеров. Типы сетей в Docker:
bridge: Локальная сеть, позволяющая контейнерам взаимодействовать на одном хосте.
host: Контейнеры используют сетевой стек хоста без изоляции.
none: Сеть отключена; контейнер полностью изолирован.
overlay: Распределенная сеть для связи контейнеров на разных хостах.
macvlan: Контейнеры получают прямой доступ к физической сети.
Создается Sandbox, где настраиваются сетевые параметры контейнера.
Создается Endpoint, который подключает контейнер к выбранной сети.
Endpoint добавляется в Network, что позволяет контейнеру взаимодействовать с другими узлами.
Легко подключать контейнеры к различным типам сетей.
Обеспечивает безопасность, изолируя сетевые пространства контейнеров.
CNM поддерживает сторонние плагины для интеграции с другими сетевыми решениями (например, Calico, Flannel).
Позволяет контролировать настройки сети через команды Docker.
docker network create my_bridge
docker run --network my_bridge -d nginx
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥3💊1
Если сервер не пингуется, это не значит, что он не работает – проблема может быть в сети, настройках брандмауэра или самом сервере.
Подойти к серверу и проверить:
Горят ли индикаторы сети (LAN) на сервере?
Реагирует ли на клавиатуру/монитор?
Не завис ли сервер? (Может помочь Hard Reboot).
Проверяем, видит ли наш компьютер MAC-адрес сервера через `arp`.
Запрос ARP
arp -a | grep 192.168.1.100
Если MAC-адрес есть → пакеты доходят до сервера, но он не отвечает.
Если MAC-адреса нет → возможны проблемы с сетью (кабель, порт, VLAN, DHCP, статика).
Дополнительно проверить соединение
ethtool eth0 # Проверить состояние сетевого адаптера
ip link show eth0 # Интерфейс должен быть UP
Если
ping
отключен (ICMP заблокирован брандмауэром), но сервер работает, попробуем другие протоколы. Пробуем зайти по SSH (если это Linux)
ssh user@192.168.1.100
Пробуем зайти по RDP (если это Windows)
rdesktop 192.168.1.100
Пробуем зайти через HTTP (если там веб-сервер)
curl -I http://192.168.1.100
Подключаемся к серверу (если возможно) и проверяем, есть ли у него сеть.
Проверяем IP-адрес сервера
ip a
или
ifconfig -a
Пробуем пропинговать шлюз с сервера
ping 192.168.1.1
Если сервер не отвечает на ICMP, его может блокировать брандмауэр.
Linux (firewalld, iptables, ufw)
iptables -L -n | grep DROP # Проверяем правила iptables
ufw status # Проверяем UFW (если используется)
firewall-cmd --list-all # Проверяем firewalld
Если ICMP запрещен → разрешаем его
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
ufw allow proto icmp
firewall-cmd --add-icmp-block=echo-reply --permanent
firewall-cmd --reload
Windows (Проверить ICMP в брандмауэре Windows)
netsh advfirewall firewall show rule name="File and Printer Sharing (Echo Request - ICMPv4-In)"
Если правило отключено → включаем
netsh advfirewall firewall add rule name="ICMP Allow" protocol=icmpv4:8,any dir=in action=allow
Если сервер и клиент находятся в разных VLAN или подсетях, проверяем маршрут.
На клиенте
traceroute 192.168.1.100 # Linux
tracert 192.168.1.100 # Windows
Проверить маршруты на сервере
ip route show
Если маршрут отсутствует → добавляем вручную
ip route add 192.168.1.0/24 via 192.168.1.1
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
- Velero — стандартный инструмент бэкапа Kubernetes:
- Бэкап объектов + PVC.
- Поддержка S3/MinIO.
- Etcdctl snapshot — если бэкапить etcd вручную.
- Kasten K10, Trilio, Stash — коммерческие и open-source альтернативы.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍4
Если при создании файла в Linux появляется ошибка, что места нет, но
df -h
показывает свободное место, проблема может быть в следующем: Inodes – это структуры, которые хранят метаданные о файлах. Даже если есть свободное место, но inodes кончились, новые файлы создать нельзя.
df -i
Найти каталоги с множеством маленьких файлов:
find /path -xdev -type f | wc -l # Количество файлов в каталоге
В системе могут быть настроены дисковые квоты, которые ограничивают использование диска для пользователя или группы.
quota -v
В системе может быть несколько дисковых разделов (
/
, /var
, /home
и т. д.). Если один из них заполнен, в него нельзя записывать файлы. df -hT
Если файловая система перешла в режим «только для чтения» (read-only) из-за ошибки или сбоя, запись на неё невозможна.
mount | grep ' ro,'
Если файловая система смонтирована с `ro`, значит, запись запрещена. Перемонтировать диск:
mount -o remount,rw /path
Проверить диск на ошибки:
dmesg | tail -20 # Лог ошибок
fsck /dev/sdX # Проверка диска
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
В iptables есть несколько таблиц, каждая отвечает за свою цель:
- filter — основная таблица для разрешения/запрета трафика.
- nat — используется для трансляции адресов (SNAT, DNAT, маскарадинг).
- mangle — модификация пакетов (TTL, приоритет и т.п.).
- raw — используется для исключения пакетов из connection tracking.
- security — дополнительная таблица для меток SELinux (редко используется).
Наиболее часто используются filter и nat.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊2🔥1
HTTP (HyperText Transfer Protocol) — это протокол передачи данных в интернете. Он используется для обмена данными между клиентом (браузером) и сервером.
Браузер отправляет запрос →
"GET /index.html HTTP/1.1"
. Сервер отвечает → HTML-страницей (
200 OK
). Браузер отображает страницу.
Клиент-серверная модель → браузер запрашивает, сервер отвечает.
Без состояния (stateless) → каждый запрос независим (нет сессий).
Текстовый протокол → данные передаются в читаемом формате.
Пример запроса от браузера к серверу
GET /index.html HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Используйте команду nslookup <домен> или dig <домен> для получения IP-адреса через DNS. Также можно использовать ping <домен> для получения IP-адреса, к которому идёт запрос.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6💊3🔥1
Это системный механизм в Astra Linux (и некоторых других дистрибутивах на базе Debian), который убивает "долгоиграющие" процессы, потребляющие слишком много ресурсов. Он предотвращает зависания системы и защищает от неэффективного использования вычислительных мощностей.
Long Killer анализирует процессы и завершает те, которые:
Запущены от обычного пользователя (не root).
Работают слишком долго (по умолчанию >10 минут).
Потребляют много CPU (по умолчанию >90% CPU).
Используют много памяти (если система близка к OOM – Out of Memory).
Не имеют активности (зависли, например, ожидание ввода).
Он не убивает root-процессы.
Системные службы (например,
sshd
, systemd
) остаются нетронутыми. Если процесс выполняется интерактивно (например, работа в
vim
или nano
), он обычно не трогает его. Если подозреваете, что ваш процесс завершился из-за Long Killer, посмотрите логи
journalctl -u long-killer.service --no-pager | tail -n 20
Также можно проверить
dmesg
dmesg | grep "killed by Long Killer"
Файл конфигурации находится здесь
/etc/long-killer.conf
Пример настроек
MAX_CPU_USAGE=90 # Максимальная загрузка CPU (%)
MAX_EXEC_TIME=600 # Максимальное время выполнения (секунды)
EXCLUDE_USERS=root # Не убивать процессы от root
После изменения перезапустите сервис
systemctl restart long-killer.service
Чтобы полностью отключить Long Killer
systemctl stop long-killer.service
systemctl disable long-killer.service
Запуск от
root
(если это безопасно): sudo my_long_process
Снижение приоритета процесса (nice/renice)
nice -n 10 my_process
renice -n 10 -p <PID>
Использование
nohup
или screen
для фоновых задач nohup my_script.sh &
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
Для монтирования диска используется команда, которая связывает файловую систему диска с директорией в системе. После монтирования содержимое диска становится доступным в указанной точке монтирования.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
1💊22👍2