17 SUSE Storage #
SUSE Storage es un sistema de almacenamiento en bloques distribuido ligero, fiable y fácil de usar diseñado para Kubernetes. Se trata de un producto basado en Longhorn, un proyecto de código abierto desarrollado inicialmente por Rancher Labs y actualmente incubado bajo la CNCF.
17.1 Requisitos previos #
Si está siguiendo esta guía, se da por hecho que ya dispone de lo siguiente:
Al menos un host con SUSE Linux Micro 6.1 instalado; puede ser físico o virtual
Un clúster de Kubernetes instalado; ya sea K3s o RKE2
Helm
17.2 Instalación manual de SUSE Storage #
17.2.1 Instalación de Open-iSCSI #
Un requisito fundamental para desplegar y utilizar SUSE Storage es instalar
el paquete open-iscsi
y que el daemon
iscsid
se ejecute en todos los nodos de Kubernetes. Esto
es obligatorio, ya que Longhorn depende de que iscsiadm
esté en el host para proporcionar volúmenes persistentes a Kubernetes.
Vamos a instalarlo:
transactional-update pkg install open-iscsi
Es importante tener en cuenta que, una vez completada la operación, el
paquete solo se instala en una nueva instantánea, ya que SUSE Linux Micro es
un sistema operativo inmutable. Para cargarlo y que el daemon
iscsid
comience a ejecutarse, hay que volver a arrancar
en esa nueva instantánea que acabamos de crear. Ejecute el comando reboot
cuando esté listo:
reboot
Para obtener ayuda adicional sobre cómo instalar open-iscsi, consulte la documentación oficial de Longhorn.
17.2.2 Instalación de SUSE Storage #
Hay varias formas de instalar SUSE Storage en los clústeres de Kubernetes. Esta guía explica la instalación con Helm, pero si desea usar otro método, puede seguir la documentación oficial.
Añada el repositorio de charts de Helm de Rancher:
helm repo add rancher-charts https://charts.rancher.io/
Obtenga los charts más recientes del repositorio:
helm repo update
Instale SUSE Storage en el espacio de nombres
longhorn-system
:helm install longhorn-crd rancher-charts/longhorn-crd --namespace longhorn-system --create-namespace --version 106.2.0+up1.8.1 helm install longhorn rancher-charts/longhorn --namespace longhorn-system --version 106.2.0+up1.8.1
Confirme que el despliegue se ha realizado correctamente:
kubectl -n longhorn-system get pods
localhost:~ # kubectl -n longhorn-system get pod NAMESPACE NAME READY STATUS RESTARTS AGE longhorn-system longhorn-ui-5fc9fb76db-z5dc9 1/1 Running 0 90s longhorn-system longhorn-ui-5fc9fb76db-dcb65 1/1 Running 0 90s longhorn-system longhorn-manager-wts2v 1/1 Running 1 (77s ago) 90s longhorn-system longhorn-driver-deployer-5d4f79ddd-fxgcs 1/1 Running 0 90s longhorn-system instance-manager-a9bf65a7808a1acd6616bcd4c03d925b 1/1 Running 0 70s longhorn-system engine-image-ei-acb7590c-htqmp 1/1 Running 0 70s longhorn-system csi-attacher-5c4bfdcf59-j8xww 1/1 Running 0 50s longhorn-system csi-provisioner-667796df57-l69vh 1/1 Running 0 50s longhorn-system csi-attacher-5c4bfdcf59-xgd5z 1/1 Running 0 50s longhorn-system csi-provisioner-667796df57-dqkfr 1/1 Running 0 50s longhorn-system csi-attacher-5c4bfdcf59-wckt8 1/1 Running 0 50s longhorn-system csi-resizer-694f8f5f64-7n2kq 1/1 Running 0 50s longhorn-system csi-snapshotter-959b69d4b-rp4gk 1/1 Running 0 50s longhorn-system csi-resizer-694f8f5f64-r6ljc 1/1 Running 0 50s longhorn-system csi-resizer-694f8f5f64-k7429 1/1 Running 0 50s longhorn-system csi-snapshotter-959b69d4b-5k8pg 1/1 Running 0 50s longhorn-system csi-provisioner-667796df57-n5w9s 1/1 Running 0 50s longhorn-system csi-snapshotter-959b69d4b-x7b7t 1/1 Running 0 50s longhorn-system longhorn-csi-plugin-bsc8c 3/3 Running 0 50s
17.3 Creación de volúmenes de SUSE Storage #
SUSE Storage utiliza recursos de Kubernetes denominados
StorageClass
para aprovisionar automáticamente objetos
PersistentVolume
para los pods. Piense en
StorageClass
como una forma que tienen los
administradores de describir las clases o los
perfiles de almacenamiento que ofrecen.
Vamos a crear un recurso StorageClass
con algunas
opciones predeterminadas:
kubectl apply -f - <<EOF
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: longhorn-example
provisioner: driver.longhorn.io
allowVolumeExpansion: true
parameters:
numberOfReplicas: "3"
staleReplicaTimeout: "2880" # 48 hours in minutes
fromBackup: ""
fsType: "ext4"
EOF
Ahora que ya tenemos nuestro StorageClass
, necesitamos
una solicitud PersistentVolumeClaim
que haga referencia a
él. Una PersistentVolumeClaim
(PVC) es una solicitud de
almacenamiento por parte de un usuario. Las PVC consumen recursos
PersistentVolume
. Las solicitudes pueden pedir tamaños y
modos de acceso específicos (por ejemplo, se pueden montar una vez en modo
lectura/escritura o varias veces en modo solo lectura).
Vamos a crear una PersistentVolumeClaim
:
kubectl apply -f - <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: longhorn-volv-pvc
namespace: longhorn-system
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn-example
resources:
requests:
storage: 2Gi
EOF
Tras crear la PersistentVolumeClaim
, podemos adjuntarla a
un pod
. Cuando se despliega el pod
,
Kubernetes crea el volumen de Longhorn y lo vincula al
ood
si hay almacenamiento disponible.
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: volume-test
namespace: longhorn-system
spec:
containers:
- name: volume-test
image: nginx:stable-alpine
imagePullPolicy: IfNotPresent
volumeMounts:
- name: volv
mountPath: /data
ports:
- containerPort: 80
volumes:
- name: volv
persistentVolumeClaim:
claimName: longhorn-volv-pvc
EOF
El concepto de almacenamiento en Kubernetes es un tema complejo, pero importante. Hemos mencionado brevemente algunos de los recursos más comunes de Kubernetes, sin embargo, le sugerimos que se familiarice con la terminología específica en la documentación de Longhorn.
En este ejemplo, el resultado debería ser similar a esto:
localhost:~ # kubectl get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
longhorn (default) driver.longhorn.io Delete Immediate true 12m
longhorn-example driver.longhorn.io Delete Immediate true 24s
localhost:~ # kubectl get pvc -n longhorn-system
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
longhorn-volv-pvc Bound pvc-f663a92e-ac32-49ae-b8e5-8a6cc29a7d1e 2Gi RWO longhorn-example 54s
localhost:~ # kubectl get pods -n longhorn-system
NAME READY STATUS RESTARTS AGE
csi-attacher-5c4bfdcf59-qmjtz 1/1 Running 0 14m
csi-attacher-5c4bfdcf59-s7n65 1/1 Running 0 14m
csi-attacher-5c4bfdcf59-w9xgs 1/1 Running 0 14m
csi-provisioner-667796df57-fmz2d 1/1 Running 0 14m
csi-provisioner-667796df57-p7rjr 1/1 Running 0 14m
csi-provisioner-667796df57-w9fdq 1/1 Running 0 14m
csi-resizer-694f8f5f64-2rb8v 1/1 Running 0 14m
csi-resizer-694f8f5f64-z9v9x 1/1 Running 0 14m
csi-resizer-694f8f5f64-zlncz 1/1 Running 0 14m
csi-snapshotter-959b69d4b-5dpvj 1/1 Running 0 14m
csi-snapshotter-959b69d4b-lwwkv 1/1 Running 0 14m
csi-snapshotter-959b69d4b-tzhwc 1/1 Running 0 14m
engine-image-ei-5cefaf2b-hvdv5 1/1 Running 0 14m
instance-manager-0ee452a2e9583753e35ad00602250c5b 1/1 Running 0 14m
longhorn-csi-plugin-gd2jx 3/3 Running 0 14m
longhorn-driver-deployer-9f4fc86-j6h2b 1/1 Running 0 15m
longhorn-manager-z4lnl 1/1 Running 0 15m
longhorn-ui-5f4b7bbf69-bln7h 1/1 Running 3 (14m ago) 15m
longhorn-ui-5f4b7bbf69-lh97n 1/1 Running 3 (14m ago) 15m
volume-test 1/1 Running 0 26s
17.4 Acceso a la interfaz del usuario #
Si ha instalado Longhorn con kubectl o Helm, debe configurar un controlador Ingress para permitir el tráfico externo hacia el clúster. La autenticación no está habilitada de forma predeterminada. Si se ha usado la aplicación de catálogo de Rancher, Rancher habrá creado automáticamente un controlador Ingress con control de acceso (el proxy de rancher).
Obtenga la dirección IP del servicio externo de Longhorn:
kubectl -n longhorn-system get svc
Cuando haya recuperado la dirección IP de
longhorn-frontend
, puede acceder a la interfaz de usuario en su navegador y empezar a usarla.
17.5 Instalación con Edge Image Builder #
SUSE Edge utiliza Capítulo 11, Edge Image Builder para personalizar las imágenes del sistema operativo SUSE Linux Micro base. Vamos a mostrar cómo hacerlo para aprovisionar un clúster RKE2 con Longhorn sobre él.
Vamos a crear el archivo de definición:
export CONFIG_DIR=$HOME/eib
mkdir -p $CONFIG_DIR
cat << EOF > $CONFIG_DIR/iso-definition.yaml
apiVersion: 1.2
image:
imageType: iso
baseImage: SL-Micro.x86_64-6.1-Base-SelfInstall-GM.install.iso
arch: x86_64
outputImageName: eib-image.iso
kubernetes:
version: v1.32.4+rke2r1
helm:
charts:
- name: longhorn
version: 106.2.0+up1.8.1
repositoryName: longhorn
targetNamespace: longhorn-system
createNamespace: true
installationNamespace: kube-system
- name: longhorn-crd
version: 106.2.0+up1.8.1
repositoryName: longhorn
targetNamespace: longhorn-system
createNamespace: true
installationNamespace: kube-system
repositories:
- name: longhorn
url: https://charts.rancher.io
operatingSystem:
packages:
sccRegistrationCode: <reg-code>
packageList:
- open-iscsi
users:
- username: root
encryptedPassword: \$6\$jHugJNNd3HElGsUZ\$eodjVe4te5ps44SVcWshdfWizrP.xAyd71CVEXazBJ/.v799/WRCBXxfYmunlBO2yp1hm/zb4r8EmnrrNCF.P/
EOF
Es posible personalizar cualquiera de los valores del chart de Helm mediante
un archivo independiente proporcionado en
helm.charts[].valuesFile
. Consulte la documentación
original para obtener más detalles.
Vamos a crear la imagen:
podman run --rm --privileged -it -v $CONFIG_DIR:/eib registry.suse.com/edge/3.3/edge-image-builder:1.2.1 build --definition-file $CONFIG_DIR/iso-definition.yaml
Una vez creada la imagen, puede usarla para instalar su sistema operativo en
un host físico o virtual. Tras completar el aprovisionamiento, podrá iniciar
sesión en el sistema utilizando el par de credenciales
root:eib
.
Asegúrese de que Longhorn se haya desplegado correctamente:
localhost:~ # /var/lib/rancher/rke2/bin/kubectl --kubeconfig /etc/rancher/rke2/rke2.yaml -n longhorn-system get pods
NAME READY STATUS RESTARTS AGE
csi-attacher-5c4bfdcf59-qmjtz 1/1 Running 0 103s
csi-attacher-5c4bfdcf59-s7n65 1/1 Running 0 103s
csi-attacher-5c4bfdcf59-w9xgs 1/1 Running 0 103s
csi-provisioner-667796df57-fmz2d 1/1 Running 0 103s
csi-provisioner-667796df57-p7rjr 1/1 Running 0 103s
csi-provisioner-667796df57-w9fdq 1/1 Running 0 103s
csi-resizer-694f8f5f64-2rb8v 1/1 Running 0 103s
csi-resizer-694f8f5f64-z9v9x 1/1 Running 0 103s
csi-resizer-694f8f5f64-zlncz 1/1 Running 0 103s
csi-snapshotter-959b69d4b-5dpvj 1/1 Running 0 103s
csi-snapshotter-959b69d4b-lwwkv 1/1 Running 0 103s
csi-snapshotter-959b69d4b-tzhwc 1/1 Running 0 103s
engine-image-ei-5cefaf2b-hvdv5 1/1 Running 0 109s
instance-manager-0ee452a2e9583753e35ad00602250c5b 1/1 Running 0 109s
longhorn-csi-plugin-gd2jx 3/3 Running 0 103s
longhorn-driver-deployer-9f4fc86-j6h2b 1/1 Running 0 2m28s
longhorn-manager-z4lnl 1/1 Running 0 2m28s
longhorn-ui-5f4b7bbf69-bln7h 1/1 Running 3 (2m7s ago) 2m28s
longhorn-ui-5f4b7bbf69-lh97n 1/1 Running 3 (2m10s ago) 2m28s
Esta instalación no funciona en entornos completamente aislados. Para esos casos, consulte la Sección 27.8, “Instalación de SUSE Storage”.