Conexión de volúmenes de Azure Elastic SAN a un clúster de Azure Kubernetes Service

En este artículo se explica cómo conectar un volumen de una red de área de almacenamiento (SAN) desde un clúster de Azure Kubernetes Service (AKS). Para establecer esta conexión, habilite el controlador CSI iSCSI de Kubernetes en el clúster. Con este controlador, puede acceder a los volúmenes de Elastic SAN mediante la creación de volúmenes persistentes en el clúster de AKS y, después, adjuntar los volúmenes de Elastic SAN a los volúmenes persistentes.

Sobre el controlador

El controlador CSI iSCSI es un proyecto de código abierto que permite conectarse a un clúster de Kubernetes mediante iSCSI. Como el controlador es un proyecto de código abierto, Microsoft no proporcionará soporte técnico de ningún problema derivado del propio controlador.

El controlador CSI iSCSI de Kubernetes está disponible en GitHub:

Licencias

El controlador CSI iSCSI para Kubernetes tiene licencia con la licencia Apache 2.0.

Requisitos previos

Limitaciones

  • Actualmente no se admite el aprovisionamiento dinámico
  • Actualmente solo se admite el modo de acceso ReadWriteOnce

Introducción

Instalación del controlador

curl -skSL https://raw.githubusercontent.com/kubernetes-csi/csi-driver-iscsi/master/deploy/install-driver.sh | bash -s master --

Después de la implementación, compruebe el estado de los pods para comprobar que el controlador está instalado.

kubectl -n kube-system get pod -o wide -l app=csi-iscsi-node

Obtener información de volumen

Necesita el StorageTargetIQN, StorageTargetPortalHostName y StorageTargetPortalPort del volumen.

Puede obtenerlos con el comando de Azure PowerShell siguiente:

Get-AzElasticSanVolume -ResourceGroupName $resourceGroupName -ElasticSanName $sanName -VolumeGroupName $searchedVolumeGroup -Name $searchedVolume 

También puede obtenerlos con el comando de la CLI de Azure siguiente:

az elastic-san volume show --elastic-san-name --name --resource-group --volume-group-name

Configuración del clúster

Una vez recuperada la información del volumen, debe crear algunos archivos yaml para los recursos nuevos en el clúster de AKS.

Clase de almacenamiento

Use el ejemplo siguiente para crear un archivo storageclass.yml. Este archivo define la clase de almacenamiento del volumen persistente.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: san-volume
provisioner: manual

El volumen-persistente.

Después de crear la clase de almacenamiento, cree un archivo pv.yml. Este archivo define el volumen persistente. En el ejemplo siguiente, reemplace yourTargetPortal, yourTargetPortalPort y yourIQN por los valores recopilados anteriormente y, después, use el ejemplo para crear un archivo pv.yml. Si necesita más de 1 gibibyte de almacenamiento y lo tiene disponible, reemplace 1Gi con la cantidad de almacenamiento que necesita.

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: iscsiplugin-pv
  labels:
    name: data-iscsiplugin
spec:
  storageClassName: san-volume
  accessModes:
    - ReadWriteOnce
  capacity:
    storage: 1Gi
  csi:
    driver: iscsi.csi.k8s.io
    volumeHandle: iscsi-data-id
    volumeAttributes:
      targetPortal: "yourTargetPortal:yourTargetPortalPort"
      portals: "[]"
      iqn: "yourIQN"
      lun: "0"
      iscsiInterface: "default"
      discoveryCHAPAuth: "true"
      sessionCHAPAuth: "false"

Después de crear el archivo pv.yml, cree un volumen persistente con el comando siguiente:

kubectl apply -f pathtoyourfile/pv.yaml

La notificación del volumen persistente.

Luego, cree una notificación de volúmenes persistentes. Use la clase de almacenamiento que definimos anteriormente con el volumen persistente definido. Ahora se muestra un ejemplo del aspecto que podría tener el archivo pvc.yml:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: iscsiplugin-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: san-volume
  selector:
    matchExpressions:
      - key: name
        operator: In
        values: ["data-iscsiplugin"]

Después de crear el archivo pvc.yml, cree una notificación de volúmenes persistentes.

kubectl apply -f pathtoyourfile/pvc.yaml

Para comprobar que PersistentVolumeClaim se creó y enlazó al objeto PersistentVolume, ejecute el siguiente comando:

kubectl get pvc pathtoyourfile 

Por último, cree un manifiesto de pods. Ahora se muestra un ejemplo del aspecto que podría tener el archivo pod.yml. Puede usarlo para crear su propio manifiesto de pods, reemplace los valores de name, image y mountPath por los suyos:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
    - image: maersk/nginx
      imagePullPolicy: Always
      name: nginx
      ports:
        - containerPort: 80
          protocol: TCP
      volumeMounts:
        - mountPath: /var/www
          name: iscsi-volume
  volumes:
    - name: iscsi-volume
      persistentVolumeClaim:
        claimName: iscsiplugin-pvc

Después de crear el archivo pod.yml, cree un pod.

kubectl apply -f pathtoyourfile/pod.yaml

Para comprobar que se creó el pod, ejecute el comando siguiente:

kubectl get pods  

Ahora ha conectado correctamente un volumen de Elastic SAN al clúster de AKS.

Pasos siguientes

Plan para implementar una instancia de Elastic SAN