Partilhar via


Usar drivers de disco CSI (Container Storage Interface) 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 classes de armazenamento internas CSI (Container Storage Interface) 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 Interface de Armazenamento de Contentores (CSI) é uma norma para expor sistemas de blocos e armazenamento de ficheiros arbitrários a cargas de trabalho em contentores no Kubernetes. Usando CSI, o AKS habilitado pela Arc pode escrever, implantar e iterar plug-ins para expor novos sistemas de armazenamento. Usar CSI também pode melhorar os existentes no Kubernetes sem ter que tocar no código principal do Kubernetes e, em seguida, esperar por 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:

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

  • Arquivos 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 (reivindicação de volume persistente).

Crie dinamicamente volumes persistentes de disco usando a classe de armazenamento integrada

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 backup 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 um PVC e um respetivo pod que faça referência e use-o. 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 VHDX do tamanho desejado. Quando você cria uma definição de pod, o PVC é especificado 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, convém 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 Linux (pods), deverá criar uma classe de armazenamento personalizada com o parâmetro fsType: ext4. Este requisito aplica-se à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 onde deseja armazenar PVs. Se a infraestrutura subjacente for o Azure Local, esta nova localização poderá ser um volume suportado por SSDs/NVMe de elevado desempenho ou um volume de custos otimizados suportado por HDD.

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 em seu 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 o 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 seguinte arquivo YAML. 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, em seguida, 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 seu 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óximos passos