Usar o driver CSI (Container Storage Interface) de armazenamento de Blob do Azure

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

Ao adotar e usar o CSI, o AKS agora pode escrever, implantar e iterar plug-ins para expor sistemas de armazenamento novos ou melhorar os existentes no Kubernetes. Usar drivers CSI no AKS evita ter que tocar no código principal do Kubernetes e esperar por seus ciclos de lançamento.

Quando você monta o armazenamento de Blob do Azure como um sistema de arquivos em um contêiner ou pod, ele permite que você use o armazenamento de blob com vários aplicativos que trabalham 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 desastres

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

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

Recursos de driver CSI de armazenamento de Blob do Azure

O driver CSI de armazenamento de Blob do Azure dá suporte aos seguintes recursos:

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

Antes de começar

  • Você precisa da CLI do Azure versão 2.42 ou posterior instalada e configurada. Executar az --version para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).

  • Execute as etapas neste link se você instalou anteriormente o driver de código aberto do Armazenamento de Blob CSI para acessar o armazenamento de Blob do Azure a partir do cluster.

Nota

Se o blobfuse-proxy não estiver habilitado durante a instalação do driver de código aberto, a desinstalação do driver de código aberto interromperá as montagens de blobfuse existentes. No entanto, as montagens NFS permanecerão inalteradas.

Habilitar driver CSI em um cluster AKS novo ou existente

Usando a CLI do Azure, você pode habilitar o driver CSI de armazenamento de Blob 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 com o --enable-blob-driveraz aks create comando, 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 com o --enable-blob-driveraz aks update comando, 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 esta ação. Quando estiver concluído, você verá na saída o status de ativação do driver no cluster. O exemplo a seguir é semelhante à seção que indica os resultados do comando anterior:

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

Desativar driver CSI em um cluster AKS existente

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

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

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

Usar um volume persistente com o armazenamento de Blob do Azure

Um volume persistente (PV) representa uma parte do armazenamento que é provisionada para uso com pods do Kubernetes. Um PV pode ser usado por um ou vários pods e pode ser provisionado dinamicamente ou estaticamente. Se vários pods precisarem de acesso simultâneo ao mesmo volume de armazenamento, você poderá usar o armazenamento de Blob do Azure para se conectar usando o NFS (Network File System) ou o blobfuse. Este artigo mostra como criar dinamicamente um contêiner de armazenamento de Blob do Azure para uso por vários pods em um cluster AKS.

Para obter mais informações sobre volumes do Kubernetes, consulte Opções de armazenamento para aplicativos no AKS.

Crie dinamicamente PVs de armazenamento de Blob do Azure usando as classes de armazenamento internas

Uma classe de armazenamento é usada para definir como um contêiner de armazenamento de Blob do Azure é criado. Uma conta de armazenamento é criada automaticamente no grupo de recursos do nó para uso com a classe de armazenamento para armazenar o contêiner de armazenamento de Blob do Azure. Escolha uma das seguintes SKUs de redundância de armazenamento do Azure para skuName:

  • Standard_LRS: Armazenamento padrão com redundância local
  • Premium_LRS: Armazenamento com redundância local premium
  • Standard_ZRS: Armazenamento redundante de zona padrão
  • Premium_ZRS: Armazenamento redundante de zona Premium
  • Standard_GRS: Armazenamento com redundância geográfica padrão
  • Standard_RAGRS: Armazenamento padrão com redundância geográfica de acesso de leitura

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

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

Use o comando kubectl get sc para ver as classes de armazenamento. O exemplo a seguir mostra as azureblob-fuse-premium classes e azureblob-nfs-premium armazenamento disponíveis em um cluster 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 um PVC e seu respetivo pod que faça referência e os utilize. Um PVC é usado para provisionar automaticamente o armazenamento com base em uma classe de armazenamento. Um PVC pode usar uma das classes de armazenamento pré-criadas ou uma classe de armazenamento definida pelo usuário para criar um contêiner de armazenamento de Blob do Azure para a SKU, tamanho e protocolo desejados para se comunicar com ele. Quando você cria uma definição de pod, o PVC é especificado para solicitar o armazenamento desejado.

Usando um StatefulSet

Para que um volume de armazenamento persista para sua carga de trabalho, você pode usar um StatefulSet. Isso facilita a correspondência de volumes existentes com novos Pods que substituem qualquer um que tenha falhado. Os exemplos a seguir demonstram como configurar um StatefulSet para armazenamento de Blob usando Blobfuse ou o protocolo NFS.

Pré-requisitos

  1. Crie um arquivo nomeado azure-blob-nfs-ss.yaml e copie no seguinte YAML.

    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 o StatefulSet com o comando kubectl create:

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

Próximos passos