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
- Usar la versión más reciente de la CLI de Azure o instalar la versión más reciente del módulo Azure PowerShell
- Cumplir los requisitos de compatibilidad del controlador CSI iSCSI
- Implementación de Elastic SAN
- Configurar un punto de conexión de red virtual
- Configurar las reglas de red virtual
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.