Обновления без остановки и откаты
Внедряйте обновления приложений без простоя и возвращайтесь к предыдущим версиям при возникновении проблем.
«Обновления без остановки и откаты» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.
Обновления без простоя: зачем они нужны
Представьте, что Вы обновляете работающее приложение. Без тщательного планирования пользователи могут столкнуться с простоем или ошибками. Именно здесь в Kubernetes особенно полезны обновления методом постепенной замены!
Такие обновления позволяют перейти на новую версию приложения без прерывания обслуживания. Новая версия разворачивается постепенно, поэтому приложение остаётся доступным.
Как Deployments обрабатывают обновления
Когда Вы обновляете шаблон пода Deployment (например, изменяете образ контейнера), Kubernetes не просто завершает работу всех подов и запускает их заново. Вместо этого по умолчанию используется стратегия RollingUpdate.
- Создаются новые поды с обновлённой конфигурацией.
- Старые поды постепенно завершают работу после того, как новые становятся готовыми.
- Этот процесс обеспечивает плавный переход с минимальным простоем или вовсе без него.
Управление скоростью обновления
Вы можете точно настроить поведение обновлений методом постепенной замены с помощью двух ключевых параметров в разделе .spec.strategy.rollingUpdate Deployment:
maxUnavailable: максимальное количество подов, которые могут быть недоступны во время обновления. Значение может быть абсолютным числом или процентом.maxSurge: максимальное количество подов, которые могут быть созданы сверх желаемого количества. Значение также может быть абсолютным числом или процентом.
По умолчанию оба параметра имеют значение 25%.
Наше начальное развертывание
Начнём с простого развертывания Nginx. Этот YAML описывает исходное приложение, запущенное с 3 репликами nginx:1.14.2.
На следующем шаге мы используем его как основу для выполнения обновления методом постепенной замены.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80Выполнение обновления методом постепенной замены
Теперь обновим версию Nginx с 1.14.2 до 1.15.0. Для этого достаточно изменить образ в YAML и применить файл.
Kubernetes обнаружит изменение и автоматически запустит обновление методом постепенной замены. Обратите внимание на поле image ниже:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.15.0
ports:
- containerPort: 80Мониторинг состояния обновления
После применения обновлённого YAML Вы можете отслеживать ход обновления методом постепенной замены с помощью команды kubectl rollout status:
kubectl rollout status deployment/my-nginx
Вы увидите сообщения о создании новых и завершении работы старых подов, пока обновление не завершится. Также можно использовать kubectl get rs, чтобы увидеть старые и новые ReplicaSets.
Проверка истории обновлений
Kubernetes хранит историю редакций Ваших Deployments. Это очень полезно для понимания изменений и возможного отката.
Чтобы просмотреть историю, используйте команду:
kubectl rollout history deployment/my-nginx
Вы увидите список редакций, каждая из которых представляет отдельное состояние Deployment. Значение CHANGE-CAUSE часто отражает команду или изменение YAML.
Когда требуется откат
Даже при тщательном тестировании новая версия приложения иногда содержит ошибки или проблемы с производительностью, которые не удалось обнаружить. В таких критических ситуациях необходим быстрый способ вернуться к известному стабильному состоянию.
Здесь на помощь приходят откаты. Они позволяют отменить проблемное обновление и вернуть Deployment к предыдущей рабочей версии из его истории.
Выполнение отката
Чтобы откатиться к непосредственно предыдущей редакции, используйте:
kubectl rollout undo deployment/my-nginx
Если нужно откатиться к определённой редакции (например, к редакции 1), укажите её:
kubectl rollout undo deployment/my-nginx --to-revision=1
Kubernetes выполнит ещё одно обновление методом постепенной замены, чтобы вернуть поды к указанной конфигурации из истории.
Проверка стратегии обновления
Какие из следующих параметров можно использовать для управления поведением стратегии RollingUpdate Deployment в Kubernetes?
Итоги: плавные обновления и защита от ошибок
Мы рассмотрели, как Deployments в Kubernetes обеспечивают обновления без простоя методом постепенной замены, плавно переводя приложения на новые версии. Вы узнали:
- По умолчанию Deployments используют
RollingUpdate. maxUnavailableиmaxSurgeуправляют скоростью обновления.kubectl rollout statusотслеживает ход выполнения.kubectl rollout historyотслеживает редакции.kubectl rollout undoпозволяет быстро откатываться к стабильным версиям.
Эти возможности крайне важны для поддержания высокой доступности и надёжности приложений!
Часто задаваемые вопросы
Урок «Обновления без остановки и откаты» бесплатный?
Да — полный текст урока «Обновления без остановки и откаты» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 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 — локальная установка не требуется.
Все уроки этого курса
- Разбор Deployments
- Масштабирование приложений с помощью ReplicaSets
- Обновления без остановки и откаты
- Стратегии развёртывания: Blue-Green и Canary