Compartilhar via


Usar drivers de disco CSI (Interface de Armazenamento de Contêiner) no AKS habilitado pelo Azure Arc

> Aplica-se a: AKS no Azure Stack HCI 22H2, AKS no Windows Server, AKS no Azure Local, versão 23H2

Este artigo descreve como usar as classes de armazenamento internas da CSI (Interface de Armazenamento em Contêiner) para criar dinamicamente volumes persistentes de disco e criar classes de armazenamento personalizadas no AKS habilitado pelo Arc.

Visão geral do CSI no AKS habilitado pelo Arc

A CSI (Interface de Armazenamento de Contêiner) é um padrão para expor sistemas de blocos e de armazenamento de arquivos arbitrários a cargas de trabalho em contêineres no Kubernetes. Usando o CSI, o AKS habilitado pelo Arc pode gravar, implantar e iterar plug-ins para expor novos sistemas de armazenamento. O uso do CSI também pode melhorar os existentes no Kubernetes sem precisar tocar no código principal do Kubernetes e aguardar seus ciclos de lançamento.

Os drivers CSI de disco e arquivo usados pelo AKS Arc são drivers compatíveis com a especificação CSI.

O suporte ao driver de armazenamento CSI no AKS Arc permite que você use:

  • Discos do AKS Arc que você pode usar para criar um recurso do Kubernetes DataDisk . Eles são montados como ReadWriteOnce, portanto, estão disponíveis apenas para um único pod por vez. Para volumes de armazenamento que podem ser acessados por vários pods simultaneamente, use arquivos AKS Arc.

  • Arquivos do AKS Arc que você pode usar para montar um compartilhamento SMB ou NFS em pods. Eles são montados como ReadWriteMany, para que você possa compartilhar dados entre vários nós e pods. Eles também podem ser montados como ReadWriteOnce com base na especificação PVC (declaração de volume persistente).

Criar dinamicamente volumes persistentes de disco usando a classe de armazenamento interna

Uma classe de armazenamento é usada para definir como uma unidade de armazenamento é criada dinamicamente com um volume persistente. Para obter mais informações sobre como usar classes de armazenamento, consulte Classes de armazenamento do Kubernetes.

No AKS Arc, a classe de armazenamento padrão é criada por padrão e usa CSI para criar volumes com suporte de VHDX. A política de recuperação garante que o VHDX subjacente seja excluído quando o volume persistente que o usou for excluído. A classe de armazenamento também configura os volumes persistentes para serem expansíveis; Você só precisa editar a declaração de volume persistente com o novo tamanho.

Para aproveitar essa classe de armazenamento, crie uma PVC e um pod respectivo que faça referência a ela e a use. Uma PVC é usada para provisionar automaticamente o armazenamento com base em uma classe de armazenamento. Uma PVC pode usar uma das classes de armazenamento pré-criadas ou uma classe de armazenamento definida pelo usuário para criar um VHDX do tamanho desejado. Quando você cria uma definição de pod, a PVC é especificada para solicitar o armazenamento desejado.

Criar classe de armazenamento personalizada para discos

A classe de armazenamento padrão é adequada para os cenários mais comuns. No entanto, em alguns casos, talvez você queira criar sua própria classe de armazenamento que armazena PVs em um local específico mapeado para uma camada de desempenho específica.

Se você tiver cargas de trabalho do Linux (pods), deverá criar uma classe de armazenamento personalizada com o parâmetro fsType: ext4. Esse requisito se aplica às versões 1.19 e 1.20 ou posteriores do Kubernetes. O exemplo a seguir mostra uma definição de classe de armazenamento personalizada com fsType parâmetro definido:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: aks-hci-disk-custom
parameters:
  blocksize: "33554432"
  container: SqlStorageContainer
  dynamic: "true"
  group: clustergroup-summertime
  hostname: TESTPATCHING-91.sys-sqlsvr.local
  logicalsectorsize: "4096"
  physicalsectorsize: "4096"
  port: "55000"
  fsType: ext4
provisioner: disk.csi.akshci.com
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true  

Se você criar uma classe de armazenamento personalizada, poderá especificar o local em que deseja armazenar PVs. Se a infraestrutura subjacente for o Azure Local, esse novo local poderá ser um volume apoiado por SSDs/NVMe de alto desempenho ou um volume com custo otimizado apoiado por HDDs.

A criação de uma classe de armazenamento personalizada é um processo de duas etapas:

  1. Crie um novo caminho de armazenamento usando os stack-hci-vm storagepath cmdlets para criar, mostrar e listar os caminhos de armazenamento no cluster local do Azure. Para obter mais informações sobre a criação do caminho de armazenamento, consulte caminho de armazenamento.

    Para $path, crie um caminho de armazenamento chamado $storagepathname; por exemplo, C:\ClusterStorage\test-storagepath:

    az stack-hci-vm storagepath create --resource-group $resource_group --custom-location $customLocationID --name $storagepathname --path $path
    

    Obtenha a ID do recurso do caminho de armazenamento:

    $storagepathID = az stack-hci-vm storagepath show --name $storagepathname --resource-group $resource_group --query "id" -o tsv 
    
  2. Crie uma nova classe de armazenamento personalizada usando o novo caminho de armazenamento.

    1. Crie um arquivo chamado sc-aks-hci-disk-custom.yaml e copie o manifesto do arquivo YAML a seguir. A classe de armazenamento é a mesma que a classe de armazenamento padrão, exceto com o novo container. Use o storage path ID criado na etapa anterior para container. Para group e hostname, consulte a classe de armazenamento padrão executando kubectl get storageclass default -o yamle use os valores especificados:

      kind: StorageClass
      apiVersion: storage.k8s.io/v1
      metadata:
       name: aks-hci-disk-custom
      provisioner: disk.csi.akshci.com
      parameters:
       blocksize: "33554432"
       container: <storage path ID>
       dynamic: "true"
       group: <e.g clustergroup-akshci> # same as the default storageclass
       hostname: <e.g. ca-a858c18c.ntprod.contoso.com> # same as the default storageclass
       logicalsectorsize: "4096"
       physicalsectorsize: "4096"
       port: "55000"
       fsType: ext4 # refer to the note above to determine when to include this parameter
      allowVolumeExpansion: true
      reclaimPolicy: Delete
      volumeBindingMode: Immediate
      
    2. Crie a classe de armazenamento com o comando kubectl apply e especifique o arquivo sc-aks-hci-disk-custom.yaml :

       $ kubectl apply -f sc-aks-hci-disk-custom.yaml
       storageclass.storage.k8s.io/aks-hci-disk-custom created
      

Próximas etapas