Share via


Utilizar controladores de disco da Interface de Armazenamento de Contentores (CSI) no AKS ativado pelo Azure Arc

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

Este artigo descreve como utilizar classes de armazenamento incorporadas da Interface de Armazenamento de Contentores (CSI) para criar dinamicamente volumes persistentes do disco e criar classes de armazenamento personalizadas no AKS ativadas pelo Arc.

Descrição geral da CSI no AKS ativada pelo Arc

A Interface de Armazenamento de Contentores (CSI) é uma norma para expor sistemas arbitrários de armazenamento de ficheiros e blocos a cargas de trabalho em contentores no Kubernetes. Ao utilizar a CSI, o AKS ativado pelo Arc pode escrever, implementar e iterar plug-ins para expor novos sistemas de armazenamento. A utilização da CSI também pode melhorar as existentes no Kubernetes sem ter de tocar no código principal do Kubernetes e, em seguida, aguardar pelos respetivos ciclos de lançamento.

Os controladores CSI de disco e ficheiro utilizados pelo AKS Arc são controladores compatíveis com a especificação CSI.

O suporte do controlador de armazenamento CSI no AKS Arc permite-lhe utilizar:

  • Discos do AKS Arc que pode utilizar para criar um recurso do Kubernetes DataDisk . Estes são montados como ReadWriteOnce, pelo que só estão disponíveis para um único pod de cada vez. Para volumes de armazenamento que podem ser acedidos por vários pods em simultâneo, utilize ficheiros arc do AKS.

  • Ficheiros Arc do AKS que pode utilizar para montar uma partilha SMB ou NFS em pods. Estes são montados como ReadWriteMany, para que possa partilhar dados entre vários nós e pods. Também podem ser montados como ReadWriteOnce com base na especificação PVC (afirmação de volume persistente).

Criar dinamicamente volumes persistentes do disco com a classe de armazenamento incorporada

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

No AKS Arc, a classe de armazenamento predefinida é criada por predefinição e utiliza CSI para criar volumes suportados por VHDX. A política de recuperação garante que o VHDX subjacente é eliminado quando o volume persistente que o utilizou é eliminado. A classe de armazenamento também configura os volumes persistentes para serem expansíveis; só precisa de editar a afirmação de volume persistente com o novo tamanho.

Para tirar partido desta classe de armazenamento, crie um PVC e um respetivo pod que referencie e utilize o mesmo. Um PVC é utilizado para aprovisionar automaticamente o armazenamento com base numa classe de armazenamento. Um PVC pode utilizar uma das classes de armazenamento pré-criadas ou uma classe de armazenamento definida pelo utilizador para criar um VHDX do tamanho pretendido. Quando cria uma definição de pod, o PVC é especificado para pedir o armazenamento pretendido.

Criar uma classe de armazenamento personalizada para discos

A classe de armazenamento predefinida é adequada para os cenários mais comuns. No entanto, em alguns casos, poderá querer criar a sua própria classe de armazenamento que armazena PVs numa localização específica mapeada para um escalão de desempenho específico.

Se tiver cargas de trabalho (pods) do Linux, tem de 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 seguinte 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 criar uma classe de armazenamento personalizada, pode especificar a localização onde pretende armazenar PVs. Se a infraestrutura subjacente for o Azure Stack HCI, esta nova localização poderá ser um volume apoiado por SSDs/NVMe de alto desempenho ou por um volume otimizado para custos apoiado por HDDs.

Criar uma classe de armazenamento personalizada é um processo de dois passos:

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

    Para $path, crie um caminho de armazenamento com o nome $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 com o novo caminho de armazenamento.

    1. Crie um ficheiro com o nome sc-aks-hci-disk-custom.yaml e, em seguida, copie o manifesto do seguinte ficheiro YAML. A classe de armazenamento é igual à classe de armazenamento predefinida, exceto com o novo container. Utilize o storage path ID criado no passo anterior para container. Para group e hostname, consulte a classe de armazenamento predefinida ao executar kubectl get storageclass default -o yamle, em seguida, utilize 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 ficheiro sc-aks-hci-disk-custom.yaml :

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

Passos seguintes