Uso de controladores de disco de container Storage Interface (CSI) en AKS habilitados por Azure Arc
> se aplica a: AKS en Azure Local 22H2, AKS en Windows Server, AKS en Azure Local, versión 23H2
En este artículo se describe cómo usar clases de almacenamiento integradas de container Storage Interface (CSI) para crear volúmenes persistentes de disco dinámicamente y crear clases de almacenamiento personalizadas en AKS habilitadas por Arc.
Introducción a CSI en AKS habilitado por Arc
La interfaz de almacenamiento de contenedores (CSI) es un estándar para exponer sistemas de almacenamiento de archivos y bloques arbitrarios a cargas de trabajo en contenedores en Kubernetes. Mediante CSI, AKS habilitado por Arc puede escribir, implementar e iterar complementos para exponer nuevos sistemas de almacenamiento. Con CSI también puede mejorar los existentes en Kubernetes sin tener que tocar el código base de Kubernetes y luego esperar sus ciclos de versión.
Los controladores CSI de disco y archivo usados por AKS Arc son controladores compatibles con la especificación CSI.
La compatibilidad con el controlador de almacenamiento CSI en AKS Arc le permite usar:
Discos de AKS Arc que puede usar para crear un recurso de DataDisk de Kubernetes. Estos se montan como ReadWriteOnce, por lo que solo están disponibles para un único pod a la vez. En el caso de los volúmenes de almacenamiento a los que pueden acceder varios pods simultáneamente, use archivos de AKS Arc.
Archivos de AKS Arc que puede usar para montar un recurso compartido SMB o NFS en pods. Se montan como ReadWriteMany, por lo que puede compartir datos entre varios nodos y pods. También se pueden montar como ReadWriteOnce en función de la especificación PVC (notificación de volumen persistente).
Creación dinámica de volúmenes persistentes de disco mediante la clase de almacenamiento integrada
Una clase de almacenamiento se usa para definir cómo se crea dinámicamente una unidad de almacenamiento con un volumen persistente. Para más información sobre el uso de las clases de almacenamiento, consulte Clases de almacenamiento de Kubernetes.
En AKS Arc, la clase de almacenamiento predeterminada se crea de forma predeterminada y usa CSI para crear volúmenes respaldados por VHDX. La directiva de recuperación garantiza que el archivo VHDX subyacente se elimina cuando se elimina el volumen persistente que lo utiliza. La clase de almacenamiento también configura los volúmenes persistentes para que se puedan expandir, solo es necesario editar la notificación de volumen persistente con el nuevo tamaño.
Para aprovechar esta clase de almacenamiento, cree una PVC y un pod respectivo que haga referencia a ella y la use. Una PVC se usa para aprovisionar automáticamente el almacenamiento en función de una clase de almacenamiento. Puede usar una de las clases de almacenamiento creadas previamente o una clase de almacenamiento definida por el usuario para crear un archivo VHDX del tamaño deseado. Cuando se crea una definición de pod, se especifica la PVC para solicitar el almacenamiento deseado.
Creación de una clase de almacenamiento personalizada para discos
La clase de almacenamiento predeterminada es adecuada para los escenarios más comunes. Sin embargo, en algunos casos, es posible que desee crear su propia clase de almacenamiento, que almacena los volúmenes persistentes en una ubicación concreta asignada a un nivel de rendimiento determinado.
Si tiene cargas de trabajo de Linux (pods), debe crear una clase de almacenamiento personalizada con el parámetro fsType: ext4
. Este requisito se aplica a las versiones 1.19 y 1.20 o posteriores de Kubernetes. En el ejemplo siguiente se muestra una definición de clase de almacenamiento personalizada con fsType
el 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
Si crea una clase de almacenamiento personalizada, puede especificar la ubicación donde desea almacenar los volúmenes persistentes. Si la infraestructura subyacente es Azure Local, esta nueva ubicación podría ser un volumen respaldado por SSD/NVMe de alto rendimiento o un volumen optimizado para costos respaldado por HDD.
El proceso de crear una clase de almacenamiento personalizada se compone de dos pasos:
Cree una nueva ruta de acceso de almacenamiento mediante los
stack-hci-vm storagepath
cmdlets para crear, mostrar y enumerar las rutas de acceso de almacenamiento en el clúster de Azure Local. Para más información sobre la creación de rutas de acceso de almacenamiento, consulte Ruta de acceso de almacenamiento.Para
$path
, cree una ruta de acceso de almacenamiento denominada$storagepathname
; por ejemplo, C:\ClusterStorage\test-storagepath:az stack-hci-vm storagepath create --resource-group $resource_group --custom-location $customLocationID --name $storagepathname --path $path
Obtenga el identificador de recurso de la ruta de acceso de almacenamiento:
$storagepathID = az stack-hci-vm storagepath show --name $storagepathname --resource-group $resource_group --query "id" -o tsv
Cree una nueva clase de almacenamiento personalizada mediante la nueva ruta de acceso de almacenamiento.
Cree un archivo denominado sc-aks-hci-disk-custom.yaml y, a continuación, copie el manifiesto del siguiente archivo YAML. La clase de almacenamiento es la misma que la predeterminada, excepto con el nuevo elemento
container
. Use elstorage path ID
elemento creado en el paso anterior paracontainer
. Paragroup
yhostname
, consulte la clase de almacenamiento predeterminada mediante la ejecuciónkubectl get storageclass default -o yaml
de y, a continuación, use los 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
Cree la clase de almacenamiento con el comando kubectl apply y especifique el archivo sc-aks-hci-disk-custom.yaml :
$ kubectl apply -f sc-aks-hci-disk-custom.yaml storageclass.storage.k8s.io/aks-hci-disk-custom created