ClickHouseCluster: o volume de dados principal, a adição de discos extras em uma
configuração com vários discos (JBOD), a expansão de capacidade e as regras que determinam o que você
pode e não pode alterar depois que um cluster já existe.
Para a referência campo a campo, consulte
Configuração → Configuração de armazenamento
e a Referência da API.
spec.dataVolumeClaimSpec é um PersistentVolumeClaimSpec padrão do Kubernetes.
O operador o converte em um volumeClaimTemplate do StatefulSet, para que o
controlador do StatefulSet crie e mantenha um PersistentVolumeClaim por réplica e o monte
no caminho de dados do ClickHouse /var/lib/clickhouse.
- Quando
accessModesé omitido, o operador usaReadWriteOncepor padrão. - O PVC por réplica é mantido quando o cluster é excluído, então os dados sobrevivem à
exclusão e recriação do
Custom Resource. - O mesmo campo existe em
KeeperClustere se comporta da mesma forma.
Execução sem um volume de dados persistente
dataVolumeClaimSpec é opcional. Se você o omitir e não montar seu próprio volume
no caminho dos dados, o ClickHouse gravará no filesystem efêmero do contêiner, e o
webhook de admissão retornará um aviso de que os dados poderão ser perdidos se o cluster for reiniciado.
Isso se destina apenas a clusters descartáveis ou de teste. Para fornecer seu próprio armazenamento
em vez de dataVolumeClaimSpec — por exemplo, um emptyDir ou um volume
pré-provisionado — defina-o por meio de spec.podTemplate.volumes e monte-o em
/var/lib/clickhouse com spec.containerTemplate.volumeMounts.
dataVolumeClaimSpec e um volume personalizado no caminho dos dados são mutuamente exclusivos.
Se dataVolumeClaimSpec estiver definido, a montagem de um volume personalizado em /var/lib/clickhouse
será rejeitada. Os nomes de volume reservados clickhouse-storage-volume,
clickhouse-server-tls-volume e clickhouse-server-custom-ca-volume não podem ser
usados em podTemplate.volumes.Expansão do armazenamento
resources.requests.storage e aplique a alteração. O
operador atualiza os PVCs existentes no local.
A expansão só funciona quando a StorageClass subjacente tem
allowVolumeExpansion: true. O Kubernetes não oferece suporte à redução de um PVC, então o
novo tamanho deve ser maior ou igual ao tamanho atual.Armazenamento em múltiplos discos (JBOD)
spec.additionalVolumeClaimTemplates adiciona discos extras a cada
réplica do ClickHouse, além do dataVolumeClaimSpec principal. Cada entrada é
um template de PVC com nome — um metadata.name mais uma spec de PVC —
reconciliado exatamente como o disco de dados principal, para que o controlador
do StatefulSet crie e retenha um PVC por réplica com o nome
<name>-<statefulset>-0.
/var/lib/clickhouse/disks/<name>
e gera a storage_configuration do ClickHouse para você — você não precisa escrevê-la
manualmente. Ele registra cada disco adicional e o adiciona à storage policy
default integrada.
O disco de dados primary (default) e cada disco adicional compartilham um único volume
da policy default, portanto o ClickHouse distribui novas partes de dados entre todos eles
em esquema round-robin. A capacidade utilizável é a soma de todos os discos, e toda tabela que
não define sua própria storage_policy — incluindo as tabelas system.* — usa o
conjunto combinado.
O caminho de montagem mantém o nome do template exatamente como está, mas o identificador do disco dentro de
storage_configuration substitui hífens por sublinhados. Um template chamado
cold-disk é montado em /var/lib/clickhouse/disks/cold-disk e aparece como
cold_disk na configuração gerada.Políticas de armazenamento personalizadas
extraConfig para o layout JBOD acima — o operador gera
a política default automaticamente. Use spec.settings.extraConfig apenas quando
quiser políticas de armazenamento além da padrão gerada, por exemplo, uma política
em camadas hot/cold com move_factor e prefer_not_to_merge, ou um disco baseado em S3.
A configuração adicionada ali é mesclada à storage_configuration gerada.
Consulte a
documentação de armazenamento do ClickHouse
para ver os campos da política.
O que você não pode alterar após a criação
- A presença de
dataVolumeClaimSpecé imutável — você não pode adicionar um volume de dados a um cluster criado sem ele, nem removê-lo de um cluster criado com ele. - O conjunto de
additionalVolumeClaimTemplatesé fixo — você não pode adicionar, remover ou renomear entradas após a criação. - Expandir
resources.requests.storageem uma entrada existente é permitido (sujeito ao suporte da StorageClass; veja Expansão do armazenamento).
Referência de validação
- Configuração — a referência completa dos campos, incluindo
extraConfig. - Escalonamento de clusters — como réplicas e shards são adicionados e removidos.