С ростом использования контейнерных приложений и микросервисов никогда не было лучшего времени, чтобы стать экспертом в Kubernetes.
Kubernetes-это открытый источник Система оркестровки контейнеров Разработано для автоматизации масштабирования и управления приложениями. В то время как Kubernetes невероятно мощный, его также сложно изучить.
Сегодня мы приблизим вас на шаг ближе к опыту Kubernetes с прохождением Объект развертывания В Автомобиль Kubernetes для управления репликацией и обновления системы живых систем.
Вот что мы рассмотрим сегодня:
- Что такое развертывание в Kubernetes?
- Стратегии обновления развертывания
- Стратегия обновления обновления
- Воссоздать стратегию обновления
- Канарское обновление стратегии
- Чему научиться дальше
Нажимать на вершины концепции Kubernetes
Станьте экспертом Kubernetes с практическими уроками и практикуйте в своем браузере.
Узнайте Kubernetes: глубокое погружение
Что такое развертывание в Kubernetes?
Развертывание — это Объект ресурса В Kubernetes, который определяет желаемое состояние для вашей программы.
Развертывания являются декларативными, что означает, что вы не определяете, как достичь государства. Вместо этого вы заявляете о своем конечная точка (Называется «желаемое состояние») и позволяет контроллеру развертывания автоматически достигать этой конечной цели наиболее эффективным способом.
После запуска развертывание сравнивает текущее состояние программы с желаемым состоянием. Если они не совпадают, контроль развертывания автоматически изменяет состояние, чтобы соответствовать.
Это автоматическое обслуживание состояния-это то, что дает Kubernetes его любимые самовосстанавливающиеся свойства.
Желаемые состояния могут включать в себя, сколько стручков работает, какие это тип стручков, какие изображения контейнеров доступны для программы, и желаемая рабочая нагрузка для каждой стручки.
Если какой-либо аспект желаемого состояния отсутствует, контроль развертывания изменит программу до тех пор, пока они не будут выполнены.
Репликазы
Основным способом развертывания сохраняют желаемое состояние программы, используя использование Replicasets Анкет
Replicaset — это набор идентичная резервная копия Стручки Поддерживается на бэкэнд, чтобы гарантировать, что стручок всегда доступен. Если пользовательский POD не работает или становится перегруженным работой, развертывание выделяет работу с POD из репликазы для поддержания отзывчивости.
Если POD из репликасита не работает, он автоматически создает дополнительный стручок из шаблона.
Стручки в репликате разработаны с использованием Шаблон одиночной стручки обеспечивается развертыванием, которое определяет спецификации, разделяемые кластером POD. Технические характеристики шаблона являются такими, как:
- Какие приложения должны работать в капсулах?
- Какие этикетки должны иметь стручки?
- При каких условиях стручка перезагрузится?
Лучшая практика — не управлять репликатами напрямую. Вы должны выполнить все действия против объекта развертывания и оставить развертывание для управления репликатами.
Каждое развертывание может управлять только одним шаблоном POD, но может управлять несколькими репликами из одного шаблона.
Вам нужно будет создать несколько развертываний для поддержания нескольких различных репликатов.
Обновление с помощью развертывания
Основное преимущество развертывания — для Автоматическое обновление Ваша программа Kubernetes.
Без развертывания вам придется вручную заканчивать все старые стручки, запустить новые версии стручков и запустить чек, чтобы увидеть, есть ли какие -либо проблемы во время создания стручков.
Развертывания автоматизируют весь процесс обновления, так как вы можете просто обновить шаблон POD или желаемое состояние. Развертывание изменит состояние программы в фоновом режиме с такими действиями, как создание новых стручков, распределение большего количества ресурсов и т. Д., До тех пор, пока не будет выполнено обновленное желаемое состояние.
Вы можете даже обновления с откатом к предыдущей версии. Старые репликазы все еще существуют с полными конфигурациями POD, но просто не управляйте какими -либо стручками, как только будет сделана новая репликата.
Если вы хотите перейти на предыдущую версию, вам просто нужно изменить желаемое состояние, чтобы одобрить старый репликат, и развертывание автоматически вернется.
Обновление стратегий развертывания
Kubernetes предлагает стратегии развертывания, которые позволяют вам обновлять различными способами в зависимости от потребностей системы. Три наиболее распространенные::
- Стратегия обновления в обновлении : Минимизирует время простоя за счет скорости обновления.
- Стратегия отдыха : Вызывает время простоя, но быстро обновляется.
- Канарская стратегия : Быстро обновляются для нескольких пользователей с полным развертыванием позже.
Давайте глубже рассмотрим каждую из этих трех стратегий!
Стратегия обновления обновления
Стратегия обновления Rolling — это постепенный процесс, который позволяет вам обновлять систему Kubernetes лишь незначительным влиянием на производительность и отсутствие простоя.
В этой стратегии развертывание выбирает POD со старым программированием, деактивирует его и создает обновленный стручок, чтобы заменить его. Развертывание повторяет этот процесс до тех пор, пока не станет устаревшими стручками.
Преимущество стратегии обновления Rolling заключается в том, что обновление применяется Pod-By-Pod Таким образом, большая система может оставаться активной.
Во время этого процесса обновления наблюдается незначительное снижение производительности, потому что система неизменно является одной активной стручкой, за исключением желаемого числа стручков. Это часто предпочитает полную систему дезактивации.
Стратегия обновления обновления используется в качестве стратегия обновления по умолчанию но не подходит для всех ситуаций. Некоторые соображения при принятии решения о использовании стратегии обновления обновления:
- Как моя система на мгновение отреагирует на дублированные стручки?
- Является ли обновление достаточно существенным для неисправности с некоторыми стручками, которые все еще используют старые спецификации?
- Повлияет ли незначительное снижение производительности на удобство использования моей системы? Насколько тонко, чувствительная ко времени, моя система?
Например, представьте, что мы хотели изменить спецификации для наших стручков. Сначала мы изменили бы шаблон POD на новые спецификации, которые передаются от развертывания в репликат.
Затем развертывание признает, что текущее состояние программы (стручки со старыми спецификациями) отличается от желаемого состояния (стручки с новыми спецификациями).
Развертывание создало бы стручки и репликас с обновленными спецификациями и перенесенной рабочей нагрузкой один за один из старых стручков в новые стручки.
К концу у нас будет совершенно новый набор стручков и репликат без какого -либо времени простоя обслуживания.
Реализация обновления обновления
Мы будем использовать объявление файла YAML с именем Deploy.yaml
Чтобы создать наше развертывание.
apiVersion: apps/v1 #Older versions of k8s use apps/v1beta1 kind: Deployment metadata: name: hello-deploy spec: replicas: 10 selector: matchLabels: app: hello-world minReadySeconds: 10 strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 1 maxSurge: 1 template: metadata: labels: app: hello-world spec: containers: - name: hello-Pod image: educative/k8sbook:latest ports: - containerPort: 8080
Прямо на самом верху, вы указываете версию API Kubernetes для использования. Предполагая, что вы используете современную версию Kubernetes, объекты развертывания находятся в Приложения/v1
API Group.
Далее, .kind
Field сообщает Kubernetes, что вы определяете объект развертывания.
.metadata
Раздел — это то, где мы даем развертывание имя и ярлыки.
.spec
Раздел — это место, где происходит большая часть действий. Все, что прямо ниже .spec
относится к стручке. Что -нибудь вложенное ниже .spec.template
относится к шаблону POD, которым будет управлять развертывание. В этом примере шаблон POD определяет один контейнер.
.spec.replicas
Рассказывает Kubernetes, сколько реплик Pod для развертывания.Spec.selector
это список ярлыков, которые POD должны иметь для развертывания для управления ими..spec.strategy
сообщает Kubernetes, как выполнять обновления для стручков, управляемых развертыванием, в данном случае,Rollingupdate
Анкет
Наконец, мы применим это развертывание в нашем кластере Kubernetes с командой:
$ kubectl apply -f deploy.yml
Продолжайте изучать Kubernetes.
Не останавливайтесь только с развертываниями. Выделитесь среди своих сверстников, освоив концепции Kubernetes от начинающего до эксперта. Текстовые курсы образования смены и загружены практической практикой.
Узнайте Kubernetes: глубокое погружение
Воссоздать стратегию обновления
Стратегия обновления воссоздания-это процесс «все или ничего», который позволяет вам обновлять все аспекты системы одновременно с кратким периодом простоя.
В этой стратегии развертывание выбирает все устаревшие стручки и деактивирует их сразу.
Как только все старые стручки дезактивированы, развертывание создает обновленные стручки для всей системы. Система не работает, начиная с дезактивации старой стручки и заканчивается после создания окончательного обновленного стручка.
Стратегия воссоздания используется для систем, которые не могут функционировать в частично обновленном состоянии или, если вы предпочитаете иметь время простоя, чем предоставить пользователям меньший опыт. Чем больше обновление, тем более вероятно, что обновление обморожения вызовет ошибку.
Поэтому стратегия воссоздания лучше для больших обновлений и капитальных ремонтов.
Когда вы рассматриваете стратегию воссоздания, спросите себя:
- Будет ли у моих пользователей лучший опыт простоя или временно сниженной производительности?
- Может ли моя система функционировать во время обновления?
- Есть ли время, когда я мог бы обновить систему, не затронув значительного количества пользователей?
Воссоздать реализацию обновления
Эта реализация очень похожа на стратегию обновления Rolling.
apiVersion: apps/v1 #Older versions of k8s use apps/v1beta1 kind: Deployment metadata: name: hello-deploy spec: replicas: 10 selector: matchLabels: app: hello-world minReadySeconds: 10 strategy: type: Recreate rollingUpdate: maxUnavailable: 1 maxSurge: 1 template: metadata: labels: app: hello-world spec: containers: - name: hello-Pod image: educative/k8sbook:latest ports: - containerPort: 8080
Как вы можете видеть, единственная разница между реализацией обновления Rolling и Recretee заключается в строке 12, где мы заменили Стратегия.type: Rollingupdate
к Стратегия.type: Воссоздать
Анкет
Как и в прошлый раз, мы развертываем развертывание через командную линию, используя:
$ kubectl apply -f deploy.yml
Канарское обновление стратегии
Стратегия Canary Update — это процесс частичного обновления, который позволяет вам проверить вашу новую версию программы на реальной базе пользователей без обязательств для полного развертывания.
В этой стратегии развертывание создает Несколько новых стручков сохраняя большинство стручков в предыдущей версии, обычно в 1: 4 Соотношение Анкет
Большинство пользователей по -прежнему используют предыдущую версию, но небольшое подмножество неосознанно использует новую версию, чтобы действовать в качестве тестеров.
Если мы не обнаружим никаких ошибок из этого подмножества, мы сможем увеличить обновленную репликату, чтобы получить полное развертывание.
Если мы найдем ошибку, мы сможем легко отказаться от нескольких обновленных стручков, пока не исправим ошибку.
Преимущество стратегии Canary Update заключается в том, что она позволяет протестировать новую версию без риска полной системы системы.
В наихудшем сценарии все пользователи из тестового подмножества испытывают критические ошибки, в то время как 75% или более базы пользователей продолжаются без перерыва.
Процесс отката также гораздо быстрее, чем стратегия обновления Rolling, потому что вам нужно только откатить часть стручков, а не всю систему.
Недостатком является то, что обновленным стручкам потребуется Отдельное развертывание , что может быть трудно управлять в масштабе. Кроме того, Канарская стратегия приводит к более медленному развертыванию из -за периода ожидания после развертывания нашего первоначального подмножества и завершения полного развертывания.
При рассмотрении стратегии Канарского происхождения спросите себя:
- Какой сценарий наихудшего случая, если это обновление не удалось?
- Как скоро мне нужно закончить полное развертывание?
- Сколько внутреннего тестирования я прошел?
Канарское обновление реализация
Для этой реализации нам нужно создать два развертывания в двух файлах YAML.
Версия 1 развертывание
Наш первый файл, k8s-deployment.yaml
, будет нашей устаревшей версией, которую будет работать большинство наших стручков.
apiVersion: apps/v1 kind: Deployment metadata: name: helloworld spec: replicas: 3 strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 1 minReadySeconds: 5 template: metadata: labels: app: helloworld track: stable spec: containers: - name: helloworld image: educative/helloworld:1.0 ports: - containerPort: 80 resources: requests: cpu: 50m limits: cpu: 100m
Это создаст 3 стручки v1
с Приложение: Helloworld
Наржите, что ищет наша служба Kubernetes. Наше изображение для этих стручков Образование/HelloWorld: 1.0
, означающее, что эти стручки будут созданы за пределами старых спецификаций POD.
Это развертывание будет равномерно разделить любую рабочую нагрузку между доступными стручками.
Вы развернете это, введя эту строку в командную линию:
kubectl apply -f k8s-deployment.yaml
Уведомление: В отличие от предыдущих реализаций, Канарский
не перечислен под Стратегия
поскольку его реализация более сложна.
Вместо этого обе версии перечислены как Rollingupdates
Потому что обновления в каждой версии будут развертываться, в то время как стратегия общей системы — Канария.
Версия 2 развертывание
Теперь мы создадим наш второй файл YAML, K8S-развертка-канар. YAML
, который является нашей новой канарейкой v2
версия.
apiVersion: apps/v1 kind: Deployment metadata: name: helloworld-canary spec: replicas: 1 strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 1 minReadySeconds: 5 template: metadata: labels: app: helloworld track: canary spec: containers: - name: helloworld image: educative/helloworld:2.0 ports: - containerPort: 80 resources: requests: cpu: 50m limits: cpu: 100m
Для этого развертывания мы создаем только один стручок (строка 6), чтобы большинство нашей базы пользователей все еще взаимодействует с v1
Анкет
Оба развертывания будут сбалансировать рабочую нагрузку среди всех стручков, которые обеспечивают только 25% нашей рабочей нагрузки на обновленном стручке.
Вы можете развернуть это развертывание через командную линию, используя:
kubectl apply -f k8s-deployment-canary.yaml
Как только вы удовлетворены этим v2
Работает, просто замените изображение в нашем первом файле развертывания YAML, k8s-deployment.yaml
, чтобы быть Образование/HelloWorld: 2.0
а не Образование/HelloWorld: 1.0
Анкет
Затем удалите развертывание канарейки с помощью:
kubectl delete -f k8s-deployment-canary.yaml
Наше желаемое состояние будет тогда иметь все стручки с v2
и рабочая нагрузка будет сбалансирована среди оставшихся 3 v2
Стручки.
Канарское обновление достигнуто!
Чему научиться дальше
В то время как это все для нашего развертывания, есть множество других основных тем, о которых вы должны узнать.
Продолжайте путешествие в Kubernetes, узнав о передовых темах, таких как:
- Моделирование угроз
- Statefulsets
- Kubernetes Security
- Динамическое обеспечение
Чтобы помочь вам с этими и другими темами Kubernetes, Educative создало курс Узнайте Kubernetes: глубокое погружение Анкет Этот курс начинается с объяснений и примеров всех основных компонентов Kubernetes и постепенно переходит на передовые концепции с AWS, Azure и GKE. В конце концов вы получите готовые к интервью знания обо всем, что может предложить Kubernetes.
Счастливого обучения!
Продолжить чтение о Kubernetes
- Учебник Kubernetes: начало работы с оркестровкой контейнеров
- Развертывание первого сервиса на Kubernetes: Демистификация входа
- Chaos Engineering 101: Принципы, процесс и примеры
Оригинал: «https://dev.to/educative/a-deep-dive-into-kubernetes-deployment-strategies-2f7n»