Как развертывать приложения в Kubernetes

Опубликовано: 2022-11-09

Kubernetes — одна из самых популярных платформ автоматизации для развертывания, масштабирования и эксплуатации контейнеров приложений в кластере хостов или узлов.

В этой статье мы обсудим один из центральных объектов в Kubernetes: развертывание. Цель состоит в том, чтобы понять его поведение и способы его создания, обновления и удаления.

Что такое развертывание?

Развертывание — это один из объектов, используемых для запуска подов. Лучшие практики Kubernetes поощряют использование развертываний для приложений без сохранения состояния. Без развертывания вам пришлось бы вручную создавать, обновлять и удалять несколько модулей, что было бы утомительно и невыполнимо для многих модулей.

Развертывание объявляет один объект в YAML, который не только создает модули, но также обеспечивает их актуальность и работу. Вы также можете легко автоматически масштабировать свои приложения, используя развертывание в Kubernetes. Таким образом, развертывание используется для масштабирования, развертывания и отката версий ваших приложений в модулях.

Развертывание также сообщает Kubernetes, сколько копий пода мы хотим запустить, а Kubernetes позаботится обо всем остальном. Связанный контроллер создаст ReplicaSet из вашей конфигурации при создании развертывания. Контроллер, связанный с набором реплик, создаст серию подов из конфигурации набора реплик.

Преимущества использования развертывания вместо непосредственного создания ReplicaSet:

  • История объекта: каждое изменение объекта (с помощью «применить» или «редактировать») создаст резервную копию предыдущей версии.
  • Управление развертыванием и откатом: Вы можете вернуться к конфигурации в связи с предыдущим пунктом.

Создание развертывания

Есть два метода, которые мы можем использовать для создания развертывания Kubernetes:

Императивный метод

API-интерфейсы Kubernetes позволяют использовать более прямой и императивный подход, не требуя файлов конфигурации или манифестов в формате YAML. При таком подходе все, что нам нужно сделать, — это сказать, что мы хотим сделать, и Kubernetes возьмет на себя ответственность за определение того, что необходимо сделать для достижения ожидаемого результата.

Чтобы использовать императивный метод, просто используйте команду ниже:

 kubectl create deployment nginx-deployment --image nginx --port=80

Декларативный метод

В этом методе вы должны объявить все, и когда вы используете этот код, Kubernetes просто читает ваши определения и создает точно так, как представлено или объявлено.

Чтобы использовать декларативное развертывание, вам нужно будет создать файл YAML.

YAML-файл для развертывания с именем new_deployment.yaml :

 apiVersion: apps/v1 kind: Deployment metadata:  name: nginx-deployment spec:  #Specifies the number of Pod Copies  replicas: 3 #Selects the Pod to be managed by the deployment  selector:    #Matches the defined labels    matchLabels:      deploy: example  template:    metadata:      #Specifies the labels on the Pod.       labels:         deploy: example    spec:      containers:        - name: nginx          image: nginx:1.20.2

В этом файле YAML после определения версии Kubernetes API, типа создаваемого объекта и имени развертывания есть раздел спецификации. В этом разделе вы сначала определите ключ реплик, который указывает количество экземпляров Pod, которые развертывание должно поддерживать активными.

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

После этого у вас есть объект шаблона, в котором у вас есть модель Pod внутри вашей спецификации развертывания. Когда развертывание создает модули, оно создает их с использованием этого шаблона. Спецификацию обычного модуля можно найти под ключом шаблона.

При таком развертывании образы Nginx с метками будут развернуты в модулях. Кроме того, вы также должны быть осторожны в этом вопросе, а Pod — это единица масштабируемости в Kubernetes, поэтому вам нужно подумать о шаблоне, который вы хотите использовать, если вы помещаете несколько контейнеров в один и тот же Pod.

Затем примените new_deployment.yaml -файл new_deployment.yaml, используя следующую команду:

 kubectl apply -f new_deployment.yaml

Через несколько секунд вы можете получить статус развертывания, используя следующее:

 kubectl get all
развертывать

Получить и обновить развертывание

Обратите внимание, что у вас есть созданные модули, развертывание, а также набор реплик. Таким образом, развертывание всегда создает набор реплик и управляет им. Теперь вы можете использовать следующую команду для описания развертывания:

 kubectl describe deployment nginx-deployment
описывать

Теперь у вас есть полное описание развертывания. Он выделяет стратегию, используемую для создания/перестроения модулей, когда обновление было определено как RollingUpdate.

Стратегия RollingUpdate позволяет упорядоченную миграцию одной версии приложения на более новую версию. Это стратегия по умолчанию, используемая в Kubernetes.

В дополнение к этому, у нас также есть следующие стратегии:

  • Воссоздать: останавливает запущенные в данный момент экземпляры пода и «воссоздает» их с новой версией;
  • Синий/зеленый: эта стратегия создает две отдельные, но идентичные среды. В синей среде приложение работает как есть, тогда как в зеленой среде приложение работает так, как будет в будущем;
  • Canary: стратегия развертывания, при которой подгруппа пользователей участвует в добавочном выпуске приложения или службы.

Если вы выберете «скользящее обновление», вы можете настроить его поведение в отношении желаемого количества реплик.

  • maxSurge позволяет указать (в процентах или абсолютных значениях), сколько модулей Pod может быть создано в дополнение к количеству настроенных реплик.
  • maxUnavailable позволяет указать (в процентах или абсолютных значениях), сколько подов может быть «недоступно» во время обновления, в зависимости от количества настроенных реплик.

В зависимости от вашего приложения и средства автомасштабирования эти конфигурации позволят вам обеспечить качество обслуживания или ускорить развертывание.

Затем вам нужно масштабировать модули до 10 и изменить тег изображения Nginx на последний.

 kubectl scale deployment nginx-deployment --replicas=10
шкала-1

Обратите внимание, что у нас создается 5 контейнеров, и из 10 подов у нас есть 5 доступных.

Через несколько секунд используйте следующую команду:

 kubectl get all

Здесь вы можете видеть, что все поды созданы, а контейнеры запущены.

все-1

Удаление вашего развертывания

Чтобы удалить развертывание Kubernetes, вы можете использовать следующие команды:

 kubectl delete deploy nginx-deployment kubectl delete deploy new_deployment.yaml

Helm: упрощение развертывания

Когда вы хотите развернуть сложное приложение, использующее десятки или даже сотни ресурсов Kubernetes, инструмент kubectl становится непригодным, поэтому был разработан инструмент Helm. Helm — это менеджер пакетов для Kubernetes, основанный на kubectl и упрощающий развертывание приложений.

В словаре Helm приложение называется релизом. Он связан с чартом, т. е. набором конфигурационных файлов в формате YAML, содержащих глобальные переменные и шаблоны, описывающие ресурсы Kubernetes.

Вывод

Развертывание — важный объект Kubernetes. Поскольку великая сила подразумевает большую ответственность, вы должны быть осторожны при ее настройке, иначе вы рискуете столкнуться с неожиданным поведением. Чтобы узнать больше о конфигурациях развертывания, вы можете обратиться к документации Kubernetes.

Вы также можете изучить некоторые из лучших руководств по Kubernetes, чтобы научиться с нуля и стать экспертом.