🧹 Kubernetes housekeeping
Kubernetes по умолчанию не удаляет завершённые поды автоматически. И это имеет смысл — логи можно посмотреть, причину падения изучить, отладить проблему.
Но когда таких подов сотни или тысячи, кластер превращается в свалку:
Как почистить кластер
Удалить все Completed поды:
Или проще, если у вас kubectl 1.24+:
Удалить все Failed поды:
Удалить Evicted поды
Тут хитрее, потому что Evicted — это не phase, а reason:
Удалить всё разом:
Чистый кластер — счастливый кластер.
🐸  Библиотека devops'a
#арсенал_инженера
Kubernetes по умолчанию не удаляет завершённые поды автоматически. И это имеет смысл — логи можно посмотреть, причину падения изучить, отладить проблему.
Но когда таких подов сотни или тысячи, кластер превращается в свалку:
$ kubectl get pods -A | grep -E 'Completed|Error|Evicted' | wc -l
847
Как почистить кластер
Удалить все Completed поды:
kubectl get pods -A --field-selector=status.phase==Succeeded \
-o json | jq -r '.items[] | "\(.metadata.namespace) \(.metadata.name)"' \
| xargs -n2 bash -c 'kubectl delete pod -n $0 $1'
Или проще, если у вас kubectl 1.24+:
kubectl delete pods --all-namespaces \
--field-selector=status.phase==Succeeded
Удалить все Failed поды:
kubectl delete pods --all-namespaces \
--field-selector=status.phase==Failed
Удалить Evicted поды
Тут хитрее, потому что Evicted — это не phase, а reason:
kubectl get pods -A -o json | \
jq -r '.items[] | select(.status.reason=="Evicted") | "\(.metadata.namespace) \(.metadata.name)"' | \
xargs -n2 bash -c 'kubectl delete pod -n $0 $1'
Удалить всё разом:
kubectl get pods -A -o json | \
jq -r '.items[] |
select(.status.phase=="Succeeded" or .status.phase=="Failed" or .status.reason=="Evicted") |
"\(.metadata.namespace) \(.metadata.name)"' | \
xargs -n2 bash -c 'kubectl delete pod -n $0 $1 --ignore-not-found=true'
Чистый кластер — счастливый кластер.
#арсенал_инженера
Please open Telegram to view this post
    VIEW IN TELEGRAM
  ❤6👍1
  🐋 Отладка Docker-сборок в Visual Studio Code
Теперь вы можете отлаживать Dockerfile прямо в VS Code, как обычный код.
Что умеет новый отладчик
• Ставьте брейкпоинты на любую инструкцию RUN в Dockerfile и останавливайте сборку именно в этом месте.
• Смотрите все переменные окружения, аргументы сборки, рабочую директорию и другие параметры прямо в панели Variables.
• Исследуйте структуру файлов внутри образа на любом этапе сборки. Видите, что скопировалось, что нет, и даже можете просматривать содержимое текстовых файлов.
• Когда сборка приостановлена на брейкпоинте, введите команду
➡️  Попробовать фишки
🐸  Библиотека devops'a
#арсенал_инженера
Теперь вы можете отлаживать Dockerfile прямо в VS Code, как обычный код.
Что умеет новый отладчик
• Ставьте брейкпоинты на любую инструкцию RUN в Dockerfile и останавливайте сборку именно в этом месте.
• Смотрите все переменные окружения, аргументы сборки, рабочую директорию и другие параметры прямо в панели Variables.
• Исследуйте структуру файлов внутри образа на любом этапе сборки. Видите, что скопировалось, что нет, и даже можете просматривать содержимое текстовых файлов.
• Когда сборка приостановлена на брейкпоинте, введите команду
exec в Debug Console — и вы получите живой shell внутри образа, который сейчас собирается.#арсенал_инженера
Please open Telegram to view this post
    VIEW IN TELEGRAM
  🔥10
  screen — это программа, которая не даёт вашим командам на сервере прерваться, если интернет пропал или вы закрыли терминал.Как пользоваться
Создать новую сессию:
screen -S my-task
Теперь вы внутри screen. Запускайте команды как обычно.
Выйти из сессии (она продолжит работать):
Нажмите
Ctrl+A, отпустите, потом нажмите DПосмотреть все запущенные сессии:
screen -ls
Вернуться в сессию:
screen -r my-task
Открыть ещё одну вкладку внутри screen:
Ctrl+A, потом CПереключаться между вкладками:
Ctrl+A, потом N — следующая вкладкаCtrl+A, потом P — предыдущая вкладкаCtrl+A, потом цифра (0, 1, 2...) — конкретная вкладкаУбить конкретную сессию:
screen -X -S 12345 quit
Лайфхак: всегда давайте сессиям понятные имена (-S backup, -S deploy), а не оставляйте автоматические номера — так проще найти нужную.
#арсенал_инженера
Please open Telegram to view this post
    VIEW IN TELEGRAM
  🔥7❤1
  Неинформативные логи типа «Error!» затрудняют отладку. В проде поиск проблемы занимает часы.
Решение: 6-значная система кодирования
01 01 03
│ │ └─ Тип ошибки
│ └──── Сервис
└─────── Модуль
Первые 2 цифры — модуль:
01 — User
02 — Shipping
03 — Order
04 — Payment
05 — Notification
Средние 2 цифры — сервис:
01 — Database
02 — External API
03 — Payment Gateway
04 — Cache
05 — Queue
Последние 2 цифры — тип:
01 — Configuration
02 — Authentication
03 — Timeout
04 — Validation
05 — Not Found
Уровни серьёзности:
Low — информационные сообщения, не требуют действий
Medium — влияют на UX, требуют исправления
High — нарушают работу функционала
Critical — полный отказ системы, требуют немедленной реакции
Как выглядит лог в Json:
{
  code: '010103',           // Код ошибки
  level: 'Medium',          // Уровень
  message: 'Clear text',    // Описание
  timestamp: '2025-10-29T...',
  
  // Контекст
  userId: 12345,
  requestId: 'req-abc-123',
  service: 'UserService',
  
  // Технические детали
  stack: error.stack,
  duration: 3450
}Минимальный старт
1. Определите 3-5 основных модулей
2. Создайте таблицу кодов
3. Добавьте структурированное логирование в критичные места
4. Настройте алерты на Critical
5. Постепенно расширяйте покрытие
Наши курсы построены по тому же принципу: чёткая структура, конкретные практические примеры, измеримые результаты. 3 дня до конца скидок!
#арсенал_инженера
Please open Telegram to view this post
    VIEW IN TELEGRAM
  