Documentación de SUSE Edge|Componentes|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-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
Sugerencia
Sugerencia

Para 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.

  1. 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_TOKEN
  2. Instale SUSE Storage en el espacio de nombres longhorn-system y 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-collection
  3. Confirme que el despliegue se ha realizado correctamente:

    kubectl -n longhorn-system get pods
    localhost:~ # 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"
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 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
EOF
Sugerencia
Sugerencia

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

16.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).

  1. Obtenga la dirección IP del servicio externo de Longhorn:

    kubectl -n longhorn-system get svc
  2. Cuando 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/
EOF
Nota
Nota

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.5/edge-image-builder:1.3.2 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 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)   2m28s
Nota
Nota

Esta instalación no funciona en entornos completamente aislados. Para esos casos, consulte la Sección 27.8, “Instalación de SUSE Storage”.