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
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.
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
- Navegue até o cluster conectado ao Arc.
- Selecione Extensões.
- Selecione o Armazenamento de contêineres do Azure habilitado pela extensão do Azure Arc.
- 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
- Navegue até a conta de armazenamento no portal do Azure.
- Selecione Controle de Acesso (IAM) .
- Selecione Adicionar+ -> Adicionar atribuição de função.
- Selecione Proprietário de Dados do Blob de Armazenamento e, em seguida, Avançar.
- Selecione + Selecionar Membros.
- Para adicionar sua ID da entidade de segurança aos Membros Selecionados: liste, cole a ID e selecione + ao lado da identidade.
- Clique em Selecionar.
- 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)
Crie um arquivo chamado
cloudIngestPVC.yaml
com os conteúdos a seguir. Edite a linhametadata.name
e crie um nome para sua declaração de volume persistente. Esse nome é referenciado na última linha dodeploymentExample.yaml
na próxima etapa. Além disso, atualize o valor demetadata.namespace
com o pod de consumo pretendido. Se você não tiver um pod de consumo pretendido, o valor demetadata.namespace
serádefault
. O parâmetrospec.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
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:
Obtenha o nome do Ingest Edge Volume usando o seguinte comando:
kubectl get edgevolumes
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 usandokubectl 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 emdeploymentExample.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 dostorageaccountendpoint
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
Para aplicar
edgeSubvolume.yaml
, execute:kubectl apply -f "edgeSubvolume.yaml"
Opcional: modificar a ingestPolicy
a partir do padrão
Se você quiser alterar o
ingestPolicy
do padrãoedgeingestpolicy-default
, crie um arquivo chamadomyedgeingest-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çãospec.ingestPolicy
do seuedgeSubvolume.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.
Para aplicar
myedgeingest-policy.yaml
, execute:kubectl apply -f "myedgeingest-policy.yaml"
Anexar seu aplicativo (aplicativo nativo do Kubernetes)
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 valorescontainers.name
evolumes.persistentVolumeClaim.claimName
. Se você atualizou o nome do caminho deedgeSubvolume.yaml
,exampleSubDir
na linha 33 deverá ser atualizado com seu novo nome de caminho. O parâmetrospec.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>
Para aplicar
deploymentExample.yaml
, execute:kubectl apply -f "deploymentExample.yaml"
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
dedeploymentExample.yaml
foi especificado como2
, dois pods aparecem usandokubectl get pods
. Você pode escolher qualquer nome de pod a ser usado para a próxima etapa.Execute o comando a seguir e substitua
POD_NAME_HERE
pelo valor copiado da última etapa:kubectl exec -it POD_NAME_HERE -- sh
Altere os diretórios para o caminho de montagem
/data
conforme especificado no seudeploymentExample.yaml
.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 deYOUR_PATH_NAME_HERE
pelos seus detalhes.Por exemplo, crie um arquivo chamado
file1.txt
e escreva nele usandoecho "Hello World" > file1.txt
.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.