Поэтапное развёртывание за балансировщиком
Выпускайте изменения без простоя последовательно
«Поэтапное развёртывание за балансировщиком» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.
Отсутствие простоя — наша цель
Обновите все веб-узлы, не потеряв ни одного запроса. Секрет — в поэтапном развёртывании: изменяйте несколько узлов за раз. 🔄
serial управляет группой узлов
Добавьте serial в play, чтобы Ansible обрабатывал узлы небольшими волнами, а не все сразу.
- hosts: web
serial: 1
tasks:
- import_role:
name: webappПроценты тоже поддерживаются
serial принимает процент или список размеров групп, поэтому можно наращивать масштаб: сначала выполнить canary-развёртывание, затем использовать более крупные группы.
serial:
- 1
- 25%
- 50%Сначала выведите узел из трафика
Перед обновлением узла выведите его из ротации. Используйте delegate_to, чтобы сообщить балансировщику нагрузки, что трафик на этот узел направлять не следует.
- name: Drain node
community.general.haproxy:
state: disabled
host: "{{ inventory_hostname }}"
delegate_to: lb1Зачем нужен delegate_to для LB
Веб-узел не может отключить сам себя в балансировщике; это должен сделать балансировщик нагрузки. delegate_to запускает эту задачу на lb1 для каждого веб-узла.
Развёртывание новой версии
После вывода узла из трафика разверните код, сформируйте конфигурацию и позвольте обработчику перезагрузить сервис приложения только для этого узла.
- name: Pull release
ansible.builtin.git:
repo: "{{ app_repo }}"
version: "{{ app_version }}"
dest: /srv/app
notify: Reload appПроверка состояния перед возвратом
Перед возвратом пользователей убедитесь с помощью uri, что узел исправен. Никогда не добавляйте неисправный узел обратно в пул.
- name: Wait for health
ansible.builtin.uri:
url: http://localhost:8080/health
status_code: 200
retries: 5
delay: 3Повторное включение в балансировщике
После проверки верните узел в ротацию, снова используя delegate_to для балансировщика нагрузки. Трафик направляется на новую версию.
- name: Enable node
community.general.haproxy:
state: enabled
host: "{{ inventory_hostname }}"
delegate_to: lb1max_fail_percentage защищает от массового сбоя
Установите max_fail_percentage, чтобы остановить развёртывание при сбое слишком большого числа узлов и не дать неудачному выпуску распространиться дальше.
- hosts: web
serial: 1
max_fail_percentage: 20run_once для общих шагов
Некоторые шаги, например однократная миграция db, должны выполняться только один раз. Используйте run_once, чтобы их выполнял только один узел.
- name: Migrate db
ansible.builtin.command: /srv/app/migrate
run_once: trueПолный цикл
Для каждого узла: вывести из трафика, развернуть, проверить состояние, снова включить. serial повторяет этот цикл безопасными волнами, пока весь парк узлов не будет обновлён. ✅
Быстрая проверка
Одно ключевое слово обеспечивает работу шага с LB.
Итоги
Вы создали поэтапное развёртывание: группы узлов с помощью serial, вывод из трафика и возврат через delegate_to, проверки состояния и защиту от массовых сбоев. Без простоя. 🟢
Часто задаваемые вопросы
Урок «Поэтапное развёртывание за балансировщиком» бесплатный?
Да — полный текст урока «Поэтапное развёртывание за балансировщиком» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Поэтапное развёртывание за балансировщиком»?
Выпускайте изменения без простоя последовательно Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать DevOps Bootcamp?
Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Поэтапное развёртывание за балансировщиком»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Проектирование проекта: роли и инвентарь
- Подготовка, усиление защиты и начальная настройка узлов
- Поэтапное развёртывание за балансировщиком
- Дымовые тесты, откат и уведомления