В моей последней статье Kubernetes я говорил о капсулах, какова их цель, как мы можем создать их и развернуть их с помощью Kubectl.
Эта статья перейдет в развертывание. В этом посте мы рассмотрим:
- Какие развертывания в Kubernetes
- Как мы можем создавать объекты развертывания в Kubernetes
- Как мы можем использовать Kubectl для управления нашим развертыванием?
- Стратегии развертывания
Давайте погрузимся в развертывание Kubernetes!
Какие развертывания в Kubernetes
Развертывания сообщает Kubernetes, как создавать и обновить экземпляры наших приложений. Они предоставляют слой функциональности вокруг стручков и позволяют описать желаемое состояние. Это абстракция высокого уровня, которая контролирует, как мы развертываем и поддерживаем набор стручков.
Под капотом развертывания создают репликазы, которые, в свою очередь, создадут стручки, которые мы запрашиваем в рамках нашего развертывания. Развертывания также предоставят нам способы развертывания, обновления и масштабирования стручков, работающих в кластере.
Репликазы — это просто еще один объект в Kubernetes, который поддерживает стабильный набор стручков, работающих в нашем кластере Kubernetes в любой момент времени. Когда мы обновляем наши развертывания, будут созданы новые репликаты, которые содержат обновленные стручки, и по умолчанию Kubernetes вытащит эти обновления в новую версию, по сути, запустив несколько стручков с обновленной версией, и если они работают правильно, она завершится Старые стручки до тех пор, пока не будут выполнены только ваша более новая версия ваших стручков.
Эта диаграмма ниже объясняет взаимосвязь между развертываниями, копиями и стручками:
Как мы можем создавать объекты развертывания в Kubernetes
Мы можем определить наши объекты развертывания Kubernetes с использованием YAML. Давайте посмотрим на пример развертывания файла yaml:
apiVersion: apps/v1 kind: Deployment metadata: name: myapp-deployment labels: tier: frontend app: nginx spec: selector: matchLabels: app: myapp replicas: 3 template: metadata: name: nginx labels: app: myapp spec: containers: - name: nginx image: nginx
Давайте разберем определение этого файла вниз! Чтобы создать объекты развертывания в Kubernetes с использованием YAML, нам нужны следующие поля.
Apiversion — Это определяет версию API Kubernetes, которую мы хотим использовать в нашем файле YAML. Для объектов развертывания мы используем приложения/v1 apiversion. добрый — Это определяет, какой объект Kubernetes мы хотим создать. Для развертываний мы используем развертывание добрых дел (достаточно просто, верно?) Метаданные — Это данные, которые помогают нам однозначно определить объект, который мы хотим создать. Здесь мы можем предоставить имя для нашего приложения, а также применить этикетки к нашему развертыванию. Spec — Это определяет состояние, которое мы хотим или наш объект.
В пределах нашего определения спецификации нам необходимо указать желаемое поведение нашего развертывания. Итак, в этом файле я использую следующие атрибуты:
Селектор — В нашем селекторе я использую Matchlabels атрибут. В развертываниях мы используем это в качестве селектора метки для стручков. По сути, стручки, которые управляются существующим репликатом, будут стручками, которые влияют на наше развертывание. Поэтому для того, чтобы этот объект развертывания применялся к этим стручкам, мы должны использовать метки шаблона POD в нашем определении развертывания. Шаблон — Это описывает стручки, которые будут созданы. Таким образом, в нашем файле мы создаем стручок, называемый MyApp, используя изображение Nginx для нашего контейнера. Replicas — В этом говорится количество желаемых стручков.
Как мы можем использовать Kubectl для управления нашим развертыванием?
Мы можем использовать Kubectl для выполнения различных операций на наших объектах развертывания Kubernetes. Давайте начнем с создания развертывания. Мы можем сделать это, используя следующую команду:
kubectl apply -f ourdeployment.yaml
Мы также можем создать развертывание, как так:
kubectl create -f ourdeployment.yaml
Чтобы увидеть, были ли наши развертывания созданы, мы можем запустить следующую команду:
kubectl get deployments
Используя наше развертывание, определенное выше, мы увидим что -то вроде этого:
NAME READY UP-TO-DATE AVAILABLE AGE myapp-deployment 0/3 0 0 1s
Вот что означают следующие поля:
Имя — В этом столбце показаны имена развертывания в нашем пространстве имен Kubernetes. ГОТОВ — Это отображает, сколько реплики нашего приложения готовы для наших пользователей. На этом выходе 0 означает, что есть нулевые реплики, и 3 означает, что мы хотим, чтобы 3 реплики были готовы. ДО НАСТОЯЩЕГО ВРЕМЕНИ — Это показывает, сколько реплик было обновлено, чтобы достичь желаемого состояния. ИМЕЕТСЯ В НАЛИЧИИ — Это показывает, что многие реплики доступны для наших пользователей. Возраст — это показывает, как долго приложение работает.
Мы можем отслеживать статус нашего развертывания, выполнив следующую команду:
kubectl rollout status
Мы можем увидеть историю развертывания, выполнив эту команду:
kubectl rollout history
Мы также можем снять конкретное развертывание, выполнив эту команду:
kubectl rollout undo
Чтобы масштабировать наши развертывания Kubernetes, мы можем запустить следующую команду:
kubectl scale--replicas=10
Параметр -Replicas гласит, сколько реплик мы хотим масштабироваться. Таким образом, в этом примере мы бы масштабировали наше развертывание из 3 реплик, как определено в нашем файле YAML до 10 реплик. Мы также можем масштабировать наше развертывание вниз, если мы выберем.
Если в нашем кластере Kubernetes включено горизонтальное автомассалирование POD, мы можем определить, как минимальное и максимальное количество стручков, которые мы хотим запустить на основе использования ЦП. Так, например, мы могли бы запустить эту команду:
kubectl autoscale deployment --min=3 --max=10 --cpu-percent=70
Стратегии развертывания
В наших развертываниях Kubernetes мы можем выбрать следующие стратегии, чтобы заменить наши старые стручки на новые, которые мы определяем как часть нашего развертывания. Это может быть один из двух типов:
Воссоздать — Это убьет все ваши существующие стручки, прежде чем создать новые стручки, которые вы определили в своем развертывании. Это вызовет время простоя применения! .
Rollingupdate — В этой стратегии будут развернуты обновления, а это означает, что стручки будут развернуты, а старые стручки будут убиты только в том случае, если будет работать новая версия ваших стручков. Мы можем определить, сколько стручков будет недоступно и сколько стручков будет создано как часть Rollingupdate. Этот тип стратегии развертывания является дефолтом в Kubernetes.
Вывод
Надеемся, что эта статья помогла вам понять основы развертывания в Kubernetes!
Если вы хотите узнать больше о развертываниях в Kubernetes, я использовал эти ресурсы, чтобы разобраться с ними, так что они тоже помогут вам!
Счастливого кодирования 💻👩 💻👨💻
Оригинал: «https://dev.to/willvelida/what-are-deployments-in-kubernetes-59in»