Aumentar o armazenamento para volumes persistentes
Os recursos personalizados MongoDB Ops Manager, do banco de dados do MongoDB , do AppDB e do Backup Daemon que compõem uma implantação padrão do Operador Kubernetes são implantados como Kubernetes statefulSets
. O Operador Kubernetes suporta o aumento do armazenamento associado a estes recursos específicos aumentando a capacidade dos seus respectivos Kubernetes persistentVolumeClaims
quando o Kubernetes storageClass
subjacente suporta a expansão do Kubernetes persistentVolume
.
Dependendo do tipo de recurso específico, você pode aumentar o armazenamento de duas maneiras. Você pode aumentar manualmente o armazenamento ou pode aproveitar o recurso de expansão de armazenamento fácil do Kubernetes Operator. A tabela a seguir ilustra qual desses dois procedimentos é suportado para um determinado tipo de recurso personalizado.
Tipo de recurso personalizado | Expansão manual de armazenamento | fácil expansão de armazenamento |
---|---|---|
AppDB | ||
Backup Daemon | ||
Banco de dados MongoDB | ||
Multi-Cluster do MongoDB | ||
Ops Manager |
Pré-requisitos
A classe de armazenamento deve suportar o redimensionamento
Certifique-se de que a StorageClass e o fornecedor de plugin -in de volume que os Volumes persistentes usam suportam o redimensionamento:
kubectl patch storageclass/<my-storageclass> --type='json' \ -p='[{"op": "add", "path": "/allowVolumeExpansion", "value": true }]'
Se você não tiver um storageClass
que suporte o redimensionamento, peça ajuda ao administrador do Kubernetes.
Armazenamento de expansão fácil
Observação
O mecanismo de expansão fácil requer o RBAC padrão incluído com o Kubernetes Operator. Especificamente, requer get
, list
, watch
, patch
e update
permissões para persistantVolumeClaims
. Se você tiver personalizado algum dos recursos RBAC do Kubernetes Operator, talvez seja necessário ajustar as permissões para permitir que o Kubernetes Operator redimensione os recursos de armazenamento em seu cluster do Kubernetes.
Esse processo resulta em uma reinicialização contínua do recurso personalizado do MongoDB em seu cluster Kubernetes.
Criar ou identificar um recurso personalizado persistente .
Use um recurso de banco de dados de dados existente ou crie um novo com armazenamento persistente. Aguarde até que o volume persistente entre no estado Running
.
Exemplo
Um recurso de reconhecimento de data center com armazenamento persistente incluiria:
1 apiVersion: mongodb.com/v1 2 kind: MongoDB 3 metadata: 4 name: <my-replica-set> 5 spec: 6 members: 3 7 version: "4.4.0" 8 project: my-project 9 credentials: my-credentials 10 type: ReplicaSet 11 podSpec: 12 persistence: 13 single: 14 storage: "1Gi"
Insira dados no banco de banco de dados que o recurso atende.
Inicie o
mongo
no cluster Kubernetes.kubectl exec -it <my-replica-set>-0 \ /var/lib/mongodb-mms-automation/mongodb-linux-x86_64-4.4.0/bin/mongo Inserir dados no reconhecimento de data center
test
.<my-replica-set>:PRIMARY> use test switched to db test <my-replica-set>:PRIMARY> db.tmp.insertOne({"foo":"bar"}) { "acknowledged" : true, "insertedId" : ObjectId("61128cb4a783c3c57ae5142d") }
Atualize o recurso do reconhecimento de data center com um novo valor de armazenamento.
Importante
Você só pode aumentar o tamanho do disco para os recursos de armazenamento existentes, não diminuir. Diminuir o tamanho do armazenamento causa um erro no estágio de reconciliação.
Atualize o tamanho do disco. Abra seu editor de texto preferido e faça alterações semelhantes a este exemplo:
Exemplo
Para atualizar o tamanho do disco do conjunto de réplicas para 2 GB, altere o valor
storage
na especificação do recurso do banco de dados de dados:1 apiVersion: mongodb.com/v1 2 kind: MongoDB 3 metadata: 4 name: <my-replica-set> 5 spec: 6 members: 3 7 version: "4.4.0" 8 project: my-project 9 credentials: my-credentials 10 type: ReplicaSet 11 podSpec: 12 persistence: 13 single: 14 storage: "2Gi" Atualize o recurso personalizado MongoDB com o novo tamanho do volume.
kubectl apply -f my-updated-replica-set-vol.yaml Aguarde até que este StatefulSet atinja o estado
Running
.
Valide que a declaração de volume persistente foi redimensionada.
Se você reutilizar Volumes persistentes, você pode encontrar os dados inseridos na etapa 2 nos bancos de dados armazenados em Volumes persistentes:
kubectl describe mongodb/<my-replica-set> -n mongodb
A saída a seguir indica que sua solicitação de redimensionamento de PVC está sendo processada.
status: clusterStatusList: {} lastTransition: "2024-08-21T11:03:52+02:00" message: StatefulSet not ready observedGeneration: 2 phase: Pending pvc: - phase: PVC Resize - STS has been orphaned statefulsetName: multi-replica-set-pvc-resize-0 resourcesNotReady: - kind: StatefulSet message: 'Not all the Pods are ready (wanted: 2, updated: 1, ready: 1, current:2)' name: multi-replica-set-pvc-resize-0 version: ""
Valide que os dados existem na declaração de volume persistente atualizada.
Se você reutilizar Volumes persistentes, você pode encontrar os dados inseridos na etapa 2 nos bancos de dados armazenados em Volumes persistentes:
kubectl exec -it <my-replica-set>-1 \ /var/lib/mongodb-mms-automation/mongodb-linux-x86_64-4.4.0/bin/mongo
<my-replica-set>:PRIMARY> use test switched to db test <my-replica-set>:PRIMARY> db.tmp.count() 1
Expandir manualmente o armazenamento
Criar ou identificar um recurso personalizado persistente .
Use um recurso de reconhecimento de data center existente ou crie um novo com armazenamento persistente. Aguarde até que o volume persistente chegue ao estado Running
.
Exemplo
Um recurso de reconhecimento de data center com armazenamento persistente incluiria:
1 apiVersion: mongodb.com/v1 2 kind: MongoDB 3 metadata: 4 name: <my-replica-set> 5 spec: 6 members: 3 7 version: "4.4.0" 8 project: my-project 9 credentials: my-credentials 10 type: ReplicaSet 11 podSpec: 12 persistence: 13 single: 14 storage: "1Gi"
Insira dados no reconhecimento de data center ao qual o recurso atende.
Inicie o
mongo
no cluster Kubernetes.kubectl exec -it <my-replica-set>-0 \ /var/lib/mongodb-mms-automation/mongodb-linux-x86_64-4.4.0/bin/mongo Inserir dados no reconhecimento de data center
test
.<my-replica-set>:PRIMARY> use test switched to db test <my-replica-set>:PRIMARY> db.tmp.insertOne({"foo":"bar"}) { "acknowledged" : true, "insertedId" : ObjectId("61128cb4a783c3c57ae5142d") }
Corrija cada volume de persistência.
Invoque os seguintes comandos para todo o conjunto de réplicas:
kubectl patch pvc/"data-<my-replica-set>-0" -p='{"spec": {"resources": {"requests": {"storage": "2Gi"}}}}' kubectl patch pvc/"data-<my-replica-set>-1" -p='{"spec": {"resources": {"requests": {"storage": "2Gi"}}}}' kubectl patch pvc/"data-<my-replica-set>-2" -p='{"spec": {"resources": {"requests": {"storage": "2Gi"}}}}'
Aguarde até que cada reivindicação de volume persistente chega à seguinte condição:
- lastProbeTime: null lastTransitionTime: "2019-08-01T12:11:39Z" message: Waiting for user to (re-)start a pod to finish file system resize of volume on node. status: "True" type: FileSystemResizePending
Pare o operador.
Atualize a definição de implantação do Kubernetes Operator e aplique a alteração em seu cluster do Kubernetes para reduzir o Kubernetes Operator para réplicas 0
. O dimensionamento do Operador Kubernetes para réplicas 0
permite evitar uma condição de corrida na qual o Operador Kubernetes tenta restaurar o estado do recurso atualizado manualmente para se alinhar com a definição original do recurso.
# Source: enterprise-operator/templates/operator.yaml apiVersion: apps/v1 kind: Deployment metadata: name: mongodb-enterprise-operator namespace: mongodb spec: replicas: 0
Remova os StatefulSets.
Observação
Esta etapa remove o StatefulSet apenas. Os pods permanecem inalterados e em execução.
Excluir um StatefulSet recurso.
kubectl delete sts --cascade=false <my-replica-set>
Atualize o recurso do reconhecimento de data center com um novo valor de armazenamento.
Atualize o tamanho do disco. Abra seu editor de texto preferido e faça alterações semelhantes a este exemplo:
Exemplo
Para atualizar o tamanho do disco do conjunto de réplicas para 2 GB, altere o valor
storage
na especificação do recurso do banco de dados de dados:1 apiVersion: mongodb.com/v1 2 kind: MongoDB 3 metadata: 4 name: <my-replica-set> 5 spec: 6 members: 3 7 version: "4.4.0" 8 project: my-project 9 credentials: my-credentials 10 type: ReplicaSet 11 podSpec: 12 persistence: 13 single: 14 storage: "2Gi" Recriar um StatefulSet recurso com o novo tamanho do volume.
kubectl apply -f my-replica-set-vol.yaml Aguarde até que o recurso personalizado MongoDB esteja em um estado
Running
.
Valide que os dados existem na declaração de volume persistente atualizada.
Se os Volumes persistentes foram reutilizados, os dados inseridos na etapa 2 podem ser encontrados nos bancos de dados armazenados em Volumes persistentes:
kubectl exec -it <my-replica-set>-1 \ /var/lib/mongodb-mms-automation/mongodb-linux-x86_64-4.4.0/bin/mongo
<my-replica-set>:PRIMARY> use test switched to db test <my-replica-set>:PRIMARY> db.tmp.count() 1