Ingress контролер като единична точка на отказ
Имахме висока достъпност за всяка услуга. Освен за единственото нещо, което насочва трафика към всички тях.
Конфигурацията:
- 20 услуги с по 3+ реплики всяка
- Multi-AZ внедряване
- Pod disruption budgets
- NGINX Ingress Controller: 1 реплика
Инцидентът:
- Ingress controller pod OOMKilled
- 30 секунди за пренасрочване
- Целият външен трафик: 502 Bad Gateway
- Всяка. Една. Услуга. Засегната.
Защо само 1 реплика?
- "Това е просто инфраструктура, никога не се проваля"
- Стойност по подразбиране на Helm chart: 1
- Никой не я промени
Решението:
controller:
replicaCount: 3
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- topologyKey: "kubernetes.io/hostname"
Също:
- PodDisruptionBudget с minAvailable: 2
- Правилни resource requests/limits
- HPA за скокове на трафика
Урок: Вашият ingress контролер Е вашата достъпност. Третирайте го така.