Share via


Uso de controladores de disco de la interfaz de almacenamiento de contenedores (CSI) en AKS habilitados por Azure Arc

> Se aplica a: AKS en Azure Stack HCI 22H2, AKS en Windows Server, AKS en Azure Stack HCI 23H2

En este artículo se describe cómo usar clases de almacenamiento integradas de la interfaz de almacenamiento de contenedores (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 del controlador de almacenamiento CSI en AKS Arc le permite usar:

  • Discos de AKS Arc que puede usar para crear un recurso dataDisk de Kubernetes. Estos se montan como ReadWriteOnce, por lo que solo están disponibles para un único pod a la vez. Para 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 un PVC y un pod respectivo que haga referencia a él y lo 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 Stack HCI, 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:

  1. 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 Stack HCI. Para más información sobre la creación de la ruta 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 ruta de acceso de almacenamiento:

    $storagepathID = az stack-hci-vm storagepath show --name $storagepathname --resource-group $resource_group --query "id" -o tsv 
    
  2. Cree una nueva clase de almacenamiento personalizada mediante la nueva ruta de acceso de almacenamiento.

    1. 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 el objeto storage path ID creado en el paso anterior para container. Para group y hostname, consulte la clase de almacenamiento predeterminada mediante la ejecución kubectl get storageclass default -o yamlde 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
      
    2. 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
      

Pasos siguientes