0Pricing
Ansible Academy · Урок

Поэтапное развёртывание за балансировщиком

Выпускайте изменения без простоя последовательно

«Поэтапное развёртывание за балансировщиком» — бесплатный урок Ansible Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Ansible Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Ansible Academy содержит 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: lb1

max_fail_percentage защищает от массового сбоя

Установите max_fail_percentage, чтобы остановить развёртывание при сбое слишком большого числа узлов и не дать неудачному выпуску распространиться дальше.

- hosts: web
  serial: 1
  max_fail_percentage: 20

run_once для общих шагов

Некоторые шаги, например однократная миграция db, должны выполняться только один раз. Используйте run_once, чтобы их выполнял только один узел.

- name: Migrate db
  ansible.builtin.command: /srv/app/migrate
  run_once: true

Полный цикл

Для каждого узла: вывести из трафика, развернуть, проверить состояние, снова включить. serial повторяет этот цикл безопасными волнами, пока весь парк узлов не будет обновлён. ✅

Быстрая проверка

Одно ключевое слово обеспечивает работу шага с LB.

Итоги

Вы создали поэтапное развёртывание: группы узлов с помощью serial, вывод из трафика и возврат через delegate_to, проверки состояния и защиту от массовых сбоев. Без простоя. 🟢

Часто задаваемые вопросы

Урок «Поэтапное развёртывание за балансировщиком» бесплатный?

Да — полный текст урока «Поэтапное развёртывание за балансировщиком» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Ansible Academy, подпишись на CoddyKit PRO. Курс Ansible Academy содержит 4 уроков всего.

Чему я научусь в уроке «Поэтапное развёртывание за балансировщиком»?

Выпускайте изменения без простоя последовательно Ты практикуешь Ansible Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Ansible Academy?

Предыдущий опыт не требуется. Ansible Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Поэтапное развёртывание за балансировщиком»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Ansible Academy?

Да. Каждый урок Ansible Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Проектирование проекта: роли и инвентарь
  2. Подготовка, усиление защиты и начальная настройка узлов
  3. Поэтапное развёртывание за балансировщиком
  4. Дымовые тесты, откат и уведомления
← Назад к Ansible Academy