Код-ревью Middle Probes и ресурсы обновлено
Ревью: probes и ресурсы
Вопрос
Найди проблемы в спецификации контейнера платёжного API (старт приложения занимает до 90 секунд).
containers:
- name: payments
image: registry.example.com/payments:2.3.0
livenessProbe:
httpGet:
path: /health/full
port: 8080
initialDelaySeconds: 5
timeoutSeconds: 1
failureThreshold: 1
resources:
requests:
memory: 1Gi
cpu: 100m
limits:
memory: 512Mi
cpu: 100m
Коротко
Исправленный вариант: startupProbe даёт до 120 секунд на старт, liveness проверяет только процесс, readiness управляет трафиком. Память с requests = limits, CPU без жёсткого лимита (или с большим запасом), куча JVM ограничена через -XX:MaxRAMPercentage=75.
Что должен найти ревьюер
- Ошибкастрока 6
/health/fullсудя по названию проверяет зависимости: падение базы или соседнего сервиса вызовет перезапуск всех подов. Liveness должна проверять только процесс. - Ошибкастрока 8Старт до 90 секунд, а liveness начинает через 5: под будут убивать до запуска (CrashLoopBackOff). Нужна startupProbe.
- Ошибкастрока 10
failureThreshold: 1с таймаутом 1 секунда: одна GC-пауза или всплеск нагрузки перезапустит здоровый под. Поставить 3 и таймаут с запасом. - ОшибкаНет readinessProbe: при старте и деплое трафик пойдёт на неготовые поды.
- Ошибкастрока 16Лимит памяти 512Mi меньше requests 1Gi: API отклонит такой под (limits не могут быть меньше requests).
- Производительностьстрока 17Лимит CPU 100m для JVM-сервиса: сильный троттлинг, медленный старт и рост задержек. Увеличить или не ограничивать CPU, а requests выставить по реальному потреблению.
Разбор
Исправленный вариант:
containers:
- name: payments
image: registry.example.com/payments:2.3.0
startupProbe:
httpGet: { path: /healthz, port: 8080 }
periodSeconds: 5
failureThreshold: 24
livenessProbe:
httpGet: { path: /healthz, port: 8080 }
periodSeconds: 10
timeoutSeconds: 3
failureThreshold: 3
readinessProbe:
httpGet: { path: /ready, port: 8080 }
periodSeconds: 5
timeoutSeconds: 3
resources:
requests: { cpu: 500m, memory: 1Gi }
limits: { memory: 1Gi }
startupProbe даёт до 120 секунд на старт, liveness проверяет только процесс, readiness управляет трафиком. Память с requests = limits, CPU без жёсткого лимита (или с большим запасом), куча JVM ограничена через -XX:MaxRAMPercentage=75.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.