Упражнение. Настройка среды Azure DevOps

Завершено

В этом разделе описана настройка организации Azure DevOps для продолжения работы с этим модулем и создание среды Azure Kubernetes Service (AKS) для развертывания приложения.

Чтобы достичь этих целей, выполните следующие действия.

  • Добавьте пользователя в организацию Azure DevOps.
  • Настройте проект Azure DevOps.
  • Управление рабочим процессом с помощью Azure Boards.
  • Создание ресурсов Azure с помощью Azure CLI.
  • Создайте переменные конвейера в Azure Pipelines.
  • Создайте подключение для аутентификации в Azure.
  • Обновите манифест развертывания Kubernetes.

Добавление пользователя в организацию

Для выполнения этого модуля требуется подписка Azure. Вы можете бесплатно приступить к работе с Azure.

Хотя не требуется работать с Azure DevOps, подписка Azure необходима для развертывания в ресурсах Azure с помощью Azure DevOps. Чтобы упростить процесс, используйте ту же учетную запись Майкрософт для входа в подписку Azure и организацию Azure DevOps.

Если вы входите в Azure и Azure DevOps, используя разные учетные записи Microsoft, вы все равно можете продолжить, добавив пользователя в организацию DevOps через учетную запись Microsoft, связанную с вашей подпиской на Azure. Дополнительные сведения см. в статье Добавление пользователей в организацию или проект. При добавлении пользователя выберите уровень доступа Базовый.

После добавления пользователя с уровнем доступа "Базовый" выйдите из Azure DevOps и войдите обратно с помощью учетной записи Майкрософт, связанной с подпиской Azure.

Получите проект Azure DevOps

В этом разделе вы запустите шаблон для создания проекта в Azure DevOps.

Запуск шаблона

Запустите шаблон, чтобы настроить проект Azure DevOps для этого модуля:

На портале демонстрационного генератора Azure DevOps выполните следующие действия, чтобы запустить шаблон:

  1. Выберите войдите и примите условия использования.

  2. На странице Создание проекта выберите свою организацию Azure DevOps и укажите имя проекта, например Space Game - web - Kubernetes.

    снимок экрана демонстрационного генератора Azure DevOps с процессом создания проекта.

  3. Выберите Да, я хочу вставить этот репозиторий, а затем авторизовать. Если появится окно, предоставьте разрешение на доступ к учетной записи GitHub.

    Важный

    Выбор этого параметра необходим для подключения шаблона к репозиторию GitHub. Выберите его, даже если вы уже форкнули репозиторий Space Game, так как шаблон будет использовать ваш существующий форк.

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

  5. Выберите Перейдите к проекту для доступа к проекту в Azure DevOps.

Важный

Модуль Очистка среды Azure DevOps в этом модуле включает важные шаги по очистке. Рекомендуется выполнить эти действия, чтобы избежать исчерпания бесплатных минут сборки. Даже если этот модуль не завершен, важно выполнить действия по очистке.

Настройка видимости проекта

Изначально, ваш форк репозитория Space Game на GitHub является общедоступным, в то время как проект, созданный шаблоном Azure DevOps, является приватным. Доступ к общедоступному репозиторию на GitHub может любой пользователь, а частный репозиторий доступен только вам и пользователям, с которыми вы хотите поделиться им. Аналогичным образом, в Azure DevOps общедоступные проекты предоставляют доступ только для чтения пользователям, не прошедшим проверку подлинности, в то время как частные проекты требуют предоставления пользователям доступа и проверки подлинности для доступа к службам.

На данный момент не требуется изменять какие-либо из этих параметров в целях этого модуля. Однако для личных проектов необходимо определить видимость и доступ, которые вы хотите предоставить другим пользователям. Например, если проект является открытым исходным кодом, вы можете сделать репозиторий GitHub и проект Azure DevOps общедоступным. Если проект является закрытым, обычно вы сделаете репозиторий GitHub и проект Azure DevOps закрытым.

Далее вы можете найти следующие ресурсы, которые помогут определить, какой вариант лучше всего подходит для вашего проекта:

Перемещение рабочего элемента в "Выполнение"

На этом шаге вы назначите рабочий элемент себе в Azure Boards и переместите его в состояние "Выполнение". В реальных сценариях вы и ваша команда создадите рабочие элементы в начале каждой итерации спринта или работы.

Назначение рабочих элементов предоставляет контрольный список для работы и дает другим участникам команды представление о ходе выполнения и оставшейся работе. Она также помогает применять ограничения на количество выполняемой работы (WIP), чтобы предотвратить выполнение командой избыточного количества работы одновременно.

  1. Перейдите к Boards в Azure DevOps, а затем выберите Boards в меню.

    снимок экрана Azure DevOps с расположением меню Boards.

  2. Назначьте себе рабочее задание "Создание многоконтейнерной версии веб-сайта, управляемой с помощью Kubernetes", выбрав стрелку вниз, расположенную в нижней части карточки.

    снимок экрана Azure Boards, показывающий расположение стрелки вниз.

  3. Перетащите рабочий элемент из столбца To Do в столбец Doing. Вы переместите задачу в столбец Готово в конце этого модуля после его завершения.

    снимок экрана доски Azure, на котором показана карточка в столбце «Выполняется».

Создание среды службы Azure Kubernetes

На этом шаге вы создадите необходимые ресурсы службы Azure Kubernetes для развертывания новой версии контейнера веб-сайта.

В предыдущем модуле создание конвейера выпуска с помощью Azure Pipelines, вы использовали портал Azure для создания ресурсов Azure. Хотя портал полезен для изучения возможностей Azure и выполнения основных задач, создание компонентов, таких как служба Azure Kubernetes, может быть длительным процессом.

В этом модуле вы используете Azure CLI для создания ресурсов, необходимых для развертывания и запуска приложения в службе Azure Kubernetes. Доступ к Azure CLI можно получить из терминала или с помощью Visual Studio Code. Однако в этом модуле вы обращаетесь к Azure CLI из Azure Cloud Shell. Cloud Shell — это интерфейс оболочки на основе браузера, размещенный в облаке, который предварительно настроен с помощью Azure CLI для использования с подпиской Azure.

Важный

Чтобы выполнить упражнения в этом модуле, вам потребуется собственная подписка Azure.

Запуск Cloud Shell

  1. Перейдите к порталу Azure и войдите.

  2. Выберите пункт Cloud Shell в меню, а затем выберите интерфейс Bash при появлении запроса.

    снимок экрана портала Azure с расположением элемента меню Cloud Shell.

Заметка

Cloud Shell требует, чтобы ресурс хранилища Azure сохранял все файлы, создаваемые в Cloud Shell. При первом открытии Cloud Shell вам будет предложено создать группу ресурсов, учетную запись хранения и общую папку файлов Azure. Эта настройка автоматически используется для всех будущих сеансов Cloud Shell.

Выбор региона Azure

Регион относится к одному или нескольким центрам обработки данных Azure, расположенным в географической области. Такие регионы, как восточная часть США, западная часть США и Северная Европа, являются примерами таких областей. Каждый ресурс Azure, включая экземпляр службы приложений, связан с регионом.

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

  1. В Cloud Shell выполните следующую команду, чтобы вывести список регионов, доступных в подписке Azure:

    az account list-locations \
      --query "[].{Name: name, DisplayName: displayName}" \
      --output table
    
  2. Выберите регион из столбца "Имя" в выходных данных, географически близкий к вам. Например, можно выбрать eastasia или westus2.

  3. Выполните следующую команду, чтобы задать регион по умолчанию. Замените РЕГИОН именем выбранного ранее региона.

    az configure --defaults location=<REGION>
    

    В этом примере westus2 устанавливается как регион по умолчанию.

    az configure --defaults location=westus2
    

Создание переменных Bash

Использование переменных Bash может сделать процесс установки более удобным и менее подверженным ошибкам. Этот подход помогает избежать случайного ввода, определяя общие текстовые строки как переменные, которые можно использовать во всем скрипте.

  1. В Cloud Shell создайте случайное число, чтобы упростить создание глобальных уникальных имен для определенных служб на следующем шаге.

    resourceSuffix=$RANDOM
    
  2. Создайте глобально уникальные имена для реестра контейнеров Azure и экземпляра службы Azure Kubernetes. Обратите внимание, что эти команды используют двойные кавычки, которые указывают Bash интерполировать переменные с помощью встроенного синтаксиса.

    registryName="tailspinspacegame${resourceSuffix}"
    aksName="tailspinspacegame-${resourceSuffix}"
    
  3. Создайте другую переменную Bash, чтобы сохранить имя группы ресурсов.

    rgName='tailspin-space-game-rg'
    
  4. Найдите последнюю версию AKS.

    az aks get-versions
    

    Обратите внимание на последнюю версию.

Создание ресурсов Azure

Заметка

В этом руководстве параметры сети по умолчанию используются для обучения. Эти параметры позволяют доступ к веб-сайту из Интернета. Однако на практике вы можете настроить виртуальную сеть Azure, которая размещает веб-сайт в сети, которая не является интернет-маршрутизируемой и доступна только вашей командой. Позже вы можете перенастроить сеть, чтобы сделать веб-сайт доступным для пользователей.

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

    az group create --name $rgName
    
  2. Выполните команду az acr create, чтобы создать реестр контейнеров Azure с указанным ранее именем:

    az acr create \
      --name $registryName \
      --resource-group $rgName \
      --sku Standard
    
  3. Выполните команду az aks create, чтобы создать экземпляр AKS с указанным ранее именем. Замените <latest-AKS-version> версией, указанной ранее.

    az aks create \
      --name $aksName \
      --resource-group $rgName \
      --enable-addons monitoring \
      --kubernetes-version <latest-AKS-version> \
      --generate-ssh-keys
    

    Заметка

    Завершение развертывания AKS может занять 10–15 минут.

  4. Создайте переменную для хранения идентификатора субъекта-службы, настроенного для экземпляра AKS:

    clientId=$(az aks show \
      --resource-group $rgName \
      --name $aksName \
      --query "identityProfile.kubeletidentity.clientId" \
      --output tsv)
    
  5. Создайте переменную для хранения идентификатора реестра контейнеров Azure:

    acrId=$(az acr show \
      --name $registryName \
      --resource-group $rgName \
      --query "id" \
      --output tsv)
    
  6. Выполните команду az acr list, чтобы получить URL-адрес сервера входа для экземпляра Реестра контейнеров Azure (ACR):

    az acr list \
     --resource-group $rgName \
     --query "[].{loginServer: loginServer}" \
     --output table
    

    Обязательно запишите сервер входа для реестра контейнеров. Эти сведения потребуются позже при настройке конвейера. Ниже приведен пример:

    LoginServer                      
    --------------------------------
    tailspinspacegame4692.azurecr.io
    
  7. Выполните команду az role assignment create, чтобы создать назначение ролей для авторизации кластера AKS для подключения к реестру контейнеров Azure:

    az role assignment create \
      --assignee $clientId \
      --role AcrPull \
      --scope $acrId
    

Важно

Модуль Очистка среды Azure DevOps в этом модуле включает важные шаги по очистке. Рекомендуется выполнить эти действия, чтобы избежать исчерпания бесплатных минут сборки. Даже если вы не завершите этот модуль, важно выполнить действия по очистке.

Создание группы переменных

В этом разделе вы добавите переменную в конвейер для хранения имени реестра контейнеров Azure. Рекомендуется определять имя экземпляра реестра контейнеров Azure как переменную в конфигурации конвейера, а не использовать жесткую кодировку. Это делает конфигурацию более повторно используемой, и в случае, если имя экземпляра изменится, вы можете легко обновить переменную и запустить конвейер, не изменяя конфигурацию.

  1. Войдите в организацию Azure DevOps и перейдите к проекту.

  2. Выберите Pipelines, а затем выберите Библиотеку в левой панели навигации.

    снимок экрана Azure Pipelines с параметром меню

  3. Выберите группы переменных, а затем выберите + группа переменных, чтобы добавить новую группу переменных.

  4. В разделе Свойства введите Release для имени группы переменных.

  5. В разделе Переменные выберите Добавить.

  6. Введите RegistryName в качестве имени переменной, а в качестве значения введите сервер входа в ваш реестр контейнеров Azure, например tailspinspacegame4692.azurecr.io.

  7. В верхней части страницы выберите Сохранить, чтобы сохранить переменную конвейера. Это пример того, как может выглядеть ваша группа переменных.

    снимок экрана Azure Pipeline с группой переменных. Группа содержит одну переменную.

Создание подключений к сервисам

Следующим шагом является создание подключений к службам, которые позволяют Azure Pipelines получать доступ к реестру контейнеров Azure и экземплярам службы Azure Kubernetes. Создавая эти подключения к службе, Azure Pipelines может перемещать ваши контейнеры и командовать кластеру AKS извлекать их, чтобы обновить развернутый сервис.

Важный

Убедитесь, что вы вошли на портал Azure и Azure DevOps с той же учетной записью Майкрософт.

Создание подключения службы реестра Docker

  1. Войдите в организацию Azure DevOps и перейдите к проекту.

  2. Выберите параметры проекта в нижнем углу страницы.

  3. Выберите подключение служб в разделе Трубопроводы.

  4. Выберите Новое подключение к службе, затем выберите Реестр Docker, а затем выберите Далее.

  5. В верхней части страницы выберите реестр контейнеров Azure, а затем выберите служебный принципал в качестве типа проверки подлинности.

  6. Введите следующие значения для каждого параметра:

    Настройка Ценность
    Подписка Подписка Azure
    Реестр контейнеров Azure Выберите тот, который вы создали ранее
    Имя подключения службы Подключение реестра контейнеров
  7. Убедитесь, что установлен флажок Предоставить разрешение на доступ ко всем конвейерам.

  8. Выберите Сохранить, когда закончите.

Создание подключения службы ARM

Теперь вы создадите подключение службы Azure Resource Manager для проверки подлинности в кластере AKS. Мы используем подключение службы ARM вместо Kubernetes, поскольку начиная с версии Kubernetes 1.24 больше не создаются долговременные токены по умолчанию. Дополнительные сведения см. в этой публикации блога DevOps: руководство по соединению со службой для клиентов AKS с использованием задач Kubernetes.

  1. Выберите нового подключения к службе, выберите Azure Resource Manager, а затем выберите Далее.

  2. Выберите субъект-служба (автоматически), а затем нажмите кнопку Далее.

  3. Выберите подписку для уровня области.

  4. Введите следующие значения для каждого параметра.

    Настройка Ценность
    Подписка Подписка Azure
    Группа ресурсов Выберите тот, который вы создали ранее
    Имя подключения службы подключение к кластеру Kubernetes
  5. Убедитесь, что отмечен флажок Предоставить разрешение на доступ ко всем конвейерам.

  6. Выберите Сохранить после того как закончите.

Создание среды конвейера

  1. Выберите конвейеры, а затем выберите среды.

    снимок экрана Azure Pipelines с опцией меню

  2. Выберите Создать среду, чтобы создать новую среду.

  3. В поле Имя введите Dev.

  4. Выберите None из раздела Resource, а затем выберите Создать, чтобы создать среду конвейера.

Обновление манифеста развертывания Kubernetes

В этом разделе вы обновите манифест Kubernetes deployment.yml, чтобы указать созданный ранее реестр контейнеров.

  1. Перейдите к вашей учетной записи GitHub, затем выберите репозиторий, который вы форкнули для этого модуля: mslearn-tailspin-spacegame-web-kubernetes.

  2. Откройте файл манифестов /deployment.yml в режиме редактирования.

    снимок экрана GitHub с расположением значка режима редактирования.

  3. Измените ссылки на образ контейнера, чтобы использовать логин-сервер ACR. В следующем манифесте в качестве примера используется tailspinspacegame2439.azurecr.io.

    apiVersion : apps/v1
    kind: Deployment
    metadata:
      name: web
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: web
      template:
        metadata:
          labels:
            app: web
        spec:
          containers:
            - name: web
              image: tailspinspacegame4692.azurecr.io/web
              ports:
              - containerPort: 80
    
    apiVersion : apps/v1
    kind: Deployment
    metadata:
      name: leaderboard
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: leaderboard
      template:
        metadata:
          labels:
            app: leaderboard
        spec:
          containers:
            - name: leaderboard
              image: tailspinspacegame4692.azurecr.io/leaderboard
              ports:
              - containerPort: 80
    
  4. Зафиксируйте изменения в ветви main.