<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Kubernetes: 20 задач on Меланхоличный блог</title><link>https://notes.melancholic.tech/projects/kubernetes-challenges/</link><description>Recent content in Kubernetes: 20 задач on Меланхоличный блог</description><generator>Hugo</generator><language>ru-RU</language><lastBuildDate>Thu, 20 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://notes.melancholic.tech/projects/kubernetes-challenges/index.xml" rel="self" type="application/rss+xml"/><item><title>Задача 1. Сколько endpoints у Service</title><link>https://notes.melancholic.tech/projects/k8s-challenge-01-endpoints/</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><guid>https://notes.melancholic.tech/projects/k8s-challenge-01-endpoints/</guid><description>Deployment на три реплики, Service поверх него — сколько адресов окажется в списке endpoints? Разбираем связь селектора, готовности подов и EndpointSlice.</description></item><item><title>Задача 2. Под удалён, трафик идёт: анатомия graceful shutdown</title><link>https://notes.melancholic.tech/projects/k8s-challenge-02-shutdown/</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><guid>https://notes.melancholic.tech/projects/k8s-challenge-02-shutdown/</guid><description>При удалении пода часть запросов падает с ошибкой, хотя приложение корректно обрабатывает SIGTERM. Разбираем, почему удаление из endpoints и остановка контейнера идут параллельно, а не последовательно.</description></item><item><title>Задача 3. Requests, limits и три класса QoS</title><link>https://notes.melancholic.tech/projects/k8s-challenge-03-qos/</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><guid>https://notes.melancholic.tech/projects/k8s-challenge-03-qos/</guid><description>Два пода с одинаковым потреблением, но разными манифестами — при нехватке памяти на ноде выживет один. Разбираем, чем requests отличаются от limits и как из них получаются классы Guaranteed, Burstable и BestEffort.</description></item><item><title>Задача 4. Общий кластер на несколько команд</title><link>https://notes.melancholic.tech/projects/k8s-challenge-04-multitenancy/</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><guid>https://notes.melancholic.tech/projects/k8s-challenge-04-multitenancy/</guid><description>Одна команда выкатила релиз — легли сервисы соседей, хотя namespace&amp;rsquo;ы разные. Разбираем, что namespace изолирует, а что нет, и какой минимум ограничений закрывает основные способы навредить соседям.</description></item><item><title>Задача 5. OOMKilled: кто и что на самом деле считает</title><link>https://notes.melancholic.tech/projects/k8s-challenge-05-oom/</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><guid>https://notes.melancholic.tech/projects/k8s-challenge-05-oom/</guid><description>JVM настроена на 1 ГиБ кучи, лимит контейнера 1.5 ГиБ, а под всё равно ловит OOMKilled. Разбираем, что входит в память контейнера помимо кучи и почему page cache тоже считается.</description></item><item><title>Задача 6. Путь пакета: от пода к поду через kube-proxy</title><link>https://notes.melancholic.tech/projects/k8s-challenge-06-packet-path/</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><guid>https://notes.melancholic.tech/projects/k8s-challenge-06-packet-path/</guid><description>Под обращается к ClusterIP — но такого адреса нет ни на одном интерфейсе в кластере. Разбираем, что ClusterIP это правило DNAT, а не адрес, и чем iptables отличается от IPVS.</description></item><item><title>Задача 7. Три probe и чем они друг от друга отличаются</title><link>https://notes.melancholic.tech/projects/k8s-challenge-07-probes/</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><guid>https://notes.melancholic.tech/projects/k8s-challenge-07-probes/</guid><description>Под тормозящей базы данных начинается лавина перезапусков, и становится только хуже. Разбираем разницу между liveness, readiness и startup, и почему liveness на зависимость от внешнего сервиса — опасная ошибка.</description></item><item><title>Задача 8. Держим сервис живым во время обслуживания нод</title><link>https://notes.melancholic.tech/projects/k8s-challenge-08-availability/</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><guid>https://notes.melancholic.tech/projects/k8s-challenge-08-availability/</guid><description>Три реплики, а сервис лёг при обновлении кластера. Разбираем, почему количество реплик не равно отказоустойчивости и как связаны PodDisruptionBudget, anti-affinity и topology spread.</description></item><item><title>Задача 9. Прожорливый etcd</title><link>https://notes.melancholic.tech/projects/k8s-challenge-09-etcd/</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><guid>https://notes.melancholic.tech/projects/k8s-challenge-09-etcd/</guid><description>Кластер начинает тормозить на всех операциях kubectl, хотя ноды свободны. Разбираем лимит объекта в 1.5 МиБ, квоту базы в 2 ГиБ, историю ревизий и почему ConfigMap в цикле роняет control plane.</description></item><item><title>Задача 10. HPA: почему автомасштабирование не срабатывает</title><link>https://notes.melancholic.tech/projects/k8s-challenge-10-hpa/</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><guid>https://notes.melancholic.tech/projects/k8s-challenge-10-hpa/</guid><description>HPA настроен на 70% CPU, поды загружены под завязку, но реплики не добавляются. Разбираем, что проценты считаются от requests, а не от лимитов, и что бывает, когда requests не заданы.</description></item><item><title>Задача 11. Init-контейнеры и sidecar'ы</title><link>https://notes.melancholic.tech/projects/k8s-challenge-11-sidecars/</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><guid>https://notes.melancholic.tech/projects/k8s-challenge-11-sidecars/</guid><description>Job завершает работу, но под навсегда остаётся в Running из-за sidecar&amp;rsquo;а. Разбираем порядок запуска контейнеров, старую проблему завершения sidecar&amp;rsquo;ов и нативные sidecar-контейнеры.</description></item><item><title>Задача 12. Rolling update: maxSurge и maxUnavailable</title><link>https://notes.melancholic.tech/projects/k8s-challenge-12-rolling-update/</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><guid>https://notes.melancholic.tech/projects/k8s-challenge-12-rolling-update/</guid><description>Выкатка новой версии останавливается на половине и висит часами, откат не помогает. Разбираем, как считаются maxSurge и maxUnavailable, при чём тут readiness и почему progressDeadlineSeconds важнее, чем кажется.</description></item><item><title>Задача 13. Когда под увидит новый ConfigMap</title><link>https://notes.melancholic.tech/projects/k8s-challenge-13-configmap/</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><guid>https://notes.melancholic.tech/projects/k8s-challenge-13-configmap/</guid><description>ConfigMap обновили, но приложение работает по-старому. Разбираем, почему переменные окружения не обновляются никогда, тома обновляются с задержкой, а subPath не обновляется вовсе.</description></item><item><title>Задача 14. Куда на самом деле идёт запрос к Service</title><link>https://notes.melancholic.tech/projects/k8s-challenge-14-services/</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><guid>https://notes.melancholic.tech/projects/k8s-challenge-14-services/</guid><description>Масштабировали сервис с 3 подов до 10, но нагрузка осталась на прежних трёх. Разбираем, почему балансировка происходит на уровне соединений, и что с этим делать для gRPC и HTTP/2.</description></item><item><title>Задача 15. Медленный DNS и загадка ndots</title><link>https://notes.melancholic.tech/projects/k8s-challenge-15-dns/</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><guid>https://notes.melancholic.tech/projects/k8s-challenge-15-dns/</guid><description>Обращение к внешнему API из пода отрабатывает заметно дольше, чем с ноды. Разбираем search-домены, параметр ndots:5 и почему один внешний запрос превращается в пять DNS-запросов.</description></item><item><title>Задача 16. Почему под висит в Pending</title><link>https://notes.melancholic.tech/projects/k8s-challenge-16-scheduling/</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><guid>https://notes.melancholic.tech/projects/k8s-challenge-16-scheduling/</guid><description>Ноды свободны, а под не запускается. Разбираем, как планировщик фильтрует и оценивает ноды, чем taint отличается от affinity и почему свободная память ноды не то же самое, что доступная.</description></item><item><title>Задача 17. StatefulSet, PVC и данные, которые пережили под</title><link>https://notes.melancholic.tech/projects/k8s-challenge-17-storage/</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><guid>https://notes.melancholic.tech/projects/k8s-challenge-17-storage/</guid><description>Уменьшили StatefulSet с 5 реплик до 3, вернули обратно — и получили старые данные. Разбираем, почему PVC живут дольше подов, чем StatefulSet отличается от Deployment и как reclaim policy решает судьбу данных.</description></item><item><title>Задача 18. RBAC: кто здесь и что ему можно</title><link>https://notes.melancholic.tech/projects/k8s-challenge-18-rbac/</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><guid>https://notes.melancholic.tech/projects/k8s-challenge-18-rbac/</guid><description>Под ходит в API и получает Forbidden, хотя роль создана. Разбираем разницу Role и ClusterRole, зачем нужен RoleBinding, почему у каждого пода есть ServiceAccount и как право на создание подов равно правам администратора.</description></item><item><title>Задача 19. Нода под давлением: кого вытеснят первым</title><link>https://notes.melancholic.tech/projects/k8s-challenge-19-eviction/</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><guid>https://notes.melancholic.tech/projects/k8s-challenge-19-eviction/</guid><description>На ноде кончается место на диске, и поды начинают выселяться — включая те, что ничего не писали. Разбираем пороги kubelet, разницу между вытеснением и OOMKill и почему логи в файл опасны.</description></item><item><title>Задача 20. Обновление кластера и умирающие API</title><link>https://notes.melancholic.tech/projects/k8s-challenge-20-upgrades/</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><guid>https://notes.melancholic.tech/projects/k8s-challenge-20-upgrades/</guid><description>После обновления кластера пайплайн падает на манифестах, которые работали годами. Разбираем разницу между deprecated и removed, правило skew между компонентами и порядок безопасного обновления.</description></item></channel></rss>