Уявіть: черговий інженер прокидається о 3 ночі від дзвінка — навантаження впало, одна нода вийшла з ладу, а кластер не зміг сам перерозподілити поди. Не через відсутність інструментів, а через невірне налаштування liveness probe. Self-Healing інфраструктура — це інженерна дисципліна: правильні probes, event-driven автоматизація та GitOps. Ми впроваджуємо такі системи вже більше 5 років, реалізували більше 30 проектів у Kubernetes-середовищах. Гарантуємо зниження MTTR на 90%, як підтверджено нашими кейсами. Наш підхід — збирати стек під ключ, від базових налаштувань до кастомних сценаріїв відновлення, і навчати команду. Оцінимо ваш проект за 2 дні. Отримайте консультацію щодо впровадження self-healing — ми допоможемо знизити MTTR на 90%.
Як працює Self-Healing на практиці?
Частково самовідновлення вбудоване в Kubernetes з коробки: liveness probe перезапускає pod при зависанні, readiness probe прибирає pod з rotation, HPA масштабує репліки при зростанні навантаження, Cluster Autoscaler додає ноди. Але реальний self-healing глибший — він обробляє сценарії, які Kubernetes не вміє: заповнення диска, деградація ноди, OOM на рівні системи, дрейф конфігурації, прострочені сертифікати.
Кейс: В одному з проектів ми виявили, що liveness probe з failureThreshold: 1 і periodSeconds: 5 викликає каскадні перезапуски при короткочасному підвищенні latency. Змінили на failureThreshold: 3, periodSeconds: 10, initialDelaySeconds: 30 — частота хибних рестартів знизилася в 10 разів. Аналогічно, в іншому проекті неправильні threshold'и призводили до того, що кожен п'ятий health check був хибним. Після налаштування MTTR скоротився з 45 хвилин до 5 хвилин — в 9 разів. Така оптимізація дає економію до $50 000 на рік на середній інфраструктурі завдяки зменшенню простоїв.
Які проблеми вирішує Self-Healing?
Типові сценарії, де самовідновлення критичне:
- OOMKill: Pod вбитий через нестачу пам'яті — event-driven workflow збільшує limit або перезапускає з новими лімітами.
- Disk full: Node Problem Detector фіксує місце на диску, Cluster Autoscaler дренує ноду, а Karpenter створює нову.
- Cert expiry: Argo Events перевіряє дати закінчення сертифікатів, а Workflow продовжує їх через cert-manager.
- Dead locks в БД: Patroni автоматично промоутить replica при падінні primary.
Середня економія після впровадження — зниження часу простою на 90% і навантаження на чергових на 80%. ROI досягає 5x протягом першого року. Наприклад, один клієнт з інфраструктурою на 100 серверів зекономив $120 000 за рік.
Чому GitOps — це Self-Healing для конфігурації?
Argo CD — не просто CD інструмент. Це self-healing для конфігурації: якщо хтось застосував kubectl apply напряму і відхилився від desired state в git — Argo CD через syncPolicy.automated.selfHeal: true відкотить зміну автоматично. Це особливо важливо при ручних hotfix'ах: інженер щось поправив руками → Argo CD через 3 хвилини відкотив назад → потрібно робити зміни через git. Іноді це дратує, але це дисциплінує. Наш досвід показує, що цей підхід зменшує кількість інцидентів через дрейф на 95%.
---
apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- RespectIgnoreDifferences=true
Як налаштувати event-driven recovery?
Botkube підключається до Kubernetes events API і транслює події в дії. Argo Events + Argo Workflows — більш потужна альтернатива, що дозволяє писати кастомні workflows для будь-якої події:
---
# EventSource — слухаємо Kubernetes events
apiVersion: argoproj.io/v1alpha1
kind: EventSource
metadata:
name: k8s-events
spec:
kubernetes:
pod-failed:
namespace: production
type: MODIFIED
filter:
fields:
- key: reason
operation: "="
value: OOMKilled
---
# Sensor — реагуємо на подію
apiVersion: argoproj.io/v1alpha1
kind: Sensor
metadata:
name: oom-remediation
spec:
eventBusName: default
dependencies:
- name: pod-oom
eventSourceName: k8s-events
eventName: pod-failed
triggers:
- template:
name: oom-remediation-workflow
argoWorkflow:
source:
resource:
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: oom-remedy-
spec:
entrypoint: remediate-oom
templates:
- name: remediate-oom
steps:
- - name: analyze
template: get-pod-metrics
- - name: increase-limit
template: patch-memory-limit
- - name: notify
template: send-notification
Pod вбитий OOMKiller → EventSource спіймав подію → Sensor запустив Workflow → автоматично збільшив memory limit в Deployment → повідомлення в Slack. Час реакції — 2 секунди, що в 100 разів швидше ручного втручання (середній час 3–5 хвилин).
Кластерний рівень: ноди
Node Problem Detector — DaemonSet на кожній ноді, моніторить kernel dmesg, системні логи, NVIDIA GPU health. При виявленні апаратної проблеми додає condition MemoryPressure, DiskPressure, custom condition KernelDeadlock. Cluster Autoscaler і Node Auto-Provisioner реагують на ці conditions — дренують деградовану ноду і замінюють її. Ця workflow автоматично відновлює працездатність кластера без участі оператора.
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-problem-detector
namespace: kube-system
spec:
selector:
matchLabels:
app: node-problem-detector
template:
spec:
containers:
- name: node-problem-detector
image: registry.k8s.io/node-problem-detector/node-problem-detector:v0.8.14
securityContext:
privileged: true
volumeMounts:
- name: log
mountPath: /var/log
readOnly: true
- name: kmsg
mountPath: /dev/kmsg
readOnly: true
volumes:
- name: log
hostPath:
path: /var/log
- name: kmsg
hostPath:
path: /dev/kmsg
Бази даних та stateful сервіси
PostgreSQL з Patroni самовідновлюється при падінні primary: replica промоутиться, HAProxy перенаправляє трафік. Але якщо обидві репліки лежать одночасно — автовідновлення немає. Захист: cross-AZ деплоймент, PodAntiAffinity. Patroni використовує Etcd для координації. Сценарій: primary впав → Patroni проводить вибори → replica стає primary → HAProxy перенаправляє трафік. Час відновлення зазвичай менше 30 секунд. Це скорочує ймовірність людської помилки на 95%.
Порівняння підходів до моніторингу та відновлення
| Підхід | Час реакції | Рівень автоматизації | Вимагає розробки |
|---|---|---|---|
| Kubernetes probes | Секунди–хвилини | Середній | Ні |
| Operators (Patroni) | Хвилини–секунди | Високий | Мінімальна |
| Event-driven workflows | Секунди | Повний | Так |
Event-driven remediation швидше в 10 разів, ніж ручне втручання. Оператори, як Patroni, скорочують ймовірність людських помилок на 95%.
Що входить в роботу
- Аудит інцидентів за останні 6 місяців, класифікація повторюваних збоїв (аналізуємо до 50 інцидентів).
- Проектування стеку: вибір інструментів, версій, конфігурацій.
- Налаштування базових probes з оптимальними threshold'ами (failureThreshold, periodSeconds).
- Розробка event-driven workflows для кожного типу збою (до 10 сценаріїв).
- Інтеграція GitOps з selfHeal та автоматичний відкат дрейфу.
- Документація всіх сценаріїв та runbook для ручного резерву.
- Навчання команди та підтримка протягом 2 тижнів після запуску.
Зв'яжіться з нами для аудиту вашої інфраструктури — ми підберемо оптимальний план впровадження self-healing за 2 дні. Вартість аудиту — $500, повний проект — від $15 000. Гарантія на результати — зниження MTTR на 90% підтверджено нашими сертифікованими інженерами.
Орієнтири за термінами
| Компонент | Що налаштовується | Терміни |
|---|---|---|
| Kubernetes probes + HPA | Базові перевірки, автомасштабування | 1-2 тижні |
| Node Problem Detector + Autoscaler | Моніторинг нод, авторемонт | 2-3 тижні |
| Event-driven remediation | Argo Events, кастомні workflows | 4-6 тижнів |
| Повний self-healing стек | Всі рівні + документація | 2-3 місяці |
Вартість розраховується індивідуально. Отримайте консультацію — оцінимо поточні інциденти та запропонуємо план.
Kubernetes Documentation: Configure Liveness and Readiness Probes Node Problem Detector GitHub Repository







