你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

发布者资源清理管理

本文介绍新的 Azure 操作员服务管理器(AOSM)功能,该功能可检测未使用的发布者项目并自动删除资源。 此功能有助于减小资源存储的大小,降低整体服务成本。 此功能还可以通过及时清除不必要的资源、防止进一步访问或潜在的篡改来提高安全性。

发布者资源清理历史方法

在此功能之前,若要清理 AOSM 发布者资源,用户首先执行 Azure Resource Graph (ARG) 查询以检查目标资源的使用引用。 例如,检查站点网络服务是否仍使用网络服务设计版本 (NSDV)。 如果 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 的资源类型规范,从版本 2025-03-30开始,资源提供程序 API 将引入更改。 以下部分介绍 AOSM 在实现此功能更改之前和之后的行为。 迁移到此新的扩展资源类型是可选的,本文稍后会讨论迁移。

项目清单使用强关联

artifact manifest 资源类型与上传到支持 ACR 的项目存储中的 Helm 项目(图像和图表)具有很强的相关性。 nfApp 使用的所有构件都保存在具有唯一版本的构件清单实例中。 这会生成项目与 nfApps 之间的引用连接。

2025-03-30 之前

artifact manifest 资源类型中不存在强关联。

存储库

  • 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 没有变化。

存储库

  • 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 之前

未创建范围映射令牌。

存储库

  • nginx
  • testapp

2025-03-30

包含路径信息的范围映射标记与 artifact manifest 同时创建。

存储库

  • cnfmanifest/nginx
  • cnfmanifest/testapp

项目清单上传路径

所有属于 artifact manifest 的图像都使用目标路径中的 artifact manifest 名称进行上传。

2025-03-30 之前

上传项目时没有路径要求。

存储库

  • nginx
  • testapp

2025-03-30

artifact-manifest 资源类型中的项目需遵守的路径要求。

存储库

  • cnfmanifest/nginx
  • cnfmanifest/testapp

项目清单 - 取消标记项目以删除

删除 artifact manifest 资源类型会取消标记该清单版本中包含的所有项目。

2025-03-30 之前

删除 artifact manifest 资源类型时,不会对支持项目存储的 ACR 进行更改。

2025-03-30

删除 artifact manifest 资源类型时,将取消标记支持项目存储的 ACR 中的项目。

工件清单删除条件

仅当没有关联引用资源时,才能删除 artifact manifest 资源类型。

2025-03-30 之前

没有阻止删除 artifact manifest 资源类型的条件。

2025-03-30

为成功删除,artifact manifest 不得包含任何标记的资源引用。

项目清单 - 清除取消标记的项目

根据适当的计划参数,使用 Azure CLI 命令 az acr purge 清除取消标记的项目。

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 引用项目存储资源类型。

 "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"   } 

NSDV/NFDV API 版本

必须使用 artifact manifest 或更高版本创建 NSDV 和 NFDV 引用的 2025-03-30

2025-03-30 之前

没有这种限制。

2025-03-30

必须使用正确的 API 版本来创建 artifact manifest 资源类型。

迁移到新工件清单

使用以下任务列表将部署的资源(在 API 版本artifact manifest之前创建)迁移到 20025-03-30 API 版本artifact manifest之后可用的新2025-03-30资源类型:

  • 通过安装网络函数操作员 (NFO) 扩展版本 3.0.3131-220 或更高版本来准备平台。
  • 对于使用旧 API 创建的现有资源,应将 NSDV、NFDV 和 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,请使用资源 ID 将引用插入查询。

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