Usar o driver da CSI (Interface de Armazenamento de Contêiner) do Armazenamento de Blobs do Azure

O driver da CSI (Interface de Armazenamento de Contêiner) do Armazenamento de Blobs do Azure é um driver em conformidade com a especificação CSI usado pelo AKS (Serviço de Kubernetes do Azure) para gerenciar o ciclo de vida do Armazenamento de Blobs do Azure. A CSI é um padrão para expor sistemas de blocos e de armazenamento de arquivos arbitrários a cargas de trabalho em contêineres no Kubernetes.

Ao adotar e usar a CSI, o AKS pode escrever, implantar e iterar plug-ins para expor novos sistemas de armazenamento ou aprimorar os existentes no Kubernetes. O uso de drivers CSI no AKS evita ter que tocar no código principal do Kubernetes e aguardar os ciclos de lançamento dele.

Quando você monta o Armazenamento de Blobs do Azure como um sistema de arquivos em um contêiner ou pod, isso permite que você use o armazenamento de blobs com diversos aplicativos que funcionam em grandes quantidades de dados não estruturados. Por exemplo:

  • Dados do arquivo de log
  • Imagens, documentos e streaming de vídeo ou áudio
  • Dados de recuperação de desastre

Os dados no armazenamento de objetos podem ser acessados por aplicativos usando o protocolo BlobFuse ou NFS (Network File System) 3.0. Antes da introdução do driver da CSI do Armazenamento de Blobs do Azure, a única opção era instalar manualmente um driver sem suporte para acessar o Armazenamento de Blobs por meio do aplicativo em execução no AKS. Quando o driver da CSI do Armazenamento de Blobs do Azure está habilitado no AKS, há duas classes de armazenamento internas: azureblob-fuse-premium e azureblob-nfs-premium.

Para criar um cluster do AKS com suporte aos drivers da CSI, confira Drivers da CSI no AKS. Para saber mais sobre as diferenças de acesso entre cada tipo de armazenamento do Azure usando o protocolo NFS, consulte Comparar acesso aos Arquivos do Azure, Armazenamento de Blobs e Azure NetApp Files com o NFS.

Recursos do driver da CSI do Armazenamento de Blobs do Azure

O driver da CSI do Armazenamento de Blobs do Azure dá suporte aos seguintes recursos:

  • Protocolo NFS (Network File System) e BlobFuse versão 3.0

Antes de começar

Observação

Se o blobfuse-proxy não estiver habilitado durante a instalação do driver de software livre, a desinstalação do driver de software livre interromperá as montagens de blobfuse existentes. No entanto, as montagens NFS permanecerão não afetadas.

Habilitar o driver CSI em um cluster AKS novo ou existente

Usando a CLI do Azure, é possível habilitar o driver CSI do Armazenamento de Blobs em um cluster AKS novo ou existente antes de configurar um volume persistente para uso por pods no cluster.

Para habilitar o driver em um novo cluster, inclua o parâmetro --enable-blob-driver com o comando az aks create, conforme mostrado no exemplo a seguir:

az aks create --enable-blob-driver -n myAKSCluster -g myResourceGroup

Para habilitar o driver em um cluster existente, inclua o parâmetro --enable-blob-driver com o comando az aks update, conforme mostrado no exemplo a seguir:

az aks update --enable-blob-driver -n myAKSCluster -g myResourceGroup

Você será solicitado a confirmar que não há um driver CSI de blob de código aberto instalado. Depois de confirmar, pode levar vários minutos para concluir essa ação. Após a conclusão, você deverá ver na saída o status Habilitando o driver no cluster. O exemplo a seguir é semelhante à seção que indica os resultados do comando anterior:

"storageProfile": {
    "blobCsiDriver": {
      "enabled": true
    },

Desabilitar o driver de CSI em um cluster do AKS existente

Usando a CLI do Azure, você pode desabilitar o driver CSI de armazenamento de Blobs em um cluster AKS existente após remover o volume persistente do cluster.

Para desabilitar o driver em um cluster existente, inclua o parâmetro --disable-blob-driver com o comando az aks update, conforme mostrado no exemplo a seguir:

az aks update --disable-blob-driver -n myAKSCluster -g myResourceGroup

Usar um volume persistente com o Armazenamento de Blobs do Azure

Um PV (volume persistente) representa um armazenamento provisionado para uso com pods do Kubernetes. Um PV pode ser usado por um ou vários pods e pode ser provisionado estática ou dinamicamente. Se vários pods precisarem de acesso simultâneo ao mesmo volume de armazenamento, use o Armazenamento de Blobs do Azure para se conectar por meio do NFS (Network File System) ou blobfuse. Este artigo mostra como criar dinamicamente um contêiner de armazenamento de blobs do Azure para uso por vários pods em um cluster do AKS.

Para obter mais informações sobre o Kubernetes, veja Opções de armazenamento para aplicativos no AKS.

Criar dinamicamente PVs de armazenamento de blobs do Azure usando as classes de armazenamento internas

Uma classe de armazenamento é usada para definir como um contêiner de Armazenamento de Blobs do Azure é criado. Uma conta de armazenamento é criada automaticamente no grupo de recursos do nó para uso com a classe de armazenamento para reter o contêiner de armazenamento de blobs do Azure. Escolha a seguinte redundância de armazenamento SKU do Azure para skuName:

  • Standard_LRS: armazenamento com redundância local
  • Premium_LRS: Armazenamento com redundância local Premium
  • Standard_ZRS: armazenamento com redundância de zona Standard
  • Premium_ZRS: armazenamento com redundância de zona Premium
  • Standard_GRS: armazenamento com redundância geográfica
  • Standard_RAGRS: armazenamento com redundância geográfica e acesso de leitura padrão (Standard-RAGRS)

Quando você usa drivers da CSI de armazenamento no AKS, há duas outras StorageClasses internas que usam o driver de armazenamento da CSI de Blob do Azure.

A política de recuperação em ambas as classes de armazenamento garante que o armazenamento de blobs subjacente do Azure seja excluído quando o respectivo PV for excluído. As classes de armazenamento também configuram o contêiner para ser expansível por padrão, pois o parâmetro set allowVolumeExpansion é definido como true.

Use o comando kubectl get sc para ver as classes de armazenamento. A exemplo a seguir mostra as classes de armazenamento azureblob-fuse-premium e azureblob-nfs-premium disponíveis dentro de um cluster do AKS:

NAME                                  PROVISIONER       RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION     AGE
azureblob-fuse-premium               blob.csi.azure.com   Delete          Immediate              true                   23h
azureblob-nfs-premium                blob.csi.azure.com   Delete          Immediate              true                   23h

Para usar essas classes de armazenamento, crie uma PVC e o respectivo pod que a referencie e utilize. Uma PVC é usada para provisionar automaticamente o armazenamento com base em uma classe de armazenamento. Uma PVC pode usar uma das classes de armazenamento criadas previamente ou uma classe de armazenamento definida pelo usuário para criar um contêiner de armazenamento blobs do Azure com a SKU, o tamanho e o protocolo desejados para comunicação. Quando você cria uma definição de pod, a PVC é especificada para solicitar o armazenamento desejado.

Usando um StatefulSet

Um StatefulSet pode ser usado para que um volume de armazenamento persista para sua carga de trabalho. Isso facilita a correspondência de volumes existentes com novos Pods que substituem os que falharam. Os exemplos a seguir demonstram como configurar um StatefulSet para armazenamento de Blobs usando o blobfuse ou o protocolo NFS.

Pré-requisitos

  • A identidade do Painel de controle do cluster do AKS (ou seja, o nome do cluster do AKS) é adicionada à função Colaborador na VNet e no grupo de segurança de rede.
  1. Crie um arquivo chamado azure-blob-nfs-ss.yaml e copie no YAML a seguir.

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: statefulset-blob-nfs
      labels:
        app: nginx
    spec:
      serviceName: statefulset-blob-nfs
      replicas: 1
      template:
        metadata:
          labels:
            app: nginx
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
            - name: statefulset-blob-nfs
              image: mcr.microsoft.com/oss/nginx/nginx:1.19.5
              volumeMounts:
                - name: persistent-storage
                  mountPath: /mnt/blob
      updateStrategy:
        type: RollingUpdate
      selector:
        matchLabels:
          app: nginx
      volumeClaimTemplates:
        - metadata:
            name: persistent-storage
          spec:
            storageClassName: azureblob-nfs-premium
            accessModes: ["ReadWriteMany"]
            resources:
              requests:
                storage: 100Gi
    
  2. Crie StatefulSet com o comando kubectl create:

    kubectl create -f azure-blob-nfs-ss.yaml
    

Próximas etapas