Кубернаны были в значительной степени использованы на производстве в течение последних нескольких лет. Он предлагает множество решений для Orchestration ваших контейнеров с использованием его декларативных API. Одной из выдающихся особенностей Куберанес является его устойчивость с возможностью выполнения развертывания прокатки и отката.
Грунтовка
Развертывание
Развертывание является одним из механизмов обработки рабочих нагрузок (приложений) в Куберане. Управляется Контроллер развертывания Kubernetes Отказ
В Kubernetes контролирует петли управления, которые смотрят состояние вашего кластера, затем сделать или запросить изменения, где это необходимо. Каждый контроллер пытается переместить текущее состояние кластера ближе к желаемому состоянию.
В случае развертывания здесь желаемое состояние, которое мы хотим достичь, предназначена для стручек. Все декларативно в K8S, поэтому желаемое состояние записывается как спецификация в файле манифеста развертывания.
# deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: 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
Если какой-либо из наших экземпляров POD не удается или обновить (изменение состояния), система Kubernetes отвечает на разницу между ScapeSt Spec и статусом, сделав коррекцию, то есть соответствие состоянию Развертывание
Как определено на спецификации.
Развертывание под капотом
Развертывание — это абстракция над Реплиз
Отказ Под капотом развертывание создает реплиз, который, в свою очередь, создает стручки на нашем кластере. Согласно названию, Реплиз
используется для управления репликами наших стручков.
Таким образом, контроллер прочитывает спецификацию развертывания, пересылает конфигурацию POD для реплизета, а затем создает стручки с правильными репликами.
Развертывание> Реплиз> PODS
Развертывание прокатки
Кубернаны обещают нулевое время, а одна из причин его развертывания прокатки. С развертыванием прокатки Kubernetes гарантирует, что трафик на стручки не прерывается при развертывании обновленных стручков.
Откатное развертывание
Средство развертывания отката, возвращаясь к предыдущему экземпляру развертывания, если есть некоторая проблема с текущим развертыванием.
Руки на 🙌.
Давайте получим наши практические средства с Куберанетами и посмотрим, как выполняются эти стратегии развертывания.
Настройка вида
Мы настроим кластером одного узла Kubernetes на нашем локальном компьютере с использованием добрых (Kubernetes в Docker). Убедитесь, что у вас есть докер работает.
Установить вид
Мы создадим кластер K8S, используя:
$ kind create cluster
С нашим кластером готов, мы готовы к развертыванию.
Для целей этого учебника мы не будем прикасаться к любым файлам YAML и будут полностью использоваться мощностью kubectl
CLI Tool.
Создать развертывание
Давайте создадим наше первое развертывание, используя nginx
изображение.
$ kubectl create deployment test-nginx --image=nginx:1.18-alpine
Как упоминалось ранее, развертывание создает Реплиз
сопровождается Стручки
Отказ Вы можете проверить эти вновь созданные ресурсы, используя:
$ kubectl get deploy,rs,po -l app=test-nginx
Список вновь созданное развертывание, реплиз и стручок
Вы можете проверить, чтобы убедиться, что Реплиз
был создан нашими Развертывание
с использованием:
$ kubectl describe rs
Проверьте реплиз, созданный развертыванием
Вы можете сделать то же самое с PODS:
$ kubectl describe po
Развертывание масштаба
Давайте масштабируем развертывание, чтобы иметь 3 экземпляра nginx
Стручки.
$ kubectl scale deploy test-nginx --replicas=3
Создание 3 реплика Pods Nginx
Теперь, когда у нас есть значительное количество стручков на нашем кластере. Давайте попробуем стратегии развертывания.
Руководство: развертывание обновления Rolling 🍥⏩
Допустим, у вас были некоторые проблемы с V18
Nginx и V19
исправляет это для вас. Вам нужно перелить новое обновление изображения Nginx на ваш POD.
Обновлением образ текущих стручков (изменение состояния), Kubernetes выкалит новое развертывание.
$ kubectl set image deploy test-nginx nginx=nginx:1.19-alpine
После того, как мы устанавливаем новое изображение, мы видим, что старые подмыслистые стрелы оканчиваются, и создаются новые стручки.
Обновление прокатки, новый POD замена старых
Мы можем увидеть Kubernetes на работе, убедившись, что стручки поддерживаются должным образом. Последний из старого POD не прекращается до тех пор, пока не создаются полные реплики для новых стручков. Старые стручки также имеют льготный период Которые гарантируют, что трафик, который он служит, не отключен в определенное время, пока запросы не могут быть безопасными направляются на вновь созданные стручки.
Мы успешно обновили все наши стручки для использования nginx v19
Отказ
$ kubectl describe deploy test-nginx
Стручки обновлены до nginx v19
Руководство: развертывание отката 🍥⏪
Давайте предположим, что новое обновление Nginx имеет еще больше проблем, чем последний, и теперь вы поняли, насколько блаженная жизнь была со старой версией. Время для отката к предыдущей версии Nginx.
Но как мы это делаем? Вы могли бы заметить, что сейчас два Реплиссеты
. Это связано с тем же моделью развертывания, которую мы обсуждали ранее, мы обновляем наше развертывание, оно создает новый реплиз, который создает новые стручки. Kubernetes удерживает историю до 10 реплизет по умолчанию, мы можем обновить эту цифру, используя Ревизисисториялимит
на нашем спецификации развертывания.
Эти истории отслеживаются как развертывания. Только последний развертывание активно.
К настоящему времени мы сделали два изменения в нашем развертывании test-nginx.
Таким образом, история развертывания должна быть двумя.
$ kubectl get rs $ kubectl rollout history deploy test-nginx $ kubectl rollout history deploy test-nginx --revision=1
История развертывания для развертывания Test-Nginx
Хорошо, давайте доберемся откатыванию нашего обновления до предыдущего развертывания. Мы хотим откатиться к сцене, где мы использовали NGINX V18, который разворачивается Редакция 1
Отказ
$ kubectl rollout undo deploy test-nginx --to-revision=1
Развертывание Стручных состояний
Как развертывание обновления Rolling, развертывание отката завершается текущие стручки и заменяет их с помощью стручков, содержащих спецификацию из ревизии 1.
Если вы проверяете историю развертывания еще раз, вы можете увидеть, что редакция 1 использовалась для создания новейших кадров, помечущих его с помощью Revision 3. Нет смысла поддержания того же спецификации, повторяющихся для нескольких изменений, поэтому Kubernetes удаляет ревизию 1, поскольку у нас есть последняя редакция 3 того же спецификации.
История ревизии после развертывать отменить
Теперь мы вернемся на nginx v18. с развертыванием отката. Вы можете проверить это по:
$ kubectl describe deploy test-nginx
Проверьте Rollback Nignx версия
Заключение 🚀.
Kubernetes позволяет легко контролировать развертывание наших приложений с этими стратегиями. Это было просто изложение того, как развертывание обновления Rolling и Rollback работают с уровня земли. В реальной жизни мы редко делаем все эти шаги вручную, так как мы передаем его до нашего CI/CD, как Аргоцд Отказ
Спасибо за чтение. Надеюсь, что это руководство было полезно для того, чтобы вы понять, как работают развертывание Rolling и Rollback в Kubernetes. Если у вас есть какие-либо исправления, предложения или обратная связь, не стесняйтесь DM ME на Twitter или комментировать ниже.
Оригинал: «https://dev.to/yankee/how-rolling-and-rollback-deployments-work-in-kubernetes-5ob»