Compartilhar via


Configuração do Cloud Ingest Edge Volumes

Este artigo descreve a configuração para o Cloud Ingest Edge Volumes (upload de blob com limpeza local).

O que é o Cloud Ingest Edge Volumes?

O Cloud Ingest Edge Volumes facilita a ingestão de dados ilimitada da borda para o blob, incluindo o ADLSgen2. Os arquivos gravados neste tipo de armazenamento são transferidos de maneira contínua para o armazenamento de blobs e, uma vez confirmado o upload, são posteriormente removidos localmente. Essa remoção garante a disponibilidade de espaço para novos dados. Além disso, essa opção de armazenamento dá suporte à integridade de dados em ambientes desconectados, o que permite o armazenamento local e a sincronização após a reconexão à rede.

Por exemplo, você pode gravar um arquivo no seu PVC de ingestão na nuvem, e um processo executa uma varredura para verificar novos arquivos a cada minuto. Uma vez identificado, o arquivo é enviado para upload no seu destino de blob designado. Após a confirmação de um upload bem-sucedido, o Cloud Ingest Edge Volume aguarda cinco minutos e, então, exclui a versão local do arquivo.

Pré-requisitos

  1. Crie uma conta de armazenamento seguindo as instruções aqui.

    Observação

    Ao criar sua conta de armazenamento, é recomendável criá-la no mesmo grupo de recursos e região/localização do cluster do Kubernetes.

  2. Crie um contêiner na conta de armazenamento que você criou na anteriormente, seguindo as instruções aqui.

Configurar identidade de extensão

Os volumes de borda permitem o uso de uma identidade de extensão atribuída pelo sistema para acesso ao armazenamento de blobs. Esta seção descreve como usar a identidade de extensão atribuída pelo sistema para permitir acesso à sua conta de armazenamento, permitindo que você faça upload de volumes de ingestão na nuvem para esses sistemas de armazenamento.

É recomendável que você use a Identidade de Extensão. Se o destino final for o armazenamento de blobs ou o ADLSgen2, confira as instruções a seguir. Se o destino final for o OneLake, siga as instruções em Configurar o OneLake para a Identidade de Extensão.

Embora não seja recomendável, se você preferir usar a autenticação baseada em chave, siga as instruções em Autenticação baseada em chave.

Obter identidade de extensão

Portal do Azure

  1. Navegue até o cluster conectado ao Arc.
  2. Selecione Extensões.
  3. Selecione o Armazenamento de contêineres do Azure habilitado pela extensão do Azure Arc.
  4. Observe a ID da entidade de segurança nos Detalhes da Extensão do Cluster.

Configurar a conta de armazenamento de blobs para a identidade de extensão

Adicionar permissões de identidade de extensão a uma conta de armazenamento

  1. Navegue até a conta de armazenamento no portal do Azure.
  2. Selecione Controle de Acesso (IAM) .
  3. Selecione Adicionar+ -> Adicionar atribuição de função.
  4. Selecione Proprietário de Dados do Blob de Armazenamento e, em seguida, Avançar.
  5. Selecione + Selecionar Membros.
  6. Para adicionar sua ID da entidade de segurança aos Membros Selecionados: liste, cole a ID e selecione + ao lado da identidade.
  7. Clique em Selecionar.
  8. Para examinar e atribuir permissões, selecione Avançar e, em seguida, Examinar + Atribuir.

Criar uma PVC (declaração de volume persistente para ingestão na nuvem)

  1. Crie um arquivo chamado cloudIngestPVC.yaml com os conteúdos a seguir. Edite a linha metadata.name e crie um nome para sua declaração de volume persistente. Esse nome é referenciado na última linha do deploymentExample.yaml na próxima etapa. Além disso, atualize o valor de metadata.namespace com o pod de consumo pretendido. Se você não tiver um pod de consumo pretendido, o valor de metadata.namespace será default. O parâmetro spec.resources.requests.storage determina o tamanho do volume persistente. São 2 GB neste exemplo, mas podem ser modificados para atender às suas necessidades:

    Observação

    Use apenas letras minúsculas e traços. Para obter mais informações, confira a documentação de nomenclatura de objetos do Kubernetes.

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      ### Create a name for your PVC ###
      name: <create-persistent-volume-claim-name-here>
      ### Use a namespace that matched your intended consuming pod, or "default" ###
      namespace: <intended-consuming-pod-or-default-here>
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 2Gi
      storageClassName: cloud-backed-sc
    
  2. Para aplicar cloudIngestPVC.yaml, execute:

    kubectl apply -f "cloudIngestPVC.yaml"
    

Anexar um subvolume ao volume de borda

Para criar um subvolume usando a identidade de extensão para se conectar ao contêiner da sua conta de armazenamento, siga o seguinte processo:

  1. Obtenha o nome do Ingest Edge Volume usando o seguinte comando:

    kubectl get edgevolumes
    
  2. Crie um arquivo chamado edgeSubvolume.yaml e copie o seguinte conteúdo. Essas variáveis devem ser atualizadas com suas informações:

    Observação

    Use apenas letras minúsculas e traços. Para obter mais informações, confira a documentação de nomenclatura de objetos do Kubernetes.

    • metadata.name: crie um nome para o seu subvolume.
    • spec.edgevolume: esse nome foi recuperado da etapa anterior usando kubectl get edgevolumes.
    • spec.path: crie seu próprio nome de subdiretório no caminho de montagem. O exemplo a seguir já contém um exemplo de nome (exampleSubDir). Se você alterar esse nome de caminho, a linha 33 em deploymentExample.yaml precisará ser atualizada com o novo nome do caminho. Se você optar por renomear o caminho, não use uma barra precedente.
    • spec.container: o nome do contêiner em sua conta de armazenamento.
    • spec.storageaccountendpoint: navegue até sua conta de armazenamento no portal do Azure. Na página Visão geral, próximo à parte superior direita da tela, selecione Exibição JSON. Você poderá encontrar o link do storageaccountendpoint em properties.primaryEndpoints.blob. Copie o link inteiro, por exemplo, https://mytest.blob.core.windows.net/.
    apiVersion: "arccontainerstorage.azure.net/v1"
    kind: EdgeSubvolume
    metadata:
      name: <create-a-subvolume-name-here>
    spec:
      edgevolume: <your-edge-volume-name-here>
      path: exampleSubDir # If you change this path, line 33 in deploymentExample.yaml must be updated. Don't use a preceding slash.
      auth:
        authType: MANAGED_IDENTITY
      storageaccountendpoint: "https://<STORAGE ACCOUNT NAME>.blob.core.windows.net/"
      container: <your-blob-storage-account-container-name>
      ingestPolicy: edgeingestpolicy-default # Optional: See the following instructions if you want to update the ingestPolicy with your own configuration
    
  3. Para aplicar edgeSubvolume.yaml, execute:

    kubectl apply -f "edgeSubvolume.yaml"
    

Opcional: modificar a ingestPolicy a partir do padrão

  1. Se você quiser alterar o ingestPolicy do padrão edgeingestpolicy-default, crie um arquivo chamado myedgeingest-policy.yaml com o conteúdo a seguir. As seguintes variáveis devem ser atualizadas com suas preferências:

    Observação

    Use apenas letras minúsculas e traços. Para obter mais informações, confira a documentação de nomenclatura de objetos do Kubernetes.

    • metadata.name: crie um nome para a ingestPolicy. Esse nome deve ser atualizado e referenciado na seção spec.ingestPolicy do seu edgeSubvolume.yaml.
    • spec.ingest.order: a ordem na qual arquivos sujos são carregados. Esse é o melhor esforço possível, mas não é garantido (o padrão é o mais antigo primeiro). As opções de ordem são: o mais antigo primeiro ou o mais recente primeiro.
    • spec.ingest.minDelaySec: o número mínimo de segundos antes de um arquivo sujo ser qualificado para ingestão (o padrão é 60). Esse número pode variar entre 0 e 31536000.
    • spec.eviction.order: como os arquivos são removidos (o padrão é não ordenados). As opções para a ordem de remoção são: não ordenados ou nunca.
    • spec.eviction.minDelaySec: o número de segundos antes de um arquivo limpo ser qualificado para a remoção (o padrão é 300). Esse número pode variar entre 0 e 31536000.
    apiVersion: arccontainerstorage.azure.net/v1
    kind: EdgeIngestPolicy
    metadata:
      name: <create-a-policy-name-here> # This must be updated and referenced in the spec.ingestPolicy section of the edgeSubvolume.yaml
    spec:
      ingest:
        order: <your-ingest-order>
        minDelaySec: <your-min-delay-sec>
      eviction:
        order: <your-eviction-order>
        minDelaySec: <your-min-delay-sec>
    

    Para saber mais sobre essas especificações, consulte Definir política de ingestão.

  2. Para aplicar myedgeingest-policy.yaml, execute:

    kubectl apply -f "myedgeingest-policy.yaml"
    

Anexar seu aplicativo (aplicativo nativo do Kubernetes)

  1. Para configurar um único pod genérico (aplicativo nativo do Kubernetes) em relação à declaração de volume persistente (PVC), crie um arquivo chamado deploymentExample.yaml com o seguinte conteúdo. Modifique os valores containers.name e volumes.persistentVolumeClaim.claimName. Se você atualizou o nome do caminho de edgeSubvolume.yaml, exampleSubDir na linha 33 deverá ser atualizado com seu novo nome de caminho. O parâmetro spec.replicas determina o número de pods de réplica a serem criados. Nesse exemplo, são 2, mas podem ser modificados para atender às suas necessidades:

    Observação

    Use apenas letras minúsculas e traços. Para obter mais informações, confira a documentação de nomenclatura de objetos do Kubernetes.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: cloudingestedgevol-deployment ### This must be unique for each deployment you choose to create.
    spec:
      replicas: 2
      selector:
        matchLabels:
          name: wyvern-testclientdeployment
      template:
        metadata:
          name: wyvern-testclientdeployment
          labels:
            name: wyvern-testclientdeployment
        spec:
          affinity:
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
              - labelSelector:
                  matchExpressions:
                  - key: app
                    operator: In
                    values:
                    - wyvern-testclientdeployment
                topologyKey: kubernetes.io/hostname
          containers:
            ### Specify the container in which to launch the busy box. ###
            - name: <create-a-container-name-here>
              image: mcr.microsoft.com/azure-cli:2.57.0@sha256:c7c8a97f2dec87539983f9ded34cd40397986dcbed23ddbb5964a18edae9cd09
              command:
                - "/bin/sh"
                - "-c"
                - "dd if=/dev/urandom of=/data/exampleSubDir/acsaingesttestfile count=16 bs=1M && while true; do ls /data &>/dev/null || break; sleep 1; done"
              volumeMounts:
                ### This name must match the volumes.name attribute below ###
                - name: wyvern-volume
                  ### This mountPath is where the PVC is attached to the pod's filesystem ###
                  mountPath: "/data"
          volumes:
             ### User-defined 'name' that's used to link the volumeMounts. This name must match volumeMounts.name as previously specified. ###
            - name: wyvern-volume
              persistentVolumeClaim:
                ### This claimName must refer to your PVC metadata.name (Line 5)
                claimName: <your-pvc-metadata-name-from-line-5-of-pvc-yaml>
    
  2. Para aplicar deploymentExample.yaml, execute:

    kubectl apply -f "deploymentExample.yaml"
    
  3. Use kubectl get pods para localizar o nome do seu pod. Copie esse nome para usar na próxima etapa.

    Observação

    Porque spec.replicas de deploymentExample.yaml foi especificado como 2, dois pods aparecem usando kubectl get pods. Você pode escolher qualquer nome de pod a ser usado para a próxima etapa.

  4. Execute o comando a seguir e substitua POD_NAME_HERE pelo valor copiado da última etapa:

    kubectl exec -it POD_NAME_HERE -- sh
    
  5. Altere os diretórios para o caminho de montagem /data conforme especificado no seu deploymentExample.yaml.

  6. Você deverá ver um diretório com o nome que você especificou como seu path na Etapa 2 da seção Anexar um subvolume ao volume de borda. Altere os diretórios para /YOUR_PATH_NAME_HERE, substituindo o valor de YOUR_PATH_NAME_HERE pelos seus detalhes.

  7. Por exemplo, crie um arquivo chamado file1.txt e escreva nele usando echo "Hello World" > file1.txt.

  8. No portal do Azure, navegue até sua conta de armazenamento e localize o contêiner especificado na Etapa 2 da seção Anexar um subvolume ao volume de borda. Ao selecionar seu contêiner, você deve encontrar file1.txt preenchido dentro do contêiner. Se o arquivo ainda não tiver aparecido, aguarde aproximadamente 1 minuto; os Volumes de Borda esperam um minuto antes de serem carregados.

Próximas etapas

Após concluir essas etapas, você pode começar a monitorar sua implantação usando o Azure Monitor e o Monitoramento do Kubernetes, ou monitoramento de terceiros com Prometheus e Grafana.

Monitorar a implantação