Почему Zsh такой крутой 😍
В стандартных шеллах вроде bash, чтобы поработать со строками, обычно приходится пайпить переменные в
Да, это ломает переносимость скриптов из-за несовместимости с POSIX. Но для интерактивной работы и личных конфигов это на порядок быстрее и удобнее.
Самый полезный модификатор?
Синтаксис такой:
Допустим, нужно передать имя файла (
Используем
Запуск
Как только начинаешь активно использовать модификаторы, назад уже не хочется.
Ещё полезные модификаторы:
И да, снова: переносимость скриптов ограничена из-за несовместимости с POSIX.
👉 DevOps Portal
В стандартных шеллах вроде bash, чтобы поработать со строками, обычно приходится пайпить переменные в
sed, basename и прочие утилиты. В Zsh эта логика встроена прямо в синтаксис расширения переменных.Да, это ломает переносимость скриптов из-за несовместимости с POSIX. Но для интерактивной работы и личных конфигов это на порядок быстрее и удобнее.
Самый полезный модификатор?
:r (root) — отрезает расширение файла.Синтаксис такой:
${file:r}Допустим, нужно передать имя файла (
game.cpp) и чтобы итоговый бинарник назывался так же (game), не прописывая имя дважды.Используем
${1:r}, чтобы автоматически убрать расширение из аргумента. Пример функции в Zsh:function grun() {
# $1 это "game.cpp"
# ${1:r} станет "game"
g++ -Wall -std=c++17 "$1" -o "${1:r}" && ./"${1:r}"
}Запуск
grun main.cpp скомпилирует и сразу запустит main – одним махом.Как только начинаешь активно использовать модификаторы, назад уже не хочется.
Ещё полезные модификаторы:
:e — получить только расширение:a — получить абсолютный путь:h — получить имя родительской директории:t — получить basenameИ да, снова: переносимость скриптов ограничена из-за несовместимости с POSIX.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤5🔥4🌚3🌭1
This media is not supported in your browser
VIEW IN TELEGRAM
Как превратить init-container в sidecar-container?
В Kubernetes 1.28 появилась нативная поддержка sidecar-контейнеров через механизм init-containers.
Это стало возможным благодаря новому полю
Фича основана на концепции "персистентного init-контейнера". Init-container стартует первым, а за счёт
Такой контейнер работает на протяжении всего жизненного цикла Pod’а.
Проще говоря, чтобы превратить init-container в sidecar, достаточно добавить в его спецификацию атрибут:
Это опциональная настройка. Если restartPolicy не указан, контейнер будет работать как обычный init-container.
Нативный sidecar поддерживает поля
Чтобы подробнее разобраться в init-контейнерах и нативных sidecar-контейнерах, читайте статью:
https://devopscube.com/kubernetes-init-containers/
👉 DevOps Portal
В Kubernetes 1.28 появилась нативная поддержка sidecar-контейнеров через механизм init-containers.
Это стало возможным благодаря новому полю
restartPolicy, которое устанавливается в значение "Always".Фича основана на концепции "персистентного init-контейнера". Init-container стартует первым, а за счёт
restartPolicy получает поведение sidecar-контейнера.Такой контейнер работает на протяжении всего жизненного цикла Pod’а.
Проще говоря, чтобы превратить init-container в sidecar, достаточно добавить в его спецификацию атрибут:
restartPolicy: Always
Это опциональная настройка. Если restartPolicy не указан, контейнер будет работать как обычный init-container.
Нативный sidecar поддерживает поля
livenessProbe, readinessProbe и startupProbe. Также можно добавить lifecycle-хуки PostStart и PreStop.Чтобы подробнее разобраться в init-контейнерах и нативных sidecar-контейнерах, читайте статью:
https://devopscube.com/kubernetes-init-containers/
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9
Kide — это платформа наблюдаемости (observability), которая в реальном времени принимает и индексирует логи и метрики, позволяя вам искать, анализировать данные кластеров и приложений и настраивать алерты без ожидания.
GitHub: kide
👉 DevOps Portal
GitHub: kide
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤4
This media is not supported in your browser
VIEW IN TELEGRAM
Как работает NAT?
Несколько устройств внутри сети используют приватные IP-адреса.
Маршрутизатор применяет NAT, чтобы сопоставить их с одним публичным IP-адресом в интернете.
Исходящий трафик → NAT подменяет приватный IP на публичный IP
Входящий ответ → NAT подменяет публичный IP обратно на приватный IP
👉 DevOps Portal
Несколько устройств внутри сети используют приватные IP-адреса.
Маршрутизатор применяет NAT, чтобы сопоставить их с одним публичным IP-адресом в интернете.
Исходящий трафик → NAT подменяет приватный IP на публичный IP
Входящий ответ → NAT подменяет публичный IP обратно на приватный IP
Please open Telegram to view this post
VIEW IN TELEGRAM
😁27❤10🔥4🌚3👍2
Можно ли защитить непреднамеренно открытый порт сервера с помощью файрвола?
Очевидно, что такого вообще не должно было произойти, но это уже случилось. Теперь у вас есть проблема, и при этом нет возможности перезапустить сервис с корректной конфигурацией.
Удачи: https://labs.iximiuz.com/challenges/linux-protect-ports
👉 DevOps Portal
Очевидно, что такого вообще не должно было произойти, но это уже случилось. Теперь у вас есть проблема, и при этом нет возможности перезапустить сервис с корректной конфигурацией.
Удачи: https://labs.iximiuz.com/challenges/linux-protect-ports
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍4
Please open Telegram to view this post
VIEW IN TELEGRAM
😁43🥱8👍5👀2🤯1
Небольшое, но интересное упражнение по отладке Kubernetes — сможете ли вы отредактировать файл в уже запущенном pod’е?
Если задача кажется слишком простой, попробуйте пройти её:
https://labs.iximiuz.com/challenges/edit-file-in-running-kubernetes-pod
Почему-то этот челлендж помечен как «hard»😉
👉 DevOps Portal
Если задача кажется слишком простой, попробуйте пройти её:
https://labs.iximiuz.com/challenges/edit-file-in-running-kubernetes-pod
Почему-то этот челлендж помечен как «hard»
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍2
Кладезь практических материалов по изучению eBPF 🐝
Эта насыщенная иллюстрациями серия от Теодора Подобника поможет вам быстро войти в eBPF-разработку и начать писать собственные программы. Теодор стартует с самых основ и последовательно проводит вас путь от полного нуля в eBPF до написания сначала простых, а затем и гораздо более продвинутых программ:
Серия построена на реальных production-кейcах, а примеры из статей гарантированно компилируются и запускаются вне зависимости от вашего Linux-дистрибутива и версии ядра.
Happy hacking!🚀
👉 DevOps Portal
Эта насыщенная иллюстрациями серия от Теодора Подобника поможет вам быстро войти в eBPF-разработку и начать писать собственные программы. Теодор стартует с самых основ и последовательно проводит вас путь от полного нуля в eBPF до написания сначала простых, а затем и гораздо более продвинутых программ:
От нуля до первого eBPF-приложения
https://labs.iximiuz.com/tutorials/my-first-ebpf-program-5120140e
Хранение данных в eBPF: создаём первую eBPF map
https://labs.iximiuz.com/tutorials/ebpf-maps-tutorial-3efd4617
Инспекция и мониторинг eBPF-приложений
https://labs.iximiuz.com/tutorials/inspecting-ebpf-using-bpftool-43dfa319
eBPF Verifier: почему ядро может безопасно выполнять eBPF-программы
https://labs.iximiuz.com/tutorials/ebpf-verifier-3bd2e199
eBPF-челлендж для начинающих
https://labs.iximiuz.com/challenges/ebpf-beginner-challenge-89ffd924
eBPF Tracepoints, Kprobes или Fprobes: что выбрать?
https://labs.iximiuz.com/tutorials/ebpf-tracing-46a570d1
Почему eBPF-программа работает на одном ядре и падает на другом?
https://labs.iximiuz.com/tutorials/portable-ebpf-programs-46216e54
Разработка по-настоящему переносимых eBPF-программ и BTFHub
https://labs.iximiuz.com/tutorials/truly-portable-ebpf-a7554c66
Разные способы доставки событий ядра из eBPF в user space
https://labs.iximiuz.com/tutorials/user-space-event-delivery-2197d020
Rate limiting сетевого трафика с помощью eBPF/XDP
https://labs.iximiuz.com/tutorials/ebpf-ratelimiting-dbc12915
Практика с XDP: eBPF для высокопроизводительного сетевого стека
https://labs.iximiuz.com/tutorials/ebpf-xdp-fundamentals-6342d24e
Разработка firewall на базе eBPF с матчингом диапазонов IP через LPM trie
https://labs.iximiuz.com/tutorials/ebpf-firewall-ed03d648
С нуля: L4 load balancer на базе eBPF/XDP с использованием NAT
https://labs.iximiuz.com/tutorials/xdp-load-balancer-700a1d74
С нуля: L2 Direct Server Return load balancer на eBPF/XDP
https://labs.iximiuz.com/tutorials/xdp-dsr-layer2-lb-92b02f3e
С нуля: IP-in-IP Direct Server Return load balancer на eBPF/XDP
https://labs.iximiuz.com/tutorials/xdp-dsr-load-balancer-b701a95a
Серия построена на реальных production-кейcах, а примеры из статей гарантированно компилируются и запускаются вне зависимости от вашего Linux-дистрибутива и версии ядра.
Happy hacking!
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2
Прочитай это – и ты больше никогда не забудешь разницу между CMD и ENTRYPOINT в Docker.
Ответ:
🔹 ENTRYPOINT → Думай об этом как об основной команде, которая всегда выполняется при старте контейнера.
🔹 CMD → Это аргументы по умолчанию для этой команды (их можно переопределить при запуске контейнера).
Пример на картинке
➡️ Когда контейнер запускается → он выполняет ping http://google.com
➡️ Если переопределить CMD →
тогда выполнится
Запомни:
- ENTRYPOINT = что запускать
- CMD = с какими аргументами
👉 DevOps Portal
Ответ:
Пример на картинке
docker run myimage http://yahoo.comтогда выполнится
ping http://yahoo.comЗапомни:
- ENTRYPOINT = что запускать
- CMD = с какими аргументами
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26❤5😁2
Как работает контейнерный нетворкинг 🧐
Docker, Podman и Kubernetes (через CRI) под капотом используют очень похожую схему – виртуальную bridge-сеть.
Собрать bridge-сеть с нуля, используя только базовые Linux-утилиты (ip, nsenter, iptables) – отличный способ разобраться в теме на практике:
https://labs.iximiuz.com/tutorials/container-networking-from-scratch
👉 DevOps Portal
Docker, Podman и Kubernetes (через CRI) под капотом используют очень похожую схему – виртуальную bridge-сеть.
Собрать bridge-сеть с нуля, используя только базовые Linux-утилиты (ip, nsenter, iptables) – отличный способ разобраться в теме на практике:
https://labs.iximiuz.com/tutorials/container-networking-from-scratch
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤4
SBOM становится критически важным для DevOps-команд, управляющих современными CI/CD пайплайнами
Вот почему его стоит внедрить каждой команде
Помните уязвимость Log4j? Тогда компании в спешке пытались определить, какие приложения оказались затронуты.
При наличии SBOM (Software Bill of Materials) этот процесс проходит значительно быстрее.
SBOM предоставляет полный инвентарь всех программных компонентов, входящих в состав приложения.
Сюда входят прямые зависимости, транзитивные зависимости, системные библиотеки, сторонние пакеты, а также ключевые метаданные – лицензии и известные уязвимости.
Традиционные файлы зависимостей, такие как
SBOM обеспечивает более глубокую прозрачность, трекинг безопасности и возможности комплаенса, которые стандартные manifest-файлы обеспечить не могут.
Вот подробный гайд по SBOM:
https://newsletter.devopscube.com/p/sbom-what-why
👉 DevOps Portal
Вот почему его стоит внедрить каждой команде
Помните уязвимость Log4j? Тогда компании в спешке пытались определить, какие приложения оказались затронуты.
При наличии SBOM (Software Bill of Materials) этот процесс проходит значительно быстрее.
SBOM предоставляет полный инвентарь всех программных компонентов, входящих в состав приложения.
Сюда входят прямые зависимости, транзитивные зависимости, системные библиотеки, сторонние пакеты, а также ключевые метаданные – лицензии и известные уязвимости.
Традиционные файлы зависимостей, такие как
pom.xml или package.json, дают лишь поверхностное представление о составе проекта.SBOM обеспечивает более глубокую прозрачность, трекинг безопасности и возможности комплаенса, которые стандартные manifest-файлы обеспечить не могут.
Вот подробный гайд по SBOM:
https://newsletter.devopscube.com/p/sbom-what-why
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍6
Поды не "падают" на ноды случайным образом.
В следующем уроке курса "Kubernetes the Very Hard Way" подробно разбирается, как
https://labs.iximiuz.com/courses/kubernetes-the-very-hard-way-0cbfd997/control-plane/kube-scheduler
👉 DevOps Portal
kube-scheduler оценивает каждое размещение с учётом доступных ресурсов, ограничений и политик.В следующем уроке курса "Kubernetes the Very Hard Way" подробно разбирается, как
kube-scheduler работает изнутриhttps://labs.iximiuz.com/courses/kubernetes-the-very-hard-way-0cbfd997/control-plane/kube-scheduler
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍2
В этой статье объясняется, как предотвратить сбои системы, вызванные несбалансированным масштабированием в Kubernetes, используя KEDA с корректной настройкой триггеров и стратегий автоскейлинга
Читайте тут
👉 DevOps Portal
Читайте тут
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍3
Изучите Kubernetes и подготовьтесь к сдаче экзамена Certified Kubernetes Administrator (CKA)
Этот курс разработан, чтобы дать глубокое практическое понимание администрирования K8s – от базовых концепций до продвинутого траблшутинга
https://youtu.be/l57xKN6OBhY?si=ye6hGpF2lezRyvgB
👉 DevOps Portal
Этот курс разработан, чтобы дать глубокое практическое понимание администрирования K8s – от базовых концепций до продвинутого траблшутинга
https://youtu.be/l57xKN6OBhY?si=ye6hGpF2lezRyvgB
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍4🤔1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁34❤8🏆4🌭2🥱1
Вы когда-нибудь использовали
Следующий урок в курсе «Kubernetes the Very Hard Way» разбирает, как kube-apiserver интегрируется в Kubernetes и как он работает под капотом:
https://labs.iximiuz.com/courses/kubernetes-the-very-hard-way-0cbfd997/control-plane/kube-apiserver#overview
👉 DevOps Portal
curl для работы с Kubernetes API или смотрели, что именно сохраняется в etcd после выполнения kubectl apply?Следующий урок в курсе «Kubernetes the Very Hard Way» разбирает, как kube-apiserver интегрируется в Kubernetes и как он работает под капотом:
https://labs.iximiuz.com/courses/kubernetes-the-very-hard-way-0cbfd997/control-plane/kube-apiserver#overview
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤3🤯1
This media is not supported in your browser
VIEW IN TELEGRAM
Быстрый совет по Linux
Во время редактирования файла в nano нажмите
Nano выполнит команду и вставит её вывод в текущий файл – это удобно, когда нужно быстро добавить результат команды или сгенерированный текст прямо в процессе редактирования
👉 DevOps Portal
Во время редактирования файла в nano нажмите
Ctrl + T, чтобы выполнить shell-команду, не выходя из редактора.Nano выполнит команду и вставит её вывод в текущий файл – это удобно, когда нужно быстро добавить результат команды или сгенерированный текст прямо в процессе редактирования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22👀7❤3🤔1
Одна из концепций Istio, которую стоит понимать: HBONE
HBONE расшифровывается как HTTP-Based Overlay Network Environment.
По сути, это механизм, с помощью которого Istio безопасно гоняет трафик внутри Kubernetes-кластера.
Вот что он делает:
HBONE создаёт защищённый туннель, по которому передаётся трафик между сервисными прокси.
До появления HBONE каждое соединение между workload’ами приводило к созданию отдельных соединений между их sidecar-прокси.
С HBONE множество соединений мультиплексируются через один общий защищённый туннель.
Как это работает?
HBONE объединяет три веб-стандарта:
Даже если вы напрямую не администрируете service mesh, как DevOps-инженеру вам важно понимать, как все эти компоненты состыкуются между собой.
Если вы работаете с service mesh, разберитесь в базовых принципах и понимайте, что именно происходит под капотом
Примечание: HBONE существует только внутри экосистемы Istio. Это не стандартный сетевой протокол, который можно встретить в спецификациях TCP/IP или HTTP
👉 DevOps Portal
HBONE расшифровывается как HTTP-Based Overlay Network Environment.
По сути, это механизм, с помощью которого Istio безопасно гоняет трафик внутри Kubernetes-кластера.
Вот что он делает:
HBONE создаёт защищённый туннель, по которому передаётся трафик между сервисными прокси.
До появления HBONE каждое соединение между workload’ами приводило к созданию отдельных соединений между их sidecar-прокси.
С HBONE множество соединений мультиплексируются через один общий защищённый туннель.
Как это работает?
HBONE объединяет три веб-стандарта:
• HTTP/2 — позволяет передавать несколько потоков в рамках одного TCP-соединения
• HTTP CONNECT — используется для построения туннеля поверх существующего соединения
• mTLS (mutual TLS) — шифрует туннель и обеспечивает взаимную аутентификацию сторон
Даже если вы напрямую не администрируете service mesh, как DevOps-инженеру вам важно понимать, как все эти компоненты состыкуются между собой.
Если вы работаете с service mesh, разберитесь в базовых принципах и понимайте, что именно происходит под капотом
Примечание: HBONE существует только внутри экосистемы Istio. Это не стандартный сетевой протокол, который можно встретить в спецификациях TCP/IP или HTTP
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤4