tgindex

CORTEL

описание

Помогаем ИТ-директорам, DevOps и системным инженерам снижать TCO и поднимать SLA. Кейсы, инструменты и гайды. Сайт: https://cortel.cloud Cотрудничество: @ivan_cmo

4 045
подписчиков
Охват к подписчикам
24,3%
ERR
Реакции к просмотрам
0,99%
298 на 29 постов
Пересылки к просмотрам
1,53%
461
Постов в день
0,3
всего 29

Где отзываются чаще

доля реакций к просмотрам
  • 13 авг.🖥 smartctl — утилита из пакета smartmontools для чтения диагностических данных накопителя через S.M.A.R.T. Диск часто предупреждает о скором отказе заранее: растёт число переназначенных секторов и ошибок чтения, повышается температура. smartctl помогает увидеть эти признаки до того, как дисковый массив перейдёт в состояние отказа. S.M.A.R.T. — это встроенная в накопитель система диагностики. Она собирает данные о его состоянии, а smartctl выводит их в понятном виде ➡️ Основные команды # Общая информация sudo smartctl -i /dev/sda # Краткая оценка состояния sudo smartctl -H /dev/sda # Таблица показателей sudo smartctl -A /dev/sda # Полный отчёт sudo smartctl -a /dev/sda # Запуск короткого самотеста sudo smartctl -t short /dev/sda # Результаты самотестов sudo smartctl -l selftest /dev/sda ➡️ На что смотреть у HDD — Reallocated_Sector_Ct — переназначенные секторы. Рост значения — повод менять диск; — Current_Pending_Sector — секторы, которые не читаются, но ещё не переназначены; — Offline_Uncorrectable — неисправимые ошибки; — UDMA_CRC_Error_Count — ошибки передачи данных. Причина может быть в кабеле или дисковой корзине; — Power_On_Hours — наработка; — Temperature_Celsius — температура. ➡️ У SSD дополнительно проверяют — Wear_Leveling_Count — износ ячеек; — Media_Wearout_Indicator — износ памяти NAND; — Total_LBAs_Written — общий объём записанных данных. ➡️ У NVMe основные показатели — percentage_used — израсходованный ресурс; — available_spare — резерв запасных блоков; — media_errors — ошибки носителя; — critical_warning — критические предупреждения. 😎 Главное — смотреть не только на текущее значение, но и на его изменение. Если число проблемных секторов или ошибок растёт, диск лучше заменить планово, не дожидаясь отказа. #линуксятина2,52%
  • 23 июл.🖥 ip / iproute2 — стандарт для управления сетью в современном Linux. Пришёл на смену устаревшему net-tools (ifconfig, route, arp), которые давно не входят в базовую установку большинства дистрибутивов. Всё, что раньше делалось десятком разных утилит, теперь собрано в одной команде с единым синтаксисом. 🟣 Как устроено? Команда ip работает по схеме: ip [объект] [команда] Где объект — это то, чем управляем (link, addr, route, neigh и т.д.), а команда — действие над ним (show, add, del, set). 🟣 Основные объекты link — сетевые интерфейсы (физические и виртуальные) address (a) — IP-адреса на интерфейсах route (r) — таблица маршрутизации neighbour (n) — ARP/NDP-таблица (соседи) rule — правила policy routing netns — сетевые неймспейсы 🟣 Примеры команд Посмотреть список всех интерфейсов: ip link show Поднять/выключить интерфейс: sudo ip link set eth0 up sudo ip link set eth0 down Посмотреть адреса на интерфейсах: ip addr show 1: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 inet 192.168.1.10/24 brd 192.168.1.255 scope global eth0 Добавить маршрут: sudo ip route add 10.0.0.0/24 via 192.168.1.1 dev eth0 Добавить маршрут по умолчанию: sudo ip route add default via 192.168.1.1 Удалить маршрут: sudo ip route del 10.0.0.0/24 ✔️ iproute2 — это единый интерфейс ко всему сетевому стеку ядра: линки, адреса, маршруты, правила, туннели, неймспейсы. Знание ip вместо разрозненных legacy-утилит экономит время. #линуксятина1,75%
  • 5 авг.💻 HPA: автоскейлинг по метрикам Horizontal Pod Autoscaler (HPA) — встроенный контроллер Kubernetes, который автоматически изменяет количество реплик Deployment, StatefulSet или ReplicaSet в зависимости от текущей нагрузки. Задача HPA — держать нагрузку на под в заданных рамках, не привлекая к этому человека. 🔺 HPA работает в цикле (по умолчанию — раз в 15 секунд): — Получает текущие метрики из metrics-server (или внешнего адаптера метрик, если используются custom/external metrics) — Сравнивает текущее значение метрики со значением, заданным в спецификации HPA — Вычисляет желаемое количество реплик по формуле: desiredReplicas = ceil(currentReplicas * (currentMetricValue / desiredMetricValue)) — Обновляет поле replicas у целевого объекта (Deployment/StatefulSet) Контроллер не действует резко: изменения сглаживаются, а между операциями масштабирования выдерживается пауза (stabilization window), чтобы избежать «дребезга» — постоянных колебаний числа реплик туда-обратно. 🔺 Источники метрик — Resource metrics — CPU и память пода, собираются через metrics-server. Базовый и самый распространённый вариант. — Custom metrics — метрики приложения (например, число запросов в очереди), поставляются через Prometheus или аналогичный адаптер. — External metrics — метрики внешних систем, не привязанные к объектам Kubernetes Минимальная настройка Предполагается, что для пода заданы resources.requests.cpu — без них HPA не сможет посчитать процент утилизации. apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: web-app-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: web-app minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 70 Частые ошибки — Отсутствие requests у контейнеров — метрика Utilization считается относительно запроса ресурсов, без него HPA не сработает — Слишком узкий диапазон minReplicas–maxReplicas — контроллеру физически негде масштабироваться — Игнорирование stabilization window при настройке — резкие пики нагрузки могут вызывать частые колебания без её корректной настройки в behavior — Использование HPA и VPA на одних и тех же метриках ресурсов одновременно — контроллеры начинают конфликтовать между собой HPA закрывает базовый сценарий эластичности — реакцию на изменение нагрузки без ручного вмешательства. Для более тонких сценариев (масштабирование по внешним очередям, множественные метрики, кастомная логика) конфигурация расширяется, но принцип остаётся тем же: контроллер сравнивает текущее состояние с целевым и приводит систему к балансу. #заметкиИнженера1,57%
  • 28 июл.💻 PV, PVC и StorageClass: как под получает диск в Kubernetes Контейнеры по умолчанию эфемерны — при перезапуске пода всё содержимое файловой системы исчезает. Для баз данных, очередей и любых сервисов с состоянием это неприемлемо, поэтому в Kubernetes существует отдельная модель работы с хранилищем, отвязанная от жизненного цикла пода. 🔺Persistent Volume (PV) — Объект кластера, описывающий конкретный кусок хранилища: диск в облаке, LUN, NFS-шару или локальный volume. — Существует независимо от пода — создаётся и удаляется отдельно, имеет свой жизненный цикл. — Содержит параметры реального хранилища: размер, режим доступа, драйвер, точки монтирования. 🔺Persistent Volume Claim (PVC) — Запрос приложения на хранилище: «нужно 10Gi с доступом ReadWriteOnce». — PVC не знает, где физически лежат данные — это уровень абстракции для разработчика. — Kubernetes сопоставляет PVC с подходящим PV (bind), и только после этого том можно смонтировать в под. 🔺 StorageClass — Описывает «класс» хранилища и параметры его создания: тип диска, зону, файловую систему, политику удаления. — Позволяет не создавать PV вручную — при появлении PVC с указанным StorageClass том создаётся автоматически. — Именно StorageClass связывает Kubernetes с конкретным драйвером хранилища через CSI. 🔺 CSI (Container Storage Interface) — Стандартизированный API, через который Kubernetes общается с системами хранения без встроенной поддержки в ядре kubelet. — Каждый провайдер (Ceph, облачный диск, NFS и т.д.) поставляет свой CSI-драйвер как набор подов в кластере. — Драйвер отвечает за создание, подключение (attach) и монтирование (mount) томов по запросу Kubernetes. Как это работает вместе (динамическое провижининг) apiVersion: v1 kind: PersistentVolumeClaim metadata: name: data-pvc spec: storageClassName: fast-ssd accessModes: - ReadWriteOnce resources: requests: storage: 10Gi — Приложение создаёт PVC с указанием StorageClass. — Контроллер провижининга (часть CSI-драйвера) видит PVC без привязанного PV и создаёт новый PV через API стораджа. — Kubernetes связывает созданный PV с PVC (bind). — Под с этим PVC планируется на узел, kubelet через CSI-драйвер выполняет монитрование тома. Без CSI и динамического провижининга администратору пришлось бы вручную создавать PV под каждый запрос приложения. Эта связка убирает ручной шаг и делает хранилище таким же декларативным ресурсом, как Deployment или Service. #заметкиИнженера1,57%
  • 6 авг.🐧 nftables — современный фреймворк для фильтрации пакетов и NAT в Linux, пришедший на смену связке iptables/ip6tables/arptables/ebtables. Зачем менять iptables на nftables — Единый синтаксис для IPv4, IPv6, ARP и Ethernet-фреймов вместо четырёх отдельных утилит — Правила применяются атомарно — нет промежуточного состояния с частично применённым набором — Встроенные структуры данных (sets, maps) вместо десятков однотипных правил — Меньше накладных расходов на большом количестве правил за счёт более эффективной модели обработки в ядре 🟡 Структура: таблицы → цепочки → правила — Таблица (table) — контейнер верхнего уровня, привязан к семейству адресов: ip, ip6, inet (сразу для v4 и v6), arp, bridge, netdev — Цепочка (chain) — набор правил внутри таблицы. Бывает базовой (base chain, подключена к хукам ядра) или обычной — Правило (rule) — конкретное условие + действие (accept, drop, jump, counter и т.д.) Хуки для базовых цепочек: prerouting, input, forward, output, postrouting — те же точки, что и в iptables, но привязка задаётся явно при создании цепочки. 🟡 Базовая структура набора правил table inet filter { chain input { type filter hook input priority 0; policy drop; ct state established,related accept iifname "lo" accept tcp dport 22 accept } } — table inet filter — таблица для v4/v6 с именем filter — chain input — базовая цепочка на хуке input, приоритет 0, политика по умолчанию — drop — ct state established,related accept — разрешить пакеты уже установленных соединений — tcp dport 22 accept — разрешить входящий SSH 🟡 Пример: NAT для проброса порта (DNAT) table ip nat { chain prerouting { type nat hook prerouting priority -100; tcp dport 8443 dnat to 10.0.0.5:443 } chain postrouting { type nat hook postrouting priority 100; oifname "eth0" masquerade } } Входящий трафик на порт 8443 перенаправляется на внутренний сервер 10.0.0.5:443, а masquerade подменяет исходящий адрес для трафика, уходящего через eth0 — типичная схема для VPS с внутренними сервисами за одним внешним IP. 🟡 Полезные команды nft list ruleset nft -f /etc/nftables.conf nft add table inet filter nft flush ruleset nftables — не косметическая замена iptables, а другая модель работы с пакетным фильтром: декларативная, атомарная и заметно менее многословная на нетривиальных наборах правил. #линуксятина1,55%
  • 11 авг.⚠️ Что делать после категорирования объекта КИИ После присвоения категории объект становится частью живого контура: его нужно не только описать в документах, но и постоянно контролировать в эксплуатации. Важно понимать: 🔵 что входит в контур объекта и кто за него отвечает; 🔵 кто имеет доступ и на каком основании; 🔵 какие изменения в инфраструктуре могут повлиять на работу системы; 🔵 как команда узнаёт о сбое, атаке или ошибке; 🔵 где хранятся резервные копии и как будет проходить восстановление; 🔵 когда нужно пересматривать сведения по объекту. 👉 Что меняется после категорирования объекта КИИ и какие требования 187-ФЗ важно учесть дальше — разобрали в новом материале. #статья1,50%
  • 30 июл.⚙️ jq и yq — два похожих инструмента для работы со структурированными данными прямо в терминале: jq для JSON, yq для YAML. Оба решают одну и ту же боль — вытащить, отфильтровать или изменить нужное поле из структуры данных без написания скрипта. 🟢 jq — Принимает JSON на входе, применяет фильтр-выражение, отдаёт результат — тоже JSON (или текст). Базовый синтаксис: команда | jq 'фильтр' Пример исходных данных (response.json): { "status": "ok", "pods": [ {"name": "nginx-1", "ready": true, "restarts": 0}, {"name": "nginx-2", "ready": false, "restarts": 5} ] } Достать конкретное поле: cat response.json | jq '.status' "ok:" Пройтись по массиву и вытащить имена: cat response.json | jq '.pods[].name' "nginx-1" "nginx-2" Фильтрация по условию: cat response.json | jq '.pods[] | select(.ready == false)' { "name": "nginx-2", "ready": false, "restarts": 5 } 🟢 yq — по духу — тот же jq, только для YAML синтаксис фильтров почти идентичен jq. Пример файла (deployment.yaml): apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 3 template: spec: containers: - name: nginx image: nginx:1.25 Достать значение: yq '.spec.replicas' deployment.yaml 3 Сменить образ контейнера: yq -i '.spec.template.spec.containers[0].image = "nginx:1.27"' deployment.yaml 🟢 jq и yq — база для любого, кто работает с API, Kubernetes или CI/CD: они превращают ручной разбор JSON/YAML в одну команду, которую легко засунуть в скрипт. #линуксятина1,48%
  • 21 июл.📝 Шпаргалка по Logging, Tracing и Metrics. Помогает понять, как устроен мониторинг в распределённых системах: что измерять, где искать события и как восстанавливать путь запроса между сервисами. ➡️ Три компонента мониторинга — Metrics (метрики) Числовые показатели системы во времени: загрузка CPU и памяти, RPS, задержка, процент ошибок, количество запросов, доступность сервисов. Метрики хорошо подходят для дашбордов, алертов и быстрой оценки состояния системы. — Logging (логирование) События, которые происходят внутри приложения или инфраструктуры: ошибки, предупреждения, действия пользователя, сбои интеграций, системные сообщения. Логи помогают разбирать конкретные инциденты и понимать, что произошло внутри сервиса. — Tracing (трассировка запросов) Путь одного запроса через несколько сервисов. Особенно полезно в микросервисной архитектуре, где один пользовательский запрос может пройти через API, очередь, базу данных и несколько внутренних сервисов. ➡️ Как это обычно собирается — Метрики сервисов отправляются в базы данных для мониторинга: Prometheus, InfluxDB, VictoriaMetrics — Логи собираются с хостов и приложений, затем передаются в хранилище и систему анализа: Logstash, Elasticsearch, Kibana. — Трейсы собираются через OpenTelemetry: SDK, API, auto instrumentation и OTel Collector. — Дальше данные можно передавать в разные системы анализа и визуализации: Grafana, DataSet, Lightstep, Honeycomb, Jaeger. ➡️ Где что использовать ➡️ метрики — чтобы быстро увидеть состояние системы; ➡️ логи — чтобы разобрать конкретную ошибку; ➡️ трейсы — чтобы проследить путь запроса между сервисами. В рабочей системе эти три слоя обычно используются вместе: метрики показывают отклонение, логи дают детали, а трейсы помогают найти участок, где запрос начал тормозить или завершился ошибкой. #полезное1,32%
  • 13 июл.🇷🇺 Импортозамещение VMware: куда и как переезжать в 2026 году Как перестроить виртуальную инфраструктуру так, чтобы она пережила требования регуляторов, отсутствие западного саппорта, смену поколений железа, рост требований к сети и хранению — и при этом не убила эксплуатацию. Разобрали в новом материале. #статья1,31%
  • 25 маябез подписи1,27%
  • 9 июл.🖥 AWK — мощный язык обработки текста, заточенный под построчный разбор данных по колонкам. Назван по фамилиям создателей (Aho, Weinberger, Kernighan). Незаменим там, где нужно вытащить, отфильтровать или пересчитать данные из таблиц, логов и вывода других утилит. В отличие от grep (ищет строки) и sed (правит текст потоком), AWK мыслит записями и полями. Каждая строка — это запись, разбитая на колонки. Это превращает обработку структурированного вывода (ps, df, /etc/passwd, CSV, логи) в простые однострочники. Программа на AWK — это набор правил вида: awk 'паттерн { действие }' файл — паттерн — условие, при котором срабатывает действие (можно опустить — тогда срабатывает на каждой строке) — действие — что сделать с записью (можно опустить — тогда печатается строка целиком) ➡️ Ключевые встроенные переменные: $0 — вся строка целиком $1, $2, ... — поля (колонки) по порядку NF — количество полей в строке (Number of Fields) NR — номер текущей строки (Number of Records) FS — разделитель полей на входе (по умолчанию — пробелы/табы) OFS — разделитель полей на выходе ➡️ Основные параметры -F — задать разделитель полей (-F: для /etc/passwd, -F, для CSV) -v — передать переменную внутрь программы (-v threshold=80) -f — взять программу из файла, а не из строки 🔵Блоки BEGIN и END BEGIN выполняется до чтения файла, END — после. Удобно для заголовков и итогов. ✅ Примеры Вывести только нужные колонки (имя пользователя и shell из passwd): awk -F: '{print $1, $7}' /etc/passwd root /bin/bash daemon /usr/sbin/nologin Найти процессы, потребляющие больше 50% CPU: ps aux | awk '$3 > 50 {print $2, $11}' Отфильтровать строки лога по коду ответа nginx и посчитать количество 5xx: awk '$9 ~ /^5/ {count++} END{print "5xx errors:", count}' access.log AWK — это полноценный мини-язык. Для разовых однострочников он экономит десятки строк на grep | cut | sort, а в скриптах закрывает всю обработку табличных данных без выхода в Python. #линуксятина1,20%
  • 17 апр.без подписи1,17%