Развертывание приложения в кластере Службы Azure Kubernetes
Ваша организация изучает способы развертывания облачной службы преобразования видео для просмотра. Вы выбрали Служба Azure Kubernetes (AKS) в качестве облачной платформы разработки. После настройки кластера можно приступать к развертыванию одного из компонентов в приложении для преобразования видео для просмотра. Вы решили развернуть статическую версию веб-сайта компании, чтобы изучить процесс развертывания Kubernetes.
Прежде чем обсуждать способ развертывания с использованием Kubernetes, давайте рассмотрим некоторые шаги, необходимые для развертывания аналогичного приложения в среде, отличной от Kubernetes.
Предположим, вы используете виртуальную машину Azure в качестве целевой платформы. Первым шагом является подготовка серверного программного обеспечения для размещения приложения. Вы обязуетесь:
- Установка операционной системы.
- Обязательно обновите операционную систему, применив все последние исправления безопасности и программного обеспечения.
- Установка и настройка программного обеспечения веб-сервера на виртуальной машине.
- Развертывание веб-приложения.
Повторите этот процесс для каждой новой виртуальной машины, когда вы решите масштабировать веб-сайт для обработки увеличения спроса от клиентов.
Альтернативный подход заключается в запуске веб-сайта на платформе на основе контейнеров, например в службе "Экземпляры контейнеров Azure" (ACI). Вам не нужно беспокоиться о базовой технологии сервера, но вам нужно настроить несколько контейнеров и управлять ими, чтобы использовать эту стратегию вручную.
Kubernetes и AKS помогают координировать работу контейнеров. Функции оркестрации контейнера Kubernetes упрощают управление рабочими нагрузками в кластере. Вы развертываете рабочие нагрузки с помощью контейнеров, созданных из образов контейнеров, для запуска приложений в кластере AKS.
Здесь вы можете узнать, как создавать рабочие нагрузки в кластере AKS.
Что такое реестр контейнеров?
Реестр контейнеров позволяет безопасно хранить образы контейнеров в облаке для последующего развертывания. Реестр контейнеров можно считать архивом, в котором хранятся несколько версий образа контейнера. Каждый сохраненный образ имеет тег, назначенный для идентификации.
Например, может иметься образ contoso-website:latest
, который будет другой версией образа с тегом contoso-website:v1.0.0
.
Реестры контейнеров могут быть общедоступными или частными. Частные реестры требуют учетных данных для доступа к изображениям и скачивания и являются стратегией хранения образов контейнеров.
Kubernetes позволяет развертывать только образы, размещенные в реестре контейнеров. Создание частного реестра контейнеров обычно является частью стандартной стратегии развертывания AKS.
Что такое модуль pod в Kubernetes?
Модуль pod Kubernetes группирует контейнеры и приложения в логическую структуру. Эти модули pod не имеют логики и состоят из одного или нескольких контейнеров приложений. У каждого из них есть IP-адрес, сетевые правила и доступные порты.
Например, если вы хотите выполнить поиск всех рабочих нагрузок, связанных с этим contoso-website
, необходимо запросить кластер для модулей pod с меткой app
и значением contoso-website
.
Что такое развертывание Kubernetes?
Развертывание Kubernetes — это эволюция модулей pod. Развертывание упаковывает модули pod в интеллектуальный объект, который позволяет масштабировать их. Вы можете легко дублировать и масштабировать приложение для поддержки большей нагрузки без необходимости настраивать сложные сетевые правила.
Развертывания позволяют пользователям обновлять приложения, просто изменяя тег образа без простоев. При обновлении развертывания вместо удаления всех приложений развертывание отключает веб-приложения по одному. Затем он заменяет их новой версией. Это означает, что любое развертывание может обновить модули pod внутри него без видимого влияния на доступность.
Файлы манифеста Kubernetes
Файл манифеста Kubernetes позволяет декларативно описать рабочие нагрузки в формате YAML и упростить управление объектами Kubernetes.
Представьте, что вам нужно развернуть рабочую нагрузку вручную. Необходимо продумать несколько моментов. Вам потребуется создать контейнер, выбрать конкретный узел, упаковать его в модуль pod, запустить модуль pod, понаблюдать за выполнением и т. д.
Файлы манифеста содержат все сведения, необходимые для создания описанной рабочей нагрузки и управления ими.
Что такое метка Kubernetes?
Метка Kubernetes позволяет логически группировать объекты Kubernetes. Эти метки позволяют системе запрашивать кластер для объектов в соответствии с указанным именем.
Структура файла манифеста
Структура файлов манифеста различается в зависимости от типа создаваемого ресурса. Однако файлы манифеста имеют общие инструкции. Эти инструкции определяют различные аспекты, такие как используемые API и тип рабочей нагрузки, которую необходимо создать.
Первые две записи во всех файлах манифеста имеют два важных ключа, apiVersion
и kind
. Ниже приведен пример файла развертывания.
apiVersion: apps/v1 # Where in the API it resides
kind: Deployment # The kind of workload we're creating
Ключ apiVersion
определяет конечную точку сервера API, которая управляет развернутыми объектами.
Ключ kind
определяет рабочую нагрузку, созданную этим развертыванием.
Другими общими ключами для всех файлов являются metadata
и name
. У каждого ресурса Kubernetes должно быть имя. Это имя вводится в ключ metadata
.
apiVersion: apps/v1
kind: Deployment
metadata:
name: contoso-website # This will be the name of the deployment
Группирование объектов в развертывании
В развертываниях используется label
для поиска и группировки модулей pod. Метка определяется как часть файла манифеста развертывания.
Рассмотрим пример. Обратите внимание на значение matchLabels
, указанное в определении selector
и добавленное в определение spec
.
# deployment.yaml
# ...
spec:
selector:
matchLabels:
app: contoso-website
# ...
С этого момента все файлы имеют различные структуры в зависимости от типа ресурса, который вы создаете в Kubernetes.
Применение файла развертывания
Файл манифеста развертывания Kubernetes развертывается с помощью kubectl
. Вот пример этой команды.
kubectl apply -f ./deployment.yaml