Gerenciamento de limpeza de recursos do publicador

Este artigo descreve um novo recurso do AOSM (Azure Operator Service Manager) que detecta artefatos de editor não utilizados e automatiza a exclusão de recursos. Esse recurso ajuda a reduzir o tamanho do armazenamento de recursos, reduzindo os custos gerais de serviço. Esse recurso também melhora a segurança, eliminando recursos desnecessários em tempo hábil, impedindo o acesso adicional ou possíveis violações.

Abordagem histórica para limpeza de recursos do Publicador

Antes desse recurso, para realizar a limpeza dos recursos do editor do AOSM, um usuário primeiro executa uma consulta no ARG (Azure Resource Graph) para verificar se há referências em uso dos recursos de destino. Por exemplo, verifique se uma versão de design de serviço de rede (NSDV) ainda é usada por um SNS (Serviços de Rede do Site). Se a consulta ARG responder sem referências, o usuário executará um comando para excluir o recurso de destino. Embora a maioria dos tipos de recursos ofereça suporte à descoberta de referência, as referências de artefato em um artfact-store não o fizeram, tornando a limpeza segura de artefatos desafiadora. Outras deficiências históricas incluem:

  • O NSDV e o NFDV têm apenas referências de armazenamento de artefatos, tornando impossível a consulta para descoberta de referências de artefatos.
  • Os artefatos carregados diretamente no ACR (Registro de Contêiner do Azure) do repositório de artefatos não criam referências.
  • Quando pacotes do Helm fazem referência a artefatos em ACRs que não são do Azure, é difícil identificar essas referências.

Nova abordagem de limpeza de recursos do Publicador

Esse recurso apresenta um processo automatizado de duas etapas que primeiro desmarca e depois limpa artefatos não utilizados quando um artifact manifest é excluído. Para dar suporte a essa funcionalidade, o tipo de recurso artifact-manifest é expandido para incluir referências entre um artefato, como um pacote do Helm ou uma imagem de contêiner, e outros recursos, como NFDV (Network Function Design Version) ou NSDV.

Após a tentativa de exclusão de um artifact manifest, essas referências são verificadas para garantir que o artefato não esteja associado a nenhum recurso em uso. Se essa validação for aprovada, os artefatos serão marcados para exclusão (não registrados) e uma mensagem de êxito será retornada. Se essa validação falhar, a solicitação de exclusão resultará em uma falha e retornará uma mensagem de erro indicando que o artefato está em uso, juntamente com o recurso que ainda o usa. O snippet a seguir é um exemplo de uma mensagem de falha:

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

Para limpar os artefatos não registrados, um comando da CLI do Azure deve ser executado. Esse comando é executado pelo administrador, automatizado via pipeline de cliente ou agendado com base em tempo usando crontab. Essa operação de limpeza atrasada permite um tempo extra para validar manualmente a precisão da exclusão ou simplesmente cria um buffer para que uma solicitação de exclusão seja revertida.

Alterações no tipo de recurso de manifesto do artefato

Para dar suporte às especificações de tipo de recurso expandidas artifact-manifest , as alterações são introduzidas na API do provedor de recursos, começando pela versão 2025-03-30. As seções a seguir descrevem o comportamento do AOSM antes e depois, implementando essa alteração de recurso. A migração para esse novo tipo de recurso expandido é opcional e a migração é discutida mais adiante neste artigo.

O manifesto do artefato usa correlação forte

O tipo de recurso artifact manifest tem uma correlação forte com artefatos helm (imagens e gráficos) carregados em um ACR de backup do repositório de artefatos. Todos os artefatos usados por uma nfApp são mantidos em instâncias de manifesto de artefato com versões únicas. Isso cria conexões de referência entre artefatos e nfApps.

Antes de 2025-03-30

Não existe nenhuma correlação forte no tipo de recurso artifact manifest.

Repositories

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

Em 2025-03-30

O tipo de recurso artifact manifest verifica artefatos no caminho artifact manifest. Nenhuma alteração no corpo artifact manifest.

Repositories

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

Token de mapa do escopo do manifesto do artefato

O tipo de recurso artifact manifest cria tokens de mapa de escopo com o nome do artefato incluído no caminho.

Antes de 2025-03-30

Nenhum token de mapa de escopo foi criado.

Repositories

  • nginx
  • testapp

Em 2025-03-30

Tokens de mapa de escopo com caminho são criados ao mesmo tempo que o artifact manifest.

Repositories

  • cnfmanifest/nginx
  • cnfmanifest/testapp

Caminho de carregamento do manifesto do artefato

Todas as imagens que pertencem a um artifact manifest são carregadas usando o nome artifact manifest no caminho de destino.

Antes de 2025-03-30

Nenhum requisito de caminho ao carregar artefatos.

Repositories

  • nginx
  • testapp

Em 2025-03-30

Requisitos de caminho impostos para artefatos no tipo de recurso artifact-manifest.

Repositories

  • cnfmanifest/nginx
  • cnfmanifest/testapp

Desmarcar o manifesto do artefato para excluir

A exclusão de um tipo de recurso artifact manifest desmarca todos os artefatos contidos nessa versão de manifesto.

Antes de 2025-03-30

Nenhuma alteração feita no ACR de backup para um repositório de artefatos ao excluir um tipo de recurso artifact manifest.

Em 2025-03-30

Os artefatos não são registrados no ACR de backup do repositório de artefatos ao excluir um tipo de recurso artifact manifest.

Condição de exclusão de manifesto do artefato

O tipo de recurso artifact manifest só poderá ser excluído se nenhum recurso de referência estiver associado.

Antes de 2025-03-30

Nenhuma condição impediu a exclusão do tipo de recurso artifact manifest.

Em 2025-03-30

Para uma exclusão bem-sucedida, o artifact manifest não deve conter nenhuma referência de recurso marcada.

Limpeza do manifesto de artefatos sem marcação

Limpe artefatos sem marcação usando o comando az acr purge da CLI do Azure, considerando os parâmetros de agendamento apropriados.

Antes de 2025-03-30

Nenhuma condição impediu a limpeza de artefatos excluídos.

Em 2025-03-30

O comando da CLI do Azure a seguir pode ser usado para limpar artefatos. O comando pode ser agendado por meio do crontab ou executado sob demanda.

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 }

Referência atualizada de manifesto de artefato NSDV/NFDV

NSDV e NFDV incluem referência ao tipo de recursoartifact manifest.

Antes de 2025-03-30

O NSDV e o NFDV fazem referência ao tipo de recurso artfact-store.

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

Em 2025-03-30

O NSDV e o NFDV fazem referência ao tipo de recurso artfact manifest.

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

Versão da API NSDV/NFDV

O NSDV e o NFDV referenciados artifact manifest devem ser criados com a versão 2025-03-30 ou superior.

Antes de 2025-03-30

Nenhuma restrição desse tipo.

Em 2025-03-30

A versão adequada da API deve ser usada para criar os tipos de recurso artifact manifest.

Migrando para o novo manifesto do artefacto

Use a seguinte lista de tarefas para migrar um recurso implantado artifact manifest , criado antes da versão 20025-03-30da API, para o novo artifact manifest tipo de recurso, disponível após a versão 2025-03-30da API:

  • Prepare a plataforma instalando a versão 3.0.3131-220 da extensão NFO (operador de função de rede) ou posterior.
  • Para recursos existentes criados com APIs mais antigas, os NSDVs, NFDVs e artifact manifest devem ser atualizados para uma versão mais recente da API.
    • Primeiro, altere as referências do repositório de artefatos para referências artifact manifest.
    • Em seguida, atualize o artifact manifests com as referências de artefato expandidas.
    • Por fim, carregue os artefatos no caminho apropriado artifact manifest.
  • A ação de limpeza do publicador dá suporte apenas aos recursos criados com a versão 2025-03-30 da API
    • Os recursos criados na versão mais antiga podem ser atualizados para a versão 2025-03-30.
    • Somente artefatos carregados após a atualização são considerados para limpeza.
    • Artefatos carregados antes da atualização não são considerados para limpeza

Observação

Os recursos criados com NSDV e NFDV, que ainda têm referência a repositórios de artefatos em vez de manifestos de artefato, não podem ser usados para descobrir artefatos desativados, a menos que sejam atualizados.

Consulta para identificar a referência do manifesto do artefato

A seguinte consulta ARG pode ser usada para listar todos os NFDVs ou NSDVs que contêm referências ao manifesto de artefato. Se um recurso aparecer nessa saída, uma tentativa de excluir o manifesto do artefato falhará.

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

Opcionalmente, para consultar um NFDV ou NSDV específico, insira uma referência na consulta com a ID do recurso.

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