Управление очисткой ресурсов издателя

В этой статье описывается новая функция Azure Operator Service Manager (AOSM), которая обнаруживает неиспользуемые артефакты издателя и автоматизирует удаление ресурсов. Эта функция помогает уменьшить размер хранилища ресурсов, что снижает общие затраты на обслуживание. Эта функция также повышает безопасность, своевременно очищая ненужные ресурсы, предотвращая дальнейший доступ или потенциальное вмешательство.

Исторический подход к очистке ресурсов издателя

Перед этой функцией для очистки ресурсов издателя AOSM пользователь сначала выполняет запрос Azure Resource Graph (ARG), чтобы проверить ссылки на используемые целевые ресурсы. Например, проверьте, используется ли версия проектирования сетевых служб (NSDV) сетевой службой сайта (SNS). Если запрос ARG отвечает без ссылок, пользователь выполняет команду для удаления целевого ресурса. Хотя большинство типов ресурсов поддерживают обнаружение ссылок, ссылки на артефакты в хранилище артефактов этого не поддерживают, что делает безопасное удаление артефактов сложной задачей. К другим историческим недостаткам относятся:

  • NSDV и NFDV имеют только ссылки на артефакты, что делает запрос на обнаружение ссылок артефактов невозможным.
  • Артефакты, загруженные напрямую в хранилище артефактов, связанное с реестром контейнеров Azure (ACR), не создают ссылок.
  • Когда графики Helm ссылаются на артефакты в репозиториях, не относящихся к Azure ACR, трудно разобраться в этих ссылках.

Новый подход к очистке ресурсов издателя

Эта функция представляет автоматизированный двухэтапный процесс, который сначала снимает метки, а затем удаляет неиспользуемые артефакты при удалении artifact manifest. Для поддержки этой возможности тип ресурса artifact-manifest расширяется, чтобы включать ссылки между артефактом, таким как диаграмма Helm или образ контейнера, и другими ресурсами, такими как версия проектирования сетевых функций (NFDV) или NSDV.

При попытке удалить artifact manifest, проверяются ссылки, чтобы убедиться, что артефакт не связан с какими-либо ресурсами, которые находятся в использовании. Если эта проверка проходит, артефакты помечаются для удаления (без меток), и сообщение об успешном завершении возвращается. Если эта проверка завершается ошибкой, запрос на удаление приводит к сбою и возвращает сообщение об ошибке, указывающее, что артефакт найден для использования, а также ресурс, который по-прежнему использует его. Следующий фрагмент кода является примером сообщения об ошибке:

The resource '<artifactmanifest resourceId>' has some resources attached to it. The dependent resources are :"<NSDV/NFDV resource ids>"

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

Изменения типа ресурса манифеста артефакта

Для поддержки расширенных artifact-manifest спецификаций типов ресурсов изменения вводятся в API поставщика ресурсов, начиная с версии 2025-03-30. В следующих разделах описывается поведение AOSM до и после реализации этого изменения функции. Миграция на этот новый расширенный тип ресурса необязателен, а обсуждение миграции представлено далее в этой статье.

Манифест артефакта использует сильную корреляцию

Тип artifact manifest ресурса имеет сильную корреляцию с артефактами helm (изображениями и диаграммами), отправленными в хранилище артефактов, которые поддерживает ACR. Все артефакты, используемые nfApp, хранятся в экземплярах манифеста артефактов с уникальной версией. Это создает ссылочные подключения между артефактами и nfApps.

Перед 2025-03-30

В типе ресурса не существует строгой artifact manifest корреляции.

Repositories

  • nginx
  • testapp
"artifacts": [ 
            { 
                "artifactName": "testapp", 
                "artifactType": "OCIArtifact", 
                "artifactVersion": "1.0.0" 
            }, 
            { 
                "artifactName": "nginx", 
                "artifactType": "OCIArtifact", 
                "artifactVersion": "1.0.0" 
            } 

От 2025-03-30

Тип ресурса artifact manifest проверяет артефакты на artifact manifest пути. Нет изменений в artifact manifest теле.

Repositories

  • cnfmanifest/nginx
  • cnfmanifest/testapp
"artifacts": [ 
            { 
                "artifactName": "testapp", 
                "artifactType": "OCIArtifact", 
                "artifactVersion": "1.0.0" 
            }, 
            { 
                "artifactName": "nginx", 
                "artifactType": "OCIArtifact", 
                "artifactVersion": "1.0.0" 
            } 
        ]

Маркер карты области артефакта манифеста

Тип artifact manifest ресурса создает маркеры карты областей с именем артефакта, включенным в путь.

Перед 2025-03-30

Маркеры карты области не были созданы.

Repositories

  • nginx
  • testapp

От 2025-03-30

Маркеры области с путем создаются одновременно с artifact manifest.

Repositories

  • cnfmanifest/nginx
  • cnfmanifest/testapp

Путь отправки манифеста артефакта

Все изображения, принадлежащие к объекту artifact manifest , отправляются с помощью artifact manifest имени в целевом пути.

Перед 2025-03-30

При отправке артефактов не требуется путь.

Repositories

  • nginx
  • testapp

От 2025-03-30

Требования к пути, применяемые для артефактов в artifact-manifest типе ресурса.

Repositories

  • cnfmanifest/nginx
  • cnfmanifest/testapp

Тег манифеста артефакта для удаления

artifact manifest Удаление типа ресурса распакует все артефакты, содержащиеся в этой версии манифеста.

Перед 2025-03-30

При удалении artifact manifest типа ресурса не внесены изменения в резервную копию ACR для хранилища артефактов.

От 2025-03-30

Артефакты отключаются в хранилище артефактов при удалении artifact manifest типа ресурса.

Условие удаления манифеста артефакта

artifact manifest Тип ресурса можно удалить только в том случае, если ссылки на ресурсы не связаны.

Перед 2025-03-30

Не удалось предотвратить удаление artifact manifest типа ресурса.

От 2025-03-30

Для успешного удаления artifact manifest не должно содержать ссылок на ресурсы с тегами.

Очистка манифеста артефакта

Очистка неподключенных артефактов с помощью команды az acr purge Azure CLI с учетом соответствующих параметров планирования.

Перед 2025-03-30

Отсутствие условия предотвратило очистку удаленных артефактов.

От 2025-03-30

Следующая команда Azure CLI может использоваться для очистки артефактов. Команда может быть запланирована через crontab или выполнить по запросу.

az acr manifest list-metadata -n myRegistry –r myRepository --query "[?tags[0]==null].digest" -o tsv | %{ az acr repository delete -n myRegistry -image myRepository@$_ --yes }

Ссылка на обновленный манифест артефакта NSDV/NFDV

NSDV и NFDV включают ссылку на artifact manifest тип ресурса.

Перед 2025-03-30

NSDV и NFDV ссылаются на тип ресурса artfact-store.

 "artifactStore": { 
    "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testgroup/providers/Microsoft.HybridNetwork/publishers/testpublisher/artifactStores/as "
 }

От 2025-03-30

NSDV и NFDV ссылаются на artfact manifest тип ресурса.

 "artifactStore": { 
    "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testgroup/providers/Microsoft.HybridNetwork/publishers/testpublisher/artifactStores/as/artifactManifests/cnfmanifest"   } 

Версия API NSDV/NFDV

Ссылка на artifact manifest NSDV и NFDV должна быть создана с 2025-03-30 версией или более поздней.

Перед 2025-03-30

Нет такого ограничения.

От 2025-03-30

Для создания artifact manifest типов ресурсов необходимо использовать соответствующую версию API.

Перенос в новый манифест объекта

Используйте следующий список задач для переноса развернутого artifact manifest ресурса, созданного до версии 20025-03-30API, в новый artifact manifest тип ресурса, доступный после версии 2025-03-30API:

  • Подготовьте платформу, установив расширение версии оператора сетевых функций (NFO) 3.0.3131-220 или более позднюю.
  • Для существующих ресурсов, созданных с помощью старых API, NSDVs, NFDVs и artifact manifest должны быть обновлены до более новой версии API.
    • Сначала измените ссылки на хранилище артефактов на artifact manifest ссылки.
    • Затем обновите развернутые artifact manifests ссылки на артефакты.
    • Наконец, отправьте артефакты в правильный artifact manifest путь.
  • Действие очистки издателя поддерживает только ресурсы, созданные с помощью версии API 2025-03-30
    • Ресурсы, созданные в старой версии, можно обновить до 2025-03-30 версии.
    • Только артефакты, отправленные после обновления, считаются для очистки.
    • Артефакты, отправленные до обновления, не считаются для очистки

Замечание

Ресурсы, созданные с помощью NSDV и NFDV, которые по-прежнему имеют ссылку на хранилища артефактов вместо манифестов артефактов, нельзя использовать для поиска устаревших артефактов, если они не обновлены.

Запрос для обнаружения ссылки на манифест артефакта

Следующий запрос ARG можно использовать для перечисления всех NFDV или NSDV, содержащих ссылки на артефакт-манифест. Если ресурс отображается в этих выходных данных, попытка удалить артефакт заканчивается неудачей.

resources
 | where type == "microsoft.hybridnetwork/publishers/networkfunctiondefinitiongroups/networkfunctiondefinitionversions" or type  == "microsoft.hybridnetwork/publishers/networkservicedesigngroups/networkservicedesignversions"
 | where properties contains "<artifactmanifestresoruceid>"
 | project id,subscriptionId,resourceGroup

При необходимости, чтобы выполнить запрос к определенному NFDV или NSDV, вставьте в запрос ссылку с идентификатором ресурса.

resources
 | where type == "microsoft.hybridnetwork/publishers/networkfunctiondefinitiongroups/networkfunctiondefinitionversions" or type  == "microsoft.hybridnetwork/publishers/networkservicedesigngroups/networkservicedesignversions"
 | where id == "nfdv id" or id == "nsdv id"
 | where properties contains "<artifactmanifestresoruceid>"
 | project id,subscriptionId,resourceGroup