Упражнение. Развертывание приложения в кластере Службы Azure Kubernetes

Завершено

В этом упражнении разверните веб-сайт вашей компании в качестве тестового приложения на Служба Azure Kubernetes (AKS). Веб-сайт — это статический веб-сайт с базовым стеком технологий HTML, CSS и JavaScript. Он не получает столько запросов, сколько другие службы, и обеспечивает надежный способ тестирования вариантов развертывания.

Примечание.

Код веб-приложения доступен в этом репозитории GitHub, если вы хотите более подробно изучить исходный код. Кроме того, этот образец приложения будет развернут только в пуле узлов Linux.

Внимание

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

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

Создайте файл манифеста развертывания для развертывания приложения. Файл манифеста позволяет определить тип ресурса, который требуется развернуть, и все сведения, связанные с рабочей нагрузкой.

Kubernetes группирует контейнеры в логические структуры, называемые модулями pod, которые не имеют логики. Развертывания добавляют недостающую логику для создания приложения. Создадим файл развертывания.

  1. Войдите в Azure Cloud Shell.

  2. В Cloud Shell создайте файл манифеста для развертывания Kubernetes с именем deployment.yaml с помощью встроенного редактора.

    touch deployment.yaml
    
  3. Откройте интегрированный редактор в Cloud Shell, введя code .

  4. Откройте файл 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. Ищите ссылку в конце этого модуля.

  5. Развертывание создает оболочку для модуля 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.

  6. Модуль 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 может содержать один или несколько контейнеров. Спецификация определяет , a imagename, resourcesportsи другие важные сведения о контейнере.

    Все запущенные модули pod следуют имени contoso-website-<UUID>, где идентификатор UUID является созданным идентификатором для идентификации всех ресурсов уникальным образом.

  7. Рекомендуется определить минимальное и максимальное количество ресурсов, которые приложение может использовать из кластера. Для указания этих сведений используется ключ 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
    

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

  8. Последний шаг — определить порты, предоставляемые этим контейнером за пределами 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. Именование портов позволяет изменять доступный порт, не изменяя файлы, ссылающиеся на этот порт.

  9. Наконец, добавьте раздел селектора, чтобы определить рабочие нагрузки, которыми управляет развертывание. Ключ 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 и наоборот.

  10. Сохраните файл манифеста и закройте редактор.

Применение манифеста

  1. В Cloud Shell выполните команду kubectl apply, чтобы отправить манифест развертывания в кластер.

    kubectl apply -f ./deployment.yaml
    

    Результат выполнения этой команды должен выглядеть примерно так.

    deployment.apps/contoso-website created
    
  2. Выполните команду kubectl get deploy, чтобы проверить успешность развертывания.

    kubectl get deploy contoso-website
    

    В результате выполнения этой команды должна отобразиться таблица, которая должна выглядеть примерно так:

    NAME              READY   UP-TO-DATE   AVAILABLE   AGE
    contoso-website   0/1     1            0           16s
    
  3. Выполните команду kubectl get pods, чтобы проверить, запущен ли модуль pod.

    kubectl get pods
    

    В результате выполнения этой команды должна отобразиться таблица, которая должна выглядеть примерно так:

    NAME                               READY   STATUS    RESTARTS   AGE
    contoso-website-7c58c5f699-r79mv   1/1     Running   0          63s