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 Stack HCI 23H2
Este artigo descreve como usar classes de armazenamento internas da CSI (Interface de Armazenamento de 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 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 em conformidade 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, eles só estão disponíveis 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 volumes persistentes de disco dinamicamente 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 backup de VHDX. A política de recuperação garante que o VHDX subjacente seja excluído quando o volume persistente que a 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 respectivo pod que faz referência e a usa. Uma PVC é usada 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, a PVC é especificada para solicitar o armazenamento desejado.
Criar classe de armazenamento personalizada para discos
A classe de armazenamento padrão é adequada para 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
o 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 Stack HCI, esse novo local poderá ser um volume apoiado por SSDs/NVMe de alto desempenho ou um volume otimizado para custo apoiado por HDDs.
A criação de uma classe de armazenamento personalizada é um processo de duas etapas:
Crie um novo caminho de armazenamento usando 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, 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 de caminho de armazenamento:
$storagepathID = az stack-hci-vm storagepath show --name $storagepathname --resource-group $resource_group --query "id" -o tsv
Crie uma nova classe de armazenamento personalizada usando o novo caminho de armazenamento.
Crie um arquivo chamado sc-aks-hci-disk-custom.yaml e copie o manifesto do arquivo YAML a seguir. A classe de armazenamento é igual à classe de armazenamento padrão, exceto com o novo
container
. Use ostorage path ID
criado na etapa anterior paracontainer
. Paragroup
ehostname
, consulte a classe de armazenamento padrão executandokubectl get storageclass default -o yaml
e 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
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