Нулевой простой
Узнайте, как настроить развертывания с нулевым простоем в Skitflow.
Skitflow позволяет настроить развертывания с нулевым простоем, что означает, что вы можете развертывать приложение без какого-либо простоя.
По умолчанию при создании нового развертывания последний запущенный контейнер останавливается и запускается новый. Это стандартное поведение Docker Swarm, которое приводит к ошибке Bad Gateway, так как контейнеры инициализируются одновременно. Однако Skitflow позволяет настроить развертывания с нулевым простоем.
Шаги настройки развертываний с нулевым простоем
Предположим, у нас есть приложение на NodeJS с маршрутом healthcheck /api/health, возвращающим статус 200 и работающим на порту 3000.
- В вашем приложении необходимо иметь
PathилиHealth Routeдля достижения развертываний с нулевым простоем. Например, в случае приложения на NodeJS у вас может быть маршрут/api/health, возвращающий статус 200. - Перейдите во вкладку
Advanced, затем в Cluster Settings и откройтеSwarm Settings. - Доступно несколько опций, в данном случае мы сосредоточимся на
Health Check. - Вставьте этот код в поле healthcheck: Убедитесь, что API-маршрут существует в вашем приложении.
{
"Test": [
"CMD",
"curl",
"-f",
"http://localhost:3000/api/health"
],
"Interval": 30000000000,
"Timeout": 10000000000,
"StartPeriod": 30000000000,
"Retries": 3
}Пример
-
Мы будем использовать этот пример Github Repo
-
В нем есть эндпоинт
healthendpoint, который сообщает, является ли наше приложение здоровым. -
Для тестирования добавлена задержка (sleep) для имитации задержки между развертываниями, чтобы вы могли увидеть ошибку Bad Gateway.
-
Используйте Git-провайдер в вашем приложении:
- Репозиторий:
https://github.com/Stainless888/swarm-test - Ветка:
main - Путь сборки:
/
- Репозиторий:
Если вы хотите убедиться, что нулевого простоя пока нет, просто разверните приложение, затем создайте еще одно развертывание, и во время развертывания перезагрузите страницу по пути /health — вы увидите ошибку Bad Gateway.
Теперь перейдите в раздел Advanced вашего приложения, затем в раздел Swarm Settings. Мы изменим первый раздел — Healthchecks.
Мы используем именно эту конфигурацию — вставьте и сохраните её:
{
"Test": [
"CMD",
"curl",
"-f",
"http://localhost:3000/health"
],
"Interval": 30000000000,
"Timeout": 10000000000,
"StartPeriod": 30000000000,
"Retries": 3
}Эта конфигурация сообщает Docker следующее:
Выполнить запрос внутри контейнера к http://localhost:3000/health, с интервалом 30000000000 наносекунд и 3 повторными попытками перед переключением на новый контейнер.
На этом всё. Теперь у вас настроены развертывания с нулевым простоем.