Kubernetes Rook-Ceph: ¿diferentes grupos para diferentes casos de uso?

Kubernetes Rook-Ceph: ¿diferentes grupos para diferentes casos de uso?

Estoy experimentando nuevamente con rook-ceph en Kubernetes para almacenamiento. Tengo 3 nodos, cada uno de los cuales tiene

  • una partición ssd local montada en /dev/sda2, y
  • un volumen NAS en /dev/sdb.

En mi configuración de torre, uso todos los dispositivos, que automáticamente busca y usa ambos como OSD. Hasta ahora, todo bien.

Lo que me gustaría hacer es tratarlos como dos clases de almacenamiento separadas en Kubernetes: el grupo ssd es rápido pero pequeño, mientras que el grupo NAS es lento pero enorme. De esa manera, podría conectar pods con uso intensivo de IO, como bases de datos, a la clase de almacenamiento ssd, mientras que pods de gran tamaño, como servidores de archivos, se conectarían a la clase de almacenamiento NAS.

Dado que rook-ceph actualmente adjunta todos los OSD al mismo grupo, no puedo apuntar a algunos específicos a través de una clase de almacenamiento de Kubernetes:

bash-4.4$ ceph osd tree
ID  CLASS  WEIGHT   TYPE NAME               STATUS  REWEIGHT  PRI-AFF
-1         0.82942  root default
-7         0.27647      host k8s-storage-1
 1    ssd  0.17879          osd.1               up   1.00000  1.00000
 5    ssd  0.09769          osd.5               up   1.00000  1.00000
-3         0.27647      host k8s-storage-2
 2    ssd  0.17879          osd.2               up   1.00000  1.00000
 3    ssd  0.09769          osd.3               up   1.00000  1.00000
-5         0.27647      host k8s-storage-3
 0    ssd  0.17879          osd.0               up   1.00000  1.00000
 4    ssd  0.09769          osd.4               up   1.00000  1.00000

bash-4.4$ ceph osd status
ID  HOST            USED  AVAIL  WR OPS  WR DATA  RD OPS  RD DATA  STATE
 0  k8s-storage-3   196M   182G      0        0       1       16   exists,up¹
 1  k8s-storage-1   374M   182G      0        0       0        0   exists,up¹
 2  k8s-storage-2   261M   182G      0        0       1       90   exists,up¹
 3  k8s-storage-2   121M  99.8G      0        0       0        0   exists,up²
 4  k8s-storage-3   187M  99.8G      0        0       0        0   exists,up²
 5  k8s-storage-1  85.3M  99.9G      0        0       0        0   exists,up²

¹local SSD storage
²remote NAS storage (it's just a 100gb for testing purposes)

Encontré una posible solución, donde ejecuto dos instancias de rook-ceph separadas con un deviceFilter, de modo que un grupo de rook-ceph solo usa los SSD, mientras que el otro solo usa los volúmenes NAS. No me gusta esta solución debido a la desventaja de tener que ejecutar dos instancias de clúster-ceph-rook en un clúster de kubernetes.

¿Hay alguna manera de hacer que rook-ceph separe los almacenamientos SSD y NAS, de modo que las clases de almacenamiento de Kubernetes puedan seleccionarlos de forma independiente?


Actualización 1:Descubrí que puedo actualizar las clases de almacenamiento para dispositivos manualmente: ceph osd crush set-device-class osd.XXXlo único que me falta ahora es cómo orientarlos desde a kubernetes storageclasstravés de a ceph pool, en el que (¿supongo?) se deben colocar los OSD.

Mejor, Lars.

Respuesta1

@LarsKumbier Puede crear cephcluster para especificar clases de dispositivo para un conjunto de OSDhttps://github.com/rook/rook/blob/f70b687a6077877e29ab02b06a881ed2d65c3c78/Documentation/CRDs/Cluster/ceph-cluster-crd.md#osd-configuration-settings https://github.com/rook/rook/blob/f70b687a6077877e29ab02b06a881ed2d65c3c78/Documentation/CRDs/Cluster/ceph-cluster-crd.md#storage-class-device-sets ¿Y usar esas clases de dispositivo para los grupos cephfs y rbd y crear una clase de almacenamiento para apuntar a los grupos de datos rbd y cephfs? ¿Esto elimina la creación de múltiples grupos ceph?

información relacionada