Skitflow

Нулевой простой

Узнайте, как настроить развертывания с нулевым простоем в Skitflow.

Skitflow позволяет настроить развертывания с нулевым простоем, что означает, что вы можете развертывать приложение без какого-либо простоя.

По умолчанию при создании нового развертывания последний запущенный контейнер останавливается и запускается новый. Это стандартное поведение Docker Swarm, которое приводит к ошибке Bad Gateway, так как контейнеры инициализируются одновременно. Однако Skitflow позволяет настроить развертывания с нулевым простоем.

Шаги настройки развертываний с нулевым простоем

Предположим, у нас есть приложение на NodeJS с маршрутом healthcheck /api/health, возвращающим статус 200 и работающим на порту 3000.

  1. В вашем приложении необходимо иметь Path или Health Route для достижения развертываний с нулевым простоем. Например, в случае приложения на NodeJS у вас может быть маршрут /api/health, возвращающий статус 200.
  2. Перейдите во вкладку Advanced, затем в Cluster Settings и откройте Swarm Settings.
  3. Доступно несколько опций, в данном случае мы сосредоточимся на Health Check.
  4. Вставьте этот код в поле healthcheck: Убедитесь, что API-маршрут существует в вашем приложении.
{
  "Test": [
    "CMD",
    "curl",
    "-f",
    "http://localhost:3000/api/health"
  ],
  "Interval": 30000000000,
  "Timeout": 10000000000,
  "StartPeriod": 30000000000,
  "Retries": 3
}

Пример

  1. Мы будем использовать этот пример Github Repo

  2. В нем есть эндпоинт health endpoint, который сообщает, является ли наше приложение здоровым.

  3. Для тестирования добавлена задержка (sleep) для имитации задержки между развертываниями, чтобы вы могли увидеть ошибку Bad Gateway.

  4. Используйте 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 повторными попытками перед переключением на новый контейнер.

На этом всё. Теперь у вас настроены развертывания с нулевым простоем.

On this page