В репозитории - пример YAML-манифеста для веб-приложения в Kubernetes с учётом условий задачи.
Что я старался учесть:
- приложение запускается не мгновенно, поэтому добавил
startupProbeиreadinessProbe - пиковую нагрузку выдерживают 4 pod'а, но ночью нагрузка сильно ниже, поэтому использовал
HorizontalPodAutoscaler - базово оставил 2 реплики как компромисс между отказоустойчивостью и экономией ресурсов
- pod'ы распределяются по зонам и нодам, чтобы повысить устойчивость к сбоям
- обновление настроено через
RollingUpdateбез снижения доступности - добавлен
PodDisruptionBudget, чтобы при плановых работах не потерять слишком много pod'ов
По ресурсам:
requests.cpu: 100m- соответствует стабильному потреблению после прогреваlimits.cpu: 500m- даёт запас на первые более тяжёлые запросыrequests.memory: 128Mi- соответствует условиюlimits.memory: 256Mi- небольшой запас по памяти
Главный компромисс в решении - между отказоустойчивостью и минимальным потреблением ресурсов.
Если бы приоритет был только на HA, можно было бы держать минимум 3 реплики. Здесь я выбрал 2 как более экономичный вариант.