TGINSIGHT CHAT
DevOps
@DevOPSitsec
ТехнологииПо всем вопросам- @workakkk @itchannels_telegram - 🔥полезные ит-каналы https://t.me/Golang_google - Golang программирование @golangl - golang chat @GolangJobsit - golang channel jobs @golang_jobsgo - jobs РКН: clck.ru/3FmvZA #VRHSZ
Последние посты
Стр. 38 из 84 · 1,008 постов
Опубликован 2 мая
⚙️ DevOps‑челлендж «Zero‑Downtime? Серьёзно?» Вам выдали репозиторий ShopCat (SaaS‑платформа). Он уже «работает» в Kubernetes‑кластере AWS EKS, собирается GitHub Actions и раскатывается Helm‑чартом. Менеджеры уверяют, что *«релизы без простоя, всё по‑мажору»* — но пользователи получают 502 при каждом деплое. Ваша миссия — найти и устранить скрытую причину даунтайма, не внося изменений в само приложение. 📂 Что есть в репо . ├─ docker/ │ └─ Dockerfile # двухступенчатая сборка ├─ helm/ │ └─ shopcat/ # Chart.yaml + values.yaml + templates/* ├─ k8s/ │ ├─ namespace.yaml │ └─ ingress.yaml # AWS ALB Ingress Controller ├─ .github/workflows/ │ └─ deploy.yml # CI → CD └─ terraform/ ├─ eks.tf ├─ rds.tf └─ outputs.tf ⚠️Подвох № 1 (скрытый таймер) В Dockerfile есть RUN adduser ... с интерактивным sudo‐prompt’ом, который «застревает», но только если кеш Docker‑слоёв инвалидирован (например, при обновлении base‑image). ⚠️Подвох № 2 (невидимая «дырка» в rolling‑update) В шаблоне Deployment: livenessProbe: httpGet: path: /healthz port: 8080 --- readinessProbe: httpGet: path: /healthz port: 8080 * /healthz возвращает 200 даже во время graceful‑shutdown (SIGTERM → 30 с drain). * terminationGracePeriodSeconds = 60, а Ingress ALB считает Pod «живым», пока тот не закроется. * В итоге старый Pod уже не принимает новые запросы, но остаётся в EndpointSlice ещё ±60 секунд. ⚠️Подвох № 3 («сам себе злобный Буратино») Helm‑values указывают образ image: shopcat:latest. GitHub Actions пушит тэгированный :vX.Y.Z, но тэг :latest перезаписывается той же джобой PR‑preview. В production во время canary‑release может внезапно оказаться незамёрженый код Pull‑Request’а. ## 🏆 Задание 1. Настройте pipeline, чтобы: * на каждый PR собирался shopcat:<sha> и катил preview‑релиз в namespace pr‑<num>, * на main пушился shopcat:v<semver>, после чего Helm делал blue/green‑deploy в prod. 2. Измените манифесты так, чтобы во время rolling‑update не было 502/504: * никакого даунтайма, даже если контейнеру нужно 60 с на graceful‑shutdown; * сетевой трафик должен _сначала_ уходить от старых Pod’ов, а _потом_ те выключаются. 3. Ограничьте blast‑radius: превратить latest в «immutable image tag» и запретить Helm обновлять release, если image.tag уже был задеплоен (hint: .Chart.AppVersion + `helm.sh/hook`). 4. Найдите и исправьте «застревающий» шаг в Dockerfile, чтобы кэш всегда использовался, а билд не ждал интерактива. 5. ✅ Предоставьте: * патчи (`.diff`) или PR в репозиторий, * скриншот успешного kubectl rollout status deployment/shopcat ‑‑watch, * краткое Post‑mortem (≤ 300 слов): *«Почему был даунтайм и какой фикс вы сделали»*. ## 💣 Неочевидные ограничения * Нельзя менять исходный код приложения (только инфраструктура). * Кластер prod имеет 2 ноды t3.medium (4 vCPU, 8 GiB) — бюджету больно от лишних replica‑set’ов. * CI‑время — ≤ 5 мин на каждый PR. * Все секреты — только через AWS Secrets Manager; в манифестах не должно быть plaintext. 🔜Решение @DevOPSitsec
Вышла интерсная штука — padws! Это бесконечная онлайн-доска с встроенным редактором кода и терминалом. Поддерживает импорт объектов из VSCode и Cursor. Посмотреть демо можно здесь, а селф-хост версию скачать на GitHub здесь. https://github.com/pad-ws/pad.ws #padws#coding#onlinewhiteboard#selfhost
📌Как Gemini превращает изучение языков в персонализированный опыт: обзор 3 экспериментов. Представьте, что учите язык не по учебникам, а через ситуации, в которых оказываетесь каждый день. Именно эту идею воплотила команда Google в проекте Little Language Lessons— трех экспериментах на базе Gemini API, которые делают обучение живым и контекстным. Первый эксперимент, Tiny Lesson, решает проблему «как сказать это сейчас?». Вы описываете ситуацию — например, «потерял паспорт» — и получаете словарь и фразы в формате JSON. Всё благодаря промптам, где Gemini генерирует структурированные данные: массив терминов с транскрипцией и переводом, а также советы по грамматике. Например, если целевой язык — японский, модель сама определит, нужна ли транскрипция ромадзи, и подготовит материал за 2 API-запроса. Это не просто список слов, а готовый микрокурс под конкретный сценарий. Второй, Slang Hang, убирает «учебникоговорение». Тут Gemini выступает как сценарист: создаёт диалоги на целевом языке с культурными нюансами и сленгом. Все генерируется одним запросом — от контекста сцены до реплик с пояснениями. Пример: диалог продавца и туриста может включать неформальные выражения, которые не найдешь в стандартных учебниках. Правда, иногда модель ошибается или придумывает выражения, так что без проверки носителем не обойтись. Но сам подход — дать пользователю «уши» в реальных разговорах выглядит перспективно, особенно с интеграцией Cloud Translation для мгновенного перевода. Третий, визуальный эксперимент — Word Cam. Наводите камеру на объект, и Gemini не только определяет его (bounding box), но и предлагает слова вроде «подоконник» или «жалюзи». Детекция работает через Gemini Vision, а дополнительные дескрипторы (цвет, материал, примеры употребления) подтягиваются отдельным запросом. Для изучения бытовой лексики почти идеально, хотя точность сильно зависит от качества снимка. Во всех экспериментах задействован Text-to-Speech — озвучка слов и фраз. Но есть нюанс: для редких языков голоса зачастую звучат неестественно или не совпадают с диалектом. Например, выберете мексиканский испанский, а синтезатор выдаст акцент из Мадрида. Разработчики честно признают: это ограничение текущих API, и над ним еще работать. Little Language Lessons — начало переосмысления процесса обучения языкам. Проекту пока не хватает тонкой настройки под лингвистическую специфику (идиомы или региональные диалекты), но основа уже заложена. 🟡Статья @ai_machinelearning_big_data #AI#ML#LLM#Gemini
Опубликован 29 апр.
Zev🔍 Это помощник для работы с терминалом на естественном языке. Он помогает быстро находить нужные команды и сохранять их в избранное, а его простой и понятный интерфейс делает освоение терминала доступным даже для новичков. pip install zev 📌Github @DevopsDocker
Опубликован 28 апр.
5️⃣ коротких и небанальных советов для Linux-администраторов ▪️ 1. Всегда проверяй journalctl вместо dmesg для современных систем - dmesg покажет только сообщения ядра с момента загрузки. - А journalctl -k -b -1 покажет логи ядра предыдущего ребута, что критично при расследовании падений. --- ▪️ 2. Используй ss вместо netstat - netstat устарел и медленнее. - ss -tunap даст быстрее и подробнее информацию о соединениях и сокетах. --- ▪️ 3. Всегда включай `bash`-историю с таймстемпами Добавь в .bashrc: export HISTTIMEFORMAT="%F %T " - Теперь команда history покажет не только команды, но и время их выполнения — незаменимо при расследованиях. --- ▪️ 4. Следи за зомби-процессами правильно - Команда: ps -eo pid,ppid,state,cmd | grep ' Z ' - Поможет быстро находить процессы в состоянии "zombie", которые могут накапливаться и вызывать утечки ресурсов. --- ▪️ 5. Используй nice и ionice для тяжёлых задач - Чтобы не положить систему нагрузкой от tar, rsync или других утилит: nice -n 19 ionice -c2 -n7 tar -czf backup.tar.gz /big/data - Это заставит процесс работать с минимальным приоритетом по CPU и диску. @DevopsDocker
Опубликован 27 апр.
🚨 Задача: «Исчезающий файл Docker-контейнера» У вас есть Docker-контейнер, который запускается с помощью следующей команды: docker run -d --name tricky_container -v /opt/app/logs:/app/logs my-app-image Приложение внутри контейнера ежедневно генерирует важный лог-файл: /app/logs/important.log В течение дня файл корректно пишется и виден в директории на хосте: /opt/app/logs/important.log Но ежедневно ровно в 3:00 ночи файл внезапно исчезает из папки на хосте, хотя приложение продолжает работать без ошибок и даже продолжает писать логи. После перезапуска контейнера утром, файл снова появляется и снова становится видимым на хосте. 🎯 Задача для специалиста: Выяснить причину исчезновения файла ровно в 3:00 ночи. Объяснить, почему приложение продолжает успешно писать лог, хотя на хосте он не виден. Предложить решение, которое предотвращает исчезновение файла. 🔍 Подсказки и ограничения (подвохи): На хосте нет видимых cron-задач и systemd-таймеров, удаляющих файл. Контейнер запускается без рестартов и остается активным круглосуточно. Внутри контейнера тоже нет cron-задач. Docker-контейнеры не пересоздаются автоматически. Подсказка: хостовая папка /opt/app/logs монтируется на сетевой диск (NFS), и у неё есть внешнее резервное копирование с моментальными снимками (snapshots), которые делаются каждую ночь в 3:00. 🔧 Команды и подходы для расследования: Шаг 1: Проверить состояние контейнера docker ps docker inspect tricky_container docker logs tricky_container Шаг 2: Проверить, есть ли файл внутри контейнера docker exec -it tricky_container ls -l /app/logs/ docker exec -it tricky_container tail /app/logs/important.log Шаг 3: Проверить монтирование томов и слои файловой системы docker inspect tricky_container --format '{{json .Mounts}}' | jq Шаг 4: Исследовать NFS-папку и поведение в момент создания snapshot df -hT /opt/app/logs mount | grep nfs Шаг 5: Проверить inode-файл внутри контейнера и на хосте docker exec tricky_container ls -li /app/logs/important.log ls -li /opt/app/logs/important.log 🎲Ответ : Файл исчезает, потому что каждую ночь в 3:00 NFS-сервер создает snapshot папки /opt/app/logs, который включает операцию очистки или пересоздания директории. В результате на хосте директория монтирования получает новый inode, и предыдущий файл перестаёт быть доступен через старый inode, хотя внутри контейнера файл с прежним inode остаётся открыт приложением и продолжает записываться, пока не закрыт. То есть файл есть (открыт процессом приложения в контейнере), но на хосте его inode больше не соответствует новому inode директории, и файл становится «невидимым». ✅ Решение проблемы: Приложению необходимо после каждой операции snapshot заново открывать файлы логов, либо перезапускать контейнер после snapshot. Либо использовать локальное монтирование (local volume) вместо NFS с snapshot, либо настроить snapshot так, чтобы он не менял inode директории. @DevopsDocker
Опубликован 27 апр.
⚡️Легкий способ получать свежие обновления и следить за трендами в разработке на вашем языке. Находите свой стек и подписывайтесь: Python: t.me/pythonl Linux:t.me/linuxacademiya Собеседования DS: t.me/machinelearning_interview Нерйросетиt.me/ai_machinelearning_big_data C++ t.me/cpluspluc Docker: t.me/DevopsDocker Хакинг: t.me/linuxkalii Devops: t.me/DevOPSitsec Data Science: t.me/data_analysis_ml Javascript:t.me/javascriptv C#: t.me/csharp_ci Java:t.me/javatg Базы данных: t.me/sqlhub Python собеседования: t.me/python_job_interview Мобильная разработка: t.me/mobdevelop Golang: t.me/Golang_google React:t.me/react_tg Rust: t.me/rust_code ИИ: t.me/vistehno PHP: t.me/phpshka Android: t.me/android_its Frontend: t.me/front Big Data: t.me/bigdatai МАТЕМАТИКА: t.me/data_math Kubernets: t.me/kubernetc Разработка игр: https://t.me/gamedev Haskell: t.me/haskell_tg Физика: t.me/fizmat 💼 Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy Папка ML: https://t.me/addlist/2Ls-snqEeytkMDgy Папка FRONTEND: https://t.me/addlist/mzMMG3RPZhY2M2Iy 😆ИТ-Мемы: t.me/memes_prog 🇬🇧Английский: t.me/english_forprogrammers 🧠ИИ: t.me/vistehno 🎓954ГБ ОПЕНСОРС КУРСОВ: @courses 📕Ит-книги бесплатно: https://t.me/addlist/BkskQciUW_FhNjEy
Опубликован 27 апр.
🎮 Agones — Kubernetes для игровых серверов. Инструмент решает проблему масштабирования тысячи инстансов для многопользовательских игр , превращая Kubernetes в специализированную платформу для управления игровыми серверами. Проект предлагает не просто деплой через YAML-манифесты, а полноценный жизненный цикл: от health-check до автоматического масштабирования флота серверов под нагрузку. Интеграция с Kubernetes API позволяет matchmaker-системам напрямую запрашивать новые игровые сессии — без кастомных решений. 🤖GitHub @devopsitsec
Опубликован 25 апр.
🐳ctop — этот инструмент предлагает наглядный мониторинг контейнеров прямо в терминале. Ctop выводит метрики CPU, памяти и сети в реальном времени, подсвечивая проблемные контейнеры — например, те, что съели всю оперативку. Интересно, что можно не только смотреть статистику, но и управлять контейнерами: останавливать, перезапускать или заходить внутрь через exec — всё через интуитивное TUI. Под капотом — поддержка Docker и runC, а в планах добавление Kubernetes. Установка занимает одну команду (есть варианты для Linux, macOS и даже Windows через scoop). Для тех, кто не хочет ничего ставить, есть Docker-образ — запускается за секунды. 🔗GitHub @DevopsDocker
Опубликован 23 апр.
🔥Television — это кроссплатформенный, быстрый и расширяемый текстовый интерфейс пользователя (TUI), предназначенный для нечеткого поиска по различным источникам данных! 🌟 Он позволяет быстро находить информацию в файлах, Git-репозиториях, переменных окружения, Docker-образах и других источниках, используя алгоритм нечеткого соответствия. Television разработан с акцентом на простоту расширения и высокую производительность. 🔐 Лицензия: MIT 🖥Github @DevOPSitsec
Опубликован 22 апр.
📚✨ ЛУЧШИЕ игры для изучения языков — ловите подборку годноты, с помощью которой вы заговорите как нейтив-спикер! 🎮Noun Town Изучайте 14 языков (включая японский, арабский и русский) через геймплей: исследуете локации, находите «коробки» со словами, произносите их вслух — и возвращаете цвет городу. Основана на научных методиках запоминания. 🛋️Influent Расслабляющая игра для изучения более 20 языков через предметы в квартире. Узнаёте названия вещей, их формы и цвета, а в мини-игре на скорость тренируете словарный запас через визуальное погружение. 🏙️Lingotopia Иммерсивная сюжетная игра: попадаете в чужой город, постепенно расшифровываете речь жителей и учите язык «на языке контекста». Никаких скучных тестов — только исследования, диалоги и подсказки в окружении. 🕶️Mondly VR: Полное погружение в виртуальной реальности: общаетесь голосом в ситуациях из реальной жизни (кафе, вокзал, отель) с распознаванием речи. Отлично прокачивает навыки говорения и убирает страх диалога. Требуется VR‑шлем. Сохраняйте подборку и прокачивайте языки в игровом формате! 🚀 @DevOPSitsec
👩💻 Kubernetes The Hard Way • На разработку этого гайда было потрачено два года : множество тестов тысячи перезапусков, сотни пересобранных кластеров — все это в одном гайде. Чистый Kubernetes вручную — никакого kubeadm и прочих упрощений. - Удобные алиасы, функции и обёртки для командной строки - Десятки скриптов, проверенных в реальных боевых условиях - Важные нюансы, о которых не рассказывают в стандартных туториалах ➡Введение; ➡Архитектура развертывания ➡Почему «The Hard Way»; ➡Создание инфраструктуры; ➡Базовая настройка узлов; ➡Загрузка модулей ядра; ➡Настройка параметров sysctl; ➡Установка компонентов; ➡Настройка компонентов; ➡Проверка готовности компонентов; ➡Работа с сертификатами; ➡Создание корневых сертификатов; ➡Создание сертификатов приложений; ➡Создание ключа подписи ServiceAccount; ➡Создание всех сертификатов; ➡Создание конфигураций kubeconfig; ➡Создание всех kubeconfig; ➡Проверка блока сертификатов; ➡Создание static pod-ов управляющего контура; ➡Создание всех static pod-ов управляющего контура; ➡Создание static pod-ов ETCD кластера; ➡Запуск службы Kubelet; ➡Проверка состояния кластера; ➡Настройка ролевой модели; ➡Загрузка конфигурации в кластер; ➡Загрузка корневых сертификатов в кластер; ➡Маркировка и ограничение узлов. #Kubernetes#devops#clusters @DevOPSitsec
Hashtags