Библиотека девопса | DevOps, SRE, Sysadmin
10.2K subscribers
1.54K photos
75 videos
4 files
2.77K links
Все самое полезное для девопсера в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/25874ec4

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/6798b4e4509aba565
Download Telegram
⚡️ Охота за дубликатами файлов

Иногда на диске копятся одинаковые файлы — архивы, фото, бэкапы. rdfind помогает находить такие дубликаты по содержимому, а не только по имени.

Как работает:

1.Сначала сортирует файлы по размеру.
2. Сверяет первые и последние байты.
3. Проверяет контрольные суммы.
4. Находит клоны и решает, какой оставить «оригиналом».

Примеры:
# Поиск дубликатов в папке ~/Documents
# Ничего не удаляет — только отчёт
rdfind -dryrun true ~/Documents


# Ищет дубликаты в ~/Pictures и заменяет их на hardlink-и
rdfind -makehardlinks true ~/Pictures


Удаление дублей:
rdfind -deleteduplicates true ~/Downloads


Лучшее применение: чистка фотоархивов, бэкапов, NAS-хранилищ. Сначала тестируйте в dry-run, а потом смело освобождайте гигабайты.

➡️ Удалить дубликаты

🐸Библиотека devops'a

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1
💻 Docker теперь запускает целые ОС

Обычно для тестов разных ОС нужны виртуалки, отдельные сервера или dual-boot. Но есть трюк: через Docker можно поднять полноценную систему буквально одной командой.

Контейнер запускается в --privileged режиме и внутри поднимает виртуалку. Подключение к системе идёт через VNC или прямо из браузера.

Пример для Windows:
docker run --privileged -d -p 5999:5999 --name my-win-vm dockur/windows


Через пару минут вы получаете рабочий десктоп.

🐸Библиотека devops'a

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
🚑 Как проверить, жив ли сервис в Kubernetes за одну команду

Обычно, чтобы понять, доступен ли сервис внутри кластера, приходится делать port-forward или искать под с установленным curl. Но есть более короткий путь:
kubectl run curl --rm -it --image=alpine/curl -- -sS myservice.default:8443


👉 А вы чаще используете для диагностики kubectl exec, port-forward или держите отдельный debug-pod?

🐸Библиотека devops'a

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
☸️ Kubernetes Cleanup — когда кластер захламился

Иногда после тестов или экспериментов проще всё удалить и обнулить кластер, чем вычищать ресурсы по одному.

Удалить все ресурсы в namespace:
kubectl delete all --all -n <namespace>


Удалить все ресурсы во всех namespace’ах:
kubectl delete all --all --all-namespaces


Очистить хвосты — ConfigMap, Secrets, PVC, Jobs и т.п:
kubectl delete configmap,secret,pvc,pv,job,cronjob --all --all-namespaces


Удалить все namespace’ы кроме системных:
for ns in $(kubectl get ns --no-headers | awk '!/kube-system|kube-public|kube-node-lease|default/ {print $1}'); do
kubectl delete ns $ns
done


🐸Библиотека devops'a

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41
⚙️ Структурный diff, который понимает код

Разбор изменений скриптов и быстрая интеграция pull request-ов — часть ежедневной рутины. Классические diff-утилиты путаются в кавычках, списках и многострочных изменениях, а ручное разрешение конфликтов ­чаще раздражает, чем помогает.

Difftastic — это инструмент для сравнения файлов, созданный специально для разработчиков, которым важны не просто различия на уровне строк, а осмысленные изменения в коде.

Он построен на базе tree-sitter — парсера, поддерживающего десятки языков программирования, и анализирует файлы на уровне синтаксиса.

Пример использования:
difft simple_1.js simple_2.js


или для git:
difft git main feature-branch


➡️ Сравнить файлы

🐸 Библиотека devops'a

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
1
💻 Обновления и откаты в Kubernetes

Kubernetes делает обновления приложений безопасными благодаря механизму непрерывных обновлений (rolling updates). Это значит, что ваш сервис продолжает работать во время обновления — новые версии запускаются постепенно, а старые останавливаются только после успешного запуска новых.

Как обновить приложение

Обновите образ контейнера командой:
kubectl set image deployment/my-deployment nginx=nginx:1.21


Проверьте, как идёт обновление:
kubectl rollout status deployment my-deployment


Kubernetes хранит историю развёртываний. Откатиться к предыдущей версии очень просто:
kubectl rollout undo deployment my-deployment


🐸 Библиотека devops'a

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🌐 Балансировка нагрузки в Nginx

Nginx предоставляет несколько алгоритмов распределения трафика между серверами. Каждый метод решает конкретные задачи и подходит для разных сценариев.

Round Robin

Запросы поступают на серверы по очереди. Это стандартный метод, который не требует дополнительных директив.
upstream backend {
server 192.168.1.101;
server 192.168.1.102;
}


• Least Connections

Новый запрос направляется на сервер с наименьшим количеством активных подключений. Nginx автоматически отслеживает нагрузку.
upstream backend {
least_conn;
server 192.168.1.101;
server 192.168.1.102;
}


• IP Hash

Запросы от одного IP-адреса всегда попадают на один и тот же backend-сервер. Обеспечивает сохранение сессий без дополнительной синхронизации.
upstream backend {
ip_hash;
server 192.168.1.101;
server 192.168.1.102;
}


• Weight

Более производительные серверы получают больше запросов пропорционально указанному весу.
upstream backend {
server 192.168.1.101 weight=3;
server 192.168.1.102 weight=1;
}


Совет: методы можно комбинировать с параметрами max_fails и fail_timeout для автоматического исключения недоступных серверов из балансировки.

🐸 Библиотека devops'a

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍1
📎 Быстрая диагностика через journalctl

На проде что-то сломалось. Первое что нужно — посмотреть свежие ошибки.

journalctl --since "1 hour ago" | grep -i error


Вытаскивает все записи с ошибками за нужный промежуток. Можно изменить период: «10 minutes ago», «2 hours ago», «today».

🐸 Библиотека devops'a

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
🔒 Как хранить секреты в Terraform

Правило №1: Никогда не хардкодьте секреты. Инфраструктурный код — это тоже код, и к нему применяются те же правила безопасности.

Плохой пример:
resource "aws_db_instance" "database" {
password = "notasecurepassword"
}


Правильный подход:

1. Объявляем переменную в variables.tf:
variable "db_password" {
type = string
}


2. Создаем secrets.tfvars:
db_password = "insecurepassword"


3. Используем переменную:
resource "aws_db_instance" "database" {
password = var.db_password
}


Не забудьте добавить secrets.tfvars в .gitignore

Но это только первый шаг. Хранить секреты в файлах — всё ещё не лучшее решение.

🐸 Библиотека devops'a

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2