Бөлісу құралы:


Краткое руководство. Добавление флагов функций в рабочие нагрузки в Служба Azure Kubernetes

В этом кратком руководстве вы создадите флаг компонента в Конфигурация приложений Azure и используйте его для динамического управления видимостью новой веб-страницы в приложении ASP.NET Core, работающем в AKS, без перезапуска или повторного развертывания.

Необходимые компоненты

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

Создание флага компонента

Добавьте флаг компонента с именем Beta в хранилище Конфигурация приложений и оставьте метку и описание со значениями по умолчанию. Дополнительные сведения о добавлении флагов компонентов в хранилище с помощью портал Azure или интерфейса командной строки см. в разделе "Создание флага функции".

Снимок экрана: создание флага компонента с именем Beta.

Использование флага компонента

В этом разделе вы будете использовать флаги функций в простом веб-приложении ASP.NET и запустить его в Служба Azure Kubernetes (AKS).

  1. Перейдите в каталог проекта, созданный в кратком руководстве, и выполните следующую команду, чтобы добавить ссылку на пакет NuGet Microsoft.FeatureManagement.AspNetCore версии 3.2.0 или более поздней версии.

    dotnet add package Microsoft.FeatureManagement.AspNetCore
    
  2. Откройте program.cs и добавьте управление функциями в коллекцию служб приложения путем вызова AddFeatureManagement.

    // Existing code in Program.cs
    // ... ...
    
    // Add a JSON configuration source 
    builder.Configuration.AddJsonFile("config/mysettings.json", reloadOnChange: true, optional: false); 
    
    // Add feature management to the container of services.
    builder.Services.AddFeatureManagement();
    
    var app = builder.Build();
    
    // The rest of existing code in program.cs
    // ... ...
    

    Добавьте using Microsoft.FeatureManagement; в начало файла, если он отсутствует.

  3. Добавьте новую пустую страницу Razor с именем Beta в каталоге Pages . Он включает два файла Beta.cshtml и Beta.cshtml.cs.

    Откройте Beta.cshtml и обновите его с помощью следующей разметки:

    @page
    @model MyWebApp.Pages.BetaModel
    @{
        ViewData["Title"] = "Beta Page";
    }
    
    <h1>This is the beta website.</h1>
    

    Откройте Beta.cshtml.cs и добавьте FeatureGate атрибут в BetaModel класс. Атрибут FeatureGate гарантирует , что бета-страница доступна только в том случае, если включен флаг бета-функции . Если флаг бета-функции не включен, страница возвращает значение 404 Not Found.

    using Microsoft.AspNetCore.Mvc.RazorPages;
    using Microsoft.FeatureManagement.Mvc;
    
    namespace MyWebApp.Pages
    {
        [FeatureGate("Beta")]
        public class BetaModel : PageModel
        {
            public void OnGet()
            {
            }
        }
    }   
    
  4. Откройте Pages/_ViewImports.cshtml и зарегистрируйте вспомогательный компонент диспетчера функций с помощью директивы @addTagHelper :

    @addTagHelper *, Microsoft.FeatureManagement.AspNetCore
    

    Приведенный выше код позволяет использовать вспомогательную функцию тега <feature> в CSHTML-файлах проекта.

  5. Откройте файл _Layout.cshtml в общем каталоге Pages\. Вставьте новый тег <feature> между пунктами навигации Home и Privacy, как показано ниже.

    <div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
        <ul class="navbar-nav flex-grow-1">
            <li class="nav-item">
                <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
            </li>
            <feature name="Beta">
                <li class="nav-item">
                    <a class="nav-link text-dark" asp-area="" asp-page="/Beta">Beta</a>
                </li>
            </feature>
            <li class="nav-item">
                <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
            </li>
        </ul>
    </div>
    

    Тег <feature> гарантирует , что элемент меню "Бета-версия " отображается только в том случае, если включен флаг бета-функции .

  6. Контейнеризируйте приложение и отправьте образ в Реестр контейнеров Azure.

  7. Разверните приложение. Обновите браузер и веб-страницу будут выглядеть следующим образом:

    Снимок экрана: поставщик Kubernetes после использования configMap без флага компонента.

Загрузка флагов функций с помощью поставщика Kubernetes

  1. Обновите файл appConfigurationProvider.yaml, расположенный в каталоге развертывания, со следующим содержимым.

    apiVersion: azconfig.io/v1
    kind: AzureAppConfigurationProvider
    metadata:
      name: appconfigurationprovider-sample
    spec:
      endpoint: <your-app-configuration-store-endpoint>
      target:
        configMapName: configmap-created-by-appconfig-provider
        configMapData: 
          type: json
          key: mysettings.json
      auth:
        workloadIdentity:
          managedIdentityClientId: <your-managed-identity-client-id>
      featureFlag:
        selectors:
          - keyFilter: 'Beta'
        refresh:
          enabled: true
    

    Совет

    Если в разделе нет selectors никаких указанийfeatureFlag, поставщик Kubernetes не загружает флаги функций из хранилища Конфигурация приложений. Интервал обновления по умолчанию флагов компонентов составляет 30 секунд при featureFlag.refresh включении. Это поведение можно настроить с помощью featureFlag.refresh.interval параметра.

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

    kubectl apply -f ./Deployment -n appconfig-demo
    
  3. Обновите флаг бета-функции в хранилище Конфигурация приложений. Включите флаг, выбрав поле проверка box в разделе "Включено".

  4. После обновления браузера несколько раз обновленный контент станет видимым после обновления ConfigMap в течение 30 секунд.

    Снимок экрана: поставщик Kubernetes после использования configMap с включенным флагом компонента.

  5. Выберите меню " Бета-версия ". Он приведет вас к бета-сайту, который вы включили динамически.

    Снимок экрана: бета-страница поставщика Kubernetes после использования configMap.

Очистка ресурсов

Удалите Конфигурация приложений поставщика Kubernetes из кластера AKS, если вы хотите сохранить кластер AKS.

helm uninstall azureappconfiguration.kubernetesprovider --namespace azappconfig-system

Если вы не планируете в дальнейшем использовать ресурсы, созданные при работе с этой статьей, удалите созданную группу ресурсов, чтобы избежать расходов.

Внимание

Удаление группы ресурсов — процесс необратимый. Группа ресурсов и все содержащиеся в ней ресурсы удаляются без возможности восстановления. Будьте внимательны, чтобы случайно не удалить не те ресурсы или группу ресурсов. Если ресурсы для работы с этой статьей созданы в группе ресурсов, которая содержит другие нужные ресурсы, удалите каждый ресурс отдельно в соответствующей области ресурса, чтобы не удалять группу ресурсов.

  1. Войдите на портал Azure и выберитеГруппы ресурсов.
  2. Введите имя группы ресурсов в поле Фильтровать по имени.
  3. В списке результатов выберите имя группы ресурсов, чтобы просмотреть общие сведения.
  4. Выберите команду Удалить группу ресурсов.
  5. Подтвердите операцию удаления группы ресурсов. Введите имя группы ресурсов, которую необходимо удалить, и нажмите Удалить.

Через некоторое время группа ресурсов и все ее ресурсы будут удалены.

Следующие шаги

В этом кратком руководстве вы:

  • Добавлена возможность управления функциями в приложение ASP.NET Core, работающее в Служба Azure Kubernetes (AKS).
  • Подключение кластер AKS в хранилище Конфигурация приложений с помощью поставщика Конфигурация приложений Kubernetes.
  • Создайте ConfigMap с ключевыми значениями и флагами функций из хранилища Конфигурация приложений.
  • Запустите приложение с динамической конфигурацией из хранилища Конфигурация приложений без изменения кода приложения.

Дополнительные сведения о поставщике kubernetes Конфигурация приложений Azure см. в Конфигурация приложений Azure справочнике по поставщику Kubernetes.

Дополнительные сведения о возможностях управления функциями см. в следующем руководстве.