
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.XXX
lo único que me falta ahora es cómo orientarlos desde a kubernetes storageclass
travé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?