Упражнение. Развертывание приложения в кластере Службы Azure Kubernetes
В этом упражнении разверните веб-сайт вашей компании в качестве тестового приложения на Служба Azure Kubernetes (AKS). Веб-сайт — это статический веб-сайт с базовым стеком технологий HTML, CSS и JavaScript. Он не получает столько запросов, сколько другие службы, и обеспечивает надежный способ тестирования вариантов развертывания.
Примечание.
Код веб-приложения доступен в этом репозитории GitHub , если вы хотите дополнительно изучить исходный код. Кроме того, этот образец приложения будет развернут только в пуле узлов Linux.
Внимание
Для выполнения этого упражнения вам потребуется собственная подписка Azure, и вам может потребоваться плата. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись перед началом работы.
Создание манифеста развертывания
Создайте файл манифеста развертывания для развертывания приложения. Файл манифеста позволяет определить тип ресурса, который требуется развернуть, и все сведения, связанные с рабочей нагрузкой.
Kubernetes группирует контейнеры в логические структуры, называемые модулями pod, которые не имеют логики. Развертывания добавляют недостающую логику для создания приложения. Создадим файл развертывания.
Войдите в Azure Cloud Shell.
В Cloud Shell создайте файл манифеста для развертывания Kubernetes с именем
deployment.yamlс помощью встроенного редактора.touch deployment.yamlОткройте интегрированный редактор в Cloud Shell, введя
code .Откройте файл
deployment.yamlи добавьте следующий код в разделе YAML.# deployment.yaml apiVersion: apps/v1 # The API resource where this workload resides kind: Deployment # The kind of workload we're creating metadata: name: contoso-website # This will be the name of the deploymentВ этом коде вы добавили первые два ключа, чтобы сообщить Kubernetes
apiVersionиkindсоздаваемого манифеста.name— это имя развертывания. Используйте его для идентификации и запроса сведений о развертывании при использованииkubectl.Совет
Дополнительные сведения о
apiVersionи о том, какие значения добавлять в этот ключ, см. в официальной документации Kubernetes. Ищите ссылку в конце этого модуля.Развертывание создает оболочку для модуля pod. Определение шаблона используется для определения сведений о pod в файле манифеста. Шаблон помещается в файл манифеста под разделом спецификации развертывания.
Обновите файл
deployment.yamlтак, чтобы он соответствовал следующему YAML.# deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: contoso-website spec: template: # This is the template of the pod inside the deployment metadata: # Metadata for the pod labels: app: contoso-websiteМодули Pod не используют те же имена, что и развертывания. Имя модуля pod — это сочетание имени развертывания с случайным идентификатором, добавленным в конец.
Обратите внимание на использование ключа
labels. Добавьте ключlabels, чтобы разрешить развертываниям поиск и группирование модулей pod.Модуль pod создает оболочку для одного или нескольких контейнеров. Все модули pod имеют раздел спецификации, позволяющий определять контейнеры внутри этого модуля.
Обновите файл
deployment.yamlтак, чтобы он соответствовал следующему YAML.# deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: contoso-website spec: template: # This is the template of the pod inside the deployment metadata: labels: app: contoso-website spec: containers: # Here we define all containers - name: contoso-websiteКлюч
containersявляется массивом спецификаций контейнеров, так как модуль pod может содержать один или несколько контейнеров. Спецификация определяет , aimagename,resourcesportsи другие важные сведения о контейнере.Все запущенные модули pod следуют имени
contoso-website-<UUID>, где идентификатор UUID является созданным идентификатором для идентификации всех ресурсов уникальным образом.Рекомендуется определить минимальное и максимальное количество ресурсов, которые приложение может использовать из кластера. Для указания этих сведений используется ключ
resources.Обновите файл
deployment.yamlтак, чтобы он соответствовал следующему YAML.# deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: contoso-website spec: template: # This is the template of the pod inside the deployment metadata: labels: app: contoso-website spec: containers: - image: mcr.microsoft.com/mslearn/samples/contoso-website name: contoso-website resources: requests: # Minimum amount of resources requested cpu: 100m memory: 128Mi limits: # Maximum amount of resources requested cpu: 250m memory: 256MiОбратите внимание, что в разделе ресурсов можно указать минимальный объем ресурсов в качестве запроса и максимальное количество ресурсов в качестве ограничения.
Последний шаг — определить порты, предоставляемые этим контейнером за пределами
portsключа. Ключports— это массив объектов, что означает, что контейнер в модуле pod может предоставлять несколько портов с несколькими именами.Обновите файл
deployment.yamlтак, чтобы он соответствовал следующему YAML.# deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: contoso-website spec: template: # This is the template of the pod inside the deployment metadata: labels: app: contoso-website spec: nodeSelector: kubernetes.io/os: linux containers: - image: mcr.microsoft.com/mslearn/samples/contoso-website name: contoso-website resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi ports: - containerPort: 80 # This container exposes port 80 name: http # We named that port "http" so we can refer to it laterОбратите внимание на то, что для назначения имени порта используется ключ
name. Именование портов позволяет изменять доступный порт, не изменяя файлы, ссылающиеся на этот порт.Наконец, добавьте раздел селектора, чтобы определить рабочие нагрузки, которыми управляет развертывание. Ключ
selectorпомещается в раздел спецификации развертывания файла манифеста. Используйте ключmatchLabels, чтобы вывести список меток для всех модулей pod, управляемых развертыванием.Обновите файл
deployment.yamlтак, чтобы он соответствовал следующему YAML.# deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: contoso-website spec: selector: # Define the wrapping strategy matchLabels: # Match all pods with the defined labels app: contoso-website # Labels follow the `name: value` template template: # This is the template of the pod inside the deployment metadata: labels: app: contoso-website spec: nodeSelector: kubernetes.io/os: linux containers: - image: mcr.microsoft.com/mslearn/samples/contoso-website name: contoso-website resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi ports: - containerPort: 80 name: httpПримечание.
В кластере AKS с несколькими пулами узлов (Linux и Windows) файл манифеста развертывания, ранее перечисленный выше, определяет
nodeSelector, чтобы сообщить кластеру AKS запустить модуль pod примера приложения на узле, который может запускать контейнеры Linux.Узлы Linux не могут запускать контейнеры Windows и наоборот.
Сохраните файл манифеста и закройте редактор.
Применение манифеста
В Cloud Shell выполните команду
kubectl apply, чтобы отправить манифест развертывания в кластер.kubectl apply -f ./deployment.yamlРезультат выполнения этой команды должен выглядеть примерно так.
deployment.apps/contoso-website createdВыполните команду
kubectl get deploy, чтобы проверить успешность развертывания.kubectl get deploy contoso-websiteВ результате выполнения этой команды должна отобразиться таблица, которая должна выглядеть примерно так:
NAME READY UP-TO-DATE AVAILABLE AGE contoso-website 0/1 1 0 16sВыполните команду
kubectl get pods, чтобы проверить, запущен ли модуль pod.kubectl get podsВ результате выполнения этой команды должна отобразиться таблица, которая должна выглядеть примерно так:
NAME READY STATUS RESTARTS AGE contoso-website-7c58c5f699-r79mv 1/1 Running 0 63s