Kubernetes Rook-Ceph: pools diferentes para casos de uso diferentes?

Kubernetes Rook-Ceph: pools diferentes para casos de uso diferentes?

Estou experimentando rook-ceph no kubernetes para armazenamento novamente. Eu tenho 3 nós, cada um com

  • uma partição SSD local montada em /dev/sda2e
  • um volume NAS em /dev/sdb.

No meu rook-config, eu uso todos os dispositivos, que automaticamente encontra e usa ambos como OSDs. Até agora tudo bem.

O que eu gostaria de fazer é tratá-los como duas classes de armazenamento separadas no kubernetes - o pool SSD é rápido, mas pequeno, enquanto o pool NAS é lento, mas enorme. Dessa forma, eu poderia anexar pods com uso intensivo de IO, como bancos de dados, à classe de armazenamento SSD, enquanto pods de tamanho pesado, como servidores de arquivos, seriam anexados à classe de armazenamento NAS.

Como o rook-ceph atualmente anexa todos os OSDs ao mesmo pool, não posso direcionar aqueles específicos por meio de uma classe de armazenamento do 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)

Eu encontrei uma solução possível, onde executo duas instâncias rook-ceph separadas com um deviceFilter, para que um rook-ceph-cluster use apenas os SSDs, enquanto o outro use apenas os volumes NAS. Não gosto desta solução devido à desvantagem de ter que executar duas instâncias rook-ceph-cluster em um cluster kubernetes.

Existe uma maneira de fazer com que o rook-ceph separe os armazenamentos SSD e NAS, para que possam ser direcionados de forma independente pelas classes de armazenamento do Kubernetes?


Atualização 1:Descobri que posso atualizar manualmente as classes de armazenamento dos dispositivos: ceph osd crush set-device-class osd.XXX- a única coisa que me falta agora é como direcioná-los a partir de kubernetes storageclassa ceph pool, em que (eu acho?) os OSDs devem ser colocados?

Atenciosamente, Lars

Responder1

@LarsKumbier Você pode criar cephcluster para especificar deviceClasses para conjunto de OSD'shttps://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 e usar essas classes de dispositivos para pools cephfs e rbd e criar uma classe de armazenamento para apontar para o pool rbd e os pools de dados cephfs? isso elimina a criação de vários clusters ceph?

informação relacionada