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

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

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

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

РКН: https://gosuslugi.ru/snet/6798b4e4509aba565
Download Telegram
🔥 Держим приложение всегда готовым к запросам

Холодный старт — это когда платформа создаёт новый контейнер для вашей функции с нуля. Надо загрузить код, поднять рантайм, инициализировать библиотеки, открыть соединения. Всё это может занять от 500 мс до нескольких секунд.

Проблема не в том, что это происходит — это нормально. Проблема когда это происходит прямо во время запроса пользователя.

Тёплый пул держит нужное количество инстансов постоянно прогретыми. Платформа их уже запустила, код загружен, зависимости инициализированы. Запрос попадает в уже работающий контекст.

Настройка в Kubernetes

Базовый Deployment с фиксированным числом реплик:
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-service
spec:
replicas: 3 # всегда 3 пода
selector:
matchLabels:
app: api
template:
metadata:
labels:
app: api
spec:
containers:
- name: api
image: registry.example.com/api:latest


С автомасштабированием, но с минимумом подов:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: api-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: api-service
minReplicas: 3 # минимум всегда тёплых
maxReplicas: 20 # максимум при нагрузке


K8s держит указанное количество подов всегда запущенными. Если приходит больше запросов — HPA создаёт дополнительные поды. Но первые запросы всегда попадут в прогретые.

Сколько реплик держать

• 2-3 реплики — если у вас стабильный трафик
• 5-10 реплик — для критичных API с непредсказуемыми всплесками
• По реплике на availability zone — если распределяете нагрузку по зонам

Не держите 50 реплик на всякий случай. Смотрите в метрики:
kubectl top pods -l app=api


Тёплый пул — это способ сделать так, чтобы пользователи не замечали холодные старты.

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

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🥱1
👀 Смотреть на весь файл сразу

Tino — простая CLI-тулза, которая показывает весь текстовый файл целиком в одном окне терминала, разбивая его на колонки.

Чтобы её использовать нужно лишь написать в терминале:
tino имя_вашего_файла


Проект был написан на чистом Си и не зависит ни от каких библиотек. Для такого уровня нужны фундаментальные знания, которые есть на нашем интенсиве по архитектуре. До конца октября ещё и со скидкой.

➡️ Попробовать Tino

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

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🖥 Как задеплоить Elasticsearch

Elasticsearch — движок для поиска и аналитики в реальном времени. Разбираемся, как быстро развернуть его для логов, метрик и мониторинга.

Быстрый старт с Docker Compose

Самый простой способ поднять Elasticsearch локально или в dev-окружении — Docker Compose:
version: '3.8'

services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
container_name: elasticsearch
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- "ES_JAVA_OPTS=-Xms2g -Xmx2g"
ports:
- "9200:9200"
- "9300:9300"
volumes:
- esdata:/usr/share/elasticsearch/data
ulimits:
memlock:
soft: -1
hard: -1

kibana:
image: docker.elastic.co/kibana/kibana:8.11.0
container_name: kibana
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
ports:
- "5601:5601"
depends_on:
- elasticsearch

volumes:
esdata:
driver: local


Production-ready deployment

Для прода нужны дополнительные настройки, как минимум мультинодовый кластер:
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
environment:
- node.name=es01
- cluster.name=prod-cluster
- discovery.seed_hosts=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- xpack.security.enabled=true
- "ES_JAVA_OPTS=-Xms4g -Xmx4g"
volumes:
- esdata01:/usr/share/elasticsearch/data

es02:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
environment:
- node.name=es02
- cluster.name=prod-cluster
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- xpack.security.enabled=true
volumes:
- esdata02:/usr/share/elasticsearch/data

es03:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
environment:
- node.name=es03
- cluster.name=prod-cluster
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- xpack.security.enabled=true
volumes:
- esdata03:/usr/share/elasticsearch/data


Частые проблемы и решения

Out of memory:

• Проверьте настройки heap: не более 50% RAM
• Используйте ulimit -l unlimited для memlock

Медленные запросы:

• Оптимизируйте маппинги индексов
• Используйте index lifecycle management
• Настройте правильное количество шардов

Проблемы с дисковым пространством:

• Включите ILM для автоматической ротации индексов
• Настройте retention policy для старых данных
• Используйте _forcemerge для оптимизации

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

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
👨‍💻 AI-агенты меняют подход к анализу логов в DevOps

Приложение упало в продакшене. Вы открываете Kibana, ищете ошибки вручную, переключаетесь между сервисами. Уходит 30-40 минут, иногда больше.

Скрипты находят только то, что вы в них прописали. Elasticsearch и Splunk не умеют автоматически связывать события из разных сервисов. AI-агент анализирует логи сам, находит корреляции и объясняет: «Утечка памяти в payment-сервисе привела к каскадным падениям. Такое уже было 15 сентября».

Внутри — разбор шести компонентов AI-агента: роль, задачи, инструменты для запросов, память для паттернов, ограничители безопасности. Плюс пример, как агент находит проблему с индексом в базе за несколько минут вместо получаса.

➡️ Прочитать статью

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

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
0️⃣ Калькулятор для сравнения облака и собственной инфраструктуры

Когда нужно решить, где разворачивать инфраструктуру — в облаке или на своих серверах — начинается головная боль. Цифры нужны точные, но переменных слишком много: железо, электричество, зарплаты, лицензии, безопасность. Excel быстро превращается в хаос.

InfraWise — открытый инструмент, который считает полную стоимость владения (TCO) для облачной и on-premise инфраструктуры.

Он учитывает больше 80 параметров: от стоимости электроэнергии и GPU до затрат на compliance: SOC 2, HIPAA, GDPR и человеческие ресурсы.

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

➡️ Посчитать затраты

С нашим курсом по Python не нужно считать затраты, потому что он со скидкой в 40% до конца октября!

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

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
🆚 /etc/hosts или /etc/resolv.conf

Оба отвечают за преобразование имён в IP-адреса, но работают по-разному.

/etc/hosts — локальная таблица

Это обычный текстовый файл со списком соответствий IP → имя хоста. Система проверяет его первой, ещё до обращения к DNS-серверам.

Формат:
127.0.0.1       localhost
192.168.1.10 myserver.local myserver
10.0.0.5 database.prod



Когда использовать:
- Нужно быстро переопределить адрес, например, направить домен на локальный сервер для тестирования
- Заблокировать нежелательный сайт через 127.0.0.1 ads.example.com
- В небольших сетях без DNS-сервера

Изменения применяются мгновенно, без перезапуска сервисов.

/etc/resolv.conf — настройки DNS

Этот файл указывает системе, к каким DNS-серверам обращаться для разрешения имён, которых нет в /etc/hosts.

Формат:
nameserver 8.8.8.8
nameserver 1.1.1.1
search company.local


Параметры:

nameserver — адрес DNS-сервера (можно указать несколько)
search — домен для автоподстановки, например, запрос server превратится в server.company.local
options — дополнительные настройки вроде таймаутов

Важно: многие современные системы генерируют этот файл автоматически через NetworkManager или systemd-resolved. Ручные правки могут быть перезаписаны.

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

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
🧹 Kubernetes housekeeping

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'


Чистый кластер — счастливый кластер.

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

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍1
🐋 Отладка Docker-сборок в Visual Studio Code

Теперь вы можете отлаживать Dockerfile прямо в VS Code, как обычный код.

Что умеет новый отладчик

• Ставьте брейкпоинты на любую инструкцию RUN в Dockerfile и останавливайте сборку именно в этом месте.

• Смотрите все переменные окружения, аргументы сборки, рабочую директорию и другие параметры прямо в панели Variables.

• Исследуйте структуру файлов внутри образа на любом этапе сборки. Видите, что скопировалось, что нет, и даже можете просматривать содержимое текстовых файлов.

• Когда сборка приостановлена на брейкпоинте, введите команду exec в Debug Console — и вы получите живой shell внутри образа, который сейчас собирается.

➡️ Попробовать фишки

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

#арсенал_инженера
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), а не оставляйте автоматические номера — так проще найти нужную.

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

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥71