16 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.
16.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.2 instalado, que puede ser físico o virtual
Un clúster de Kubernetes instalado; ya sea K3s o RKE2
Helm
16.2 Instalación manual de SUSE Storage #
16.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-iscsiEs 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:
rebootPara obtener ayuda adicional sobre cómo instalar open-iscsi, consulte la documentación oficial de Longhorn.
16.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.
Inicie sesión en la colección de aplicaciones de Rancher:
helm registry login dp.apps.rancher.io --username $APPS.RANCHER.IO_USERNAME --password $APPS.RANCHER.IO_ACCESS_TOKENInstale SUSE Storage en el espacio de nombres
longhorn-systemy añada sus credenciales del registro de contenedores:helm install longhorn oci://dp.apps.rancher.io/charts/suse-storage \ --version 1.10.1 \ --namespace longhorn-system \ --create-namespace \ --set privateRegistry.createSecret=true \ --set privateRegistry.registryUrl=dp.apps.rancher.io \ --set privateRegistry.registryUser=$APPS.RANCHER.IO_USERNAME \ --set privateRegistry.registryPasswd=$APPS.RANCHER.IO_ACCESS_TOKEN \ --set privateRegistry.registrySecret=application-collectionConfirme que el despliegue se ha realizado correctamente:
kubectl -n longhorn-system get podslocalhost:~ # kubectl -n longhorn-system get pods NAME READY STATUS RESTARTS AGE csi-attacher-7656559cf4-pkhh6 1/1 Running 0 103s csi-attacher-7656559cf4-pnzw5 1/1 Running 0 103s csi-attacher-7656559cf4-z94mm 1/1 Running 0 103s csi-provisioner-6d9cf6456d-kcwtq 1/1 Running 0 103s csi-provisioner-6d9cf6456d-mvvml 1/1 Running 0 103s csi-provisioner-6d9cf6456d-q4f88 1/1 Running 0 103s csi-resizer-f587cd467-clr2n 1/1 Running 0 103s csi-resizer-f587cd467-z28v4 1/1 Running 0 103s csi-resizer-f587cd467-zxmtx 1/1 Running 0 103s csi-snapshotter-6dcdf78684-757mg 1/1 Running 0 103s csi-snapshotter-6dcdf78684-8ktgc 1/1 Running 0 103s csi-snapshotter-6dcdf78684-ffsqr 1/1 Running 0 103s engine-image-ei-099f845a-lvdtr 1/1 Running 0 2m21s instance-manager-4adffddaffe02374cd5635b8a6113de7 1/1 Running 0 111s longhorn-csi-plugin-w7pwr 3/3 Running 0 103s longhorn-driver-deployer-6886fb84bc-wm9h6 1/1 Running 2 (2m32s ago) 2m45s longhorn-manager-zblbl 2/2 Running 0 2m45s longhorn-ui-6bcc65d4bd-mcn6r 1/1 Running 0 2m45s longhorn-ui-6bcc65d4bd-rwf97 1/1 Running 0 2m45s
16.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"
EOFAhora 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
EOFTras crear la PersistentVolumeClaim, podemos adjuntarla a
un pod. Cuando se despliega el pod,
Kubernetes crea el volumen de Longhorn y lo vincula al
pod 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
EOFEl 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 26s16.4 Acceso a la interfaz del usuario #
Si ha instalado SUSE Storage con kubectl o Helm, debe configurar un controlador Ingress para permitir el tráfico externo en el clúster. La autenticación no está habilitada de forma predeterminada. Si se ha utilizado la aplicación de catálogo de Rancher, Rancher habrá creado automáticamente un controlador Ingress con control de acceso (rancher-proxy).
Obtenga la dirección IP del servicio externo de Longhorn:
kubectl -n longhorn-system get svcCuando haya recuperado la dirección IP de
longhorn-frontend, puede acceder a la interfaz de usuario en su navegador y empezar a usarla.
16.5 Instalación con Edge Image Builder #
SUSE Edge usa Capítulo 11, Edge Image Builder para personalizar las imágenes del sistema operativo base SUSE Linux Micro. Veamos cómo hacerlo para aprovisionar un clúster RKE2 con SUSE Storage encima.
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.3
image:
imageType: iso
baseImage: SL-Micro.x86_64-6.2-Base-SelfInstall-GM.install.iso
arch: x86_64
outputImageName: eib-image.iso
kubernetes:
version: v1.34.2+rke2r1
helm:
charts:
- name: suse-storage
releaseName: longhorn
version: 1.10.1
repositoryName: rancher-application-collection
targetNamespace: longhorn-system
createNamespace: true
installationNamespace: kube-system
repositories:
- name: rancher-application-collection
url: oci://dp.apps.rancher.io/charts
authentication:
username: $APPS.RANCHER.IO_USERNAME
password: $APPS.RANCHER.IO_ACCESS_TOKEN
embeddedArtifactRegistry:
registries:
- uri: dp.apps.rancher.io
authentication:
username: $APPS.RANCHER.IO_USERNAME
password: $APPS.RANCHER.IO_ACCESS_TOKEN
images:
- name: dp.apps.rancher.io/containers/kubernetes-csi-external-attacher:4.10.0-8.8
- name: dp.apps.rancher.io/containers/kubernetes-csi-external-provisioner:5.3.0-8.8
- name: dp.apps.rancher.io/containers/kubernetes-csi-external-resizer:1.14.0-8.8
- name: dp.apps.rancher.io/containers/kubernetes-csi-external-snapshotter:8.4.0-8.9
- name: dp.apps.rancher.io/containers/kubernetes-csi-livenessprobe:2.17.0-8.8
- name: dp.apps.rancher.io/containers/kubernetes-csi-node-driver-registrar:2.15.0-8.8
- name: dp.apps.rancher.io/containers/longhorn-backing-image-manager:1.10.1-1.11
- name: dp.apps.rancher.io/containers/longhorn-engine:1.10.1-1.16
- name: dp.apps.rancher.io/containers/longhorn-instance-manager:1.10.1-1.17
- name: dp.apps.rancher.io/containers/longhorn-manager:1.10.1-1.9
- name: dp.apps.rancher.io/containers/longhorn-share-manager:1.10.1-1.8
- name: dp.apps.rancher.io/containers/longhorn-ui:1.10.1-1.8
- name: dp.apps.rancher.io/containers/rancher-support-bundle-kit:0.0.71-4.13
operatingSystem:
packages:
sccRegistrationCode: <reg-code>
packageList:
- open-iscsi
users:
- username: root
encryptedPassword: \$6\$jHugJNNd3HElGsUZ\$eodjVe4te5ps44SVcWshdfWizrP.xAyd71CVEXazBJ/.v799/WRCBXxfYmunlBO2yp1hm/zb4r8EmnrrNCF.P/
EOFEs 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.5/edge-image-builder:1.3.2 build --definition-file $CONFIG_DIR/iso-definition.yamlUna 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 SUSE Storage se ha 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) 2m28sEsta instalación no funciona en entornos completamente aislados. Para esos casos, consulte la Sección 27.8, “Instalación de SUSE Storage”.