Поделиться через


Краткое руководство. Добавление флагов функций в рабочие нагрузки в службе 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\Shared . Вставьте новый <feature> тег между элементами панели навигации " Главная " и " Конфиденциальность" , как показано в выделенных строках ниже.

    <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. Обновите флаг бета-функции в магазине конфигурации приложений. Включите флаг, выбрав флажок в разделе "Включено".

  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 см. в справочнике по поставщику Kubernetes конфигурации приложений Azure.

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