Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
/ / /

Aumentar el almacenamiento para volúmenes persistentes

La Ops Manager, MongoDB base de datos, AppDB y los recursos personalizados de daemon de copias de seguridad que conforman una estándar Kubernetes Operator implementación se implementan cada uno como Kubernetes statefulSetsEl operador de Kubernetes admite el aumento del almacenamiento asociado con estos recursos específicos al aumentar la capacidad de sus respectivos Kubernetes persistentVolumeClaims cuando el Kubernetes storageClass subyacente admite la expansión de Kubernetes persistentVolume.

En función del tipo específico de recurso, puede aumentar el almacenamiento de una de dos maneras. Puedes aumentar manualmente el almacenamiento o aprovechar la funcionalidad de expansión fácil de almacenamiento del Operador de Kubernetes. La siguiente tabla ilustra cuál de estos dos procedimientos es compatible para un tipo de recurso personalizado determinado.

Tipo de recurso personalizado
Expansión manual de almacenamiento
Fácil expansión del almacenamiento

AppDB

Daemon de copias de seguridad

Base de datos MongoDB

Multiclúster MongoDB

Gerente de Operaciones

Asegúrate de que tanto el StorageClass como el proveedor del plugin de volúmenes que utiliza el Volúmenes persistentes admiten el cambio de tamaño:

kubectl patch storageclass/<my-storageclass> --type='json' \
-p='[{"op": "add", "path": "/allowVolumeExpansion", "value": true }]'

Si no tienes un storageClass que admita el cambio de tamaño, pídele al administrador de Kubernetes que te ayude.

Nota

El mecanismo de expansión fácil requiere el RBAC por defecto incluido con el operador de Kubernetes. Específicamente, requiere get, list, watch, patch y update permisos para persistantVolumeClaims. Si ha personalizado alguno de los recursos de RBAC del operador de Kubernetes, es posible que deba ajustar los permisos para permitir que el operador de Kubernetes amplíe los recursos de almacenamiento en su clúster de Kubernetes.

Este proceso resulta en un reinicio en secuencia del recurso personalizado MongoDB en tu clúster Kubernetes.

1

Utilice un recurso de base de datos existente o cree uno nuevo con almacenamiento persistente. Espere hasta que el volumen persistente entre en estado Running.

Ejemplo

Un recurso de base de datos con almacenamiento persistente incluiría:

1apiVersion: mongodb.com/v1
2kind: MongoDB
3metadata:
4 name: <my-replica-set>
5spec:
6 members: 3
7 version: "8.0.0"
8 project: my-project
9 credentials: my-credentials
10 type: ReplicaSet
11 podSpec:
12 persistence:
13 single:
14 storage: "1Gi"
2
  1. Inicie mongo en el clúster de Kubernetes.

    $kubectl exec -it <my-replica-set>-0 \
    /var/lib/mongodb-mms-automation/mongodb-linux-x86_64-8.0.0/bin/mongo
  2. Insertar datos en la base de datos 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")
    }
3

Importante

Solo se puede aumentar el tamaño del disco para los recursos de almacenamiento existentes, no disminuirlo. Disminuir el tamaño del almacenamiento provoca un error en la etapa de conciliación.

  1. Actualiza el tamaño del disco. Abre tu editor de texto preferido y realiza cambios similares a este ejemplo:

    Ejemplo

    Para actualizar el tamaño de disco del set de réplicas a 2 GB, cambie el valor storage en la especificación del recurso de base de datos:

    1apiVersion: mongodb.com/v1
    2kind: MongoDB
    3metadata:
    4 name: <my-replica-set>
    5spec:
    6 members: 3
    7 version: "8.0.0"
    8 project: my-project
    9 credentials: my-credentials
    10 type: ReplicaSet
    11 podSpec:
    12 persistence:
    13 single:
    14 storage: "2Gi"
  2. Actualice el recurso personalizado de MongoDB con el nuevo tamaño de volumen.

    kubectl apply -f my-updated-replica-set-vol.yaml
  3. Espera hasta que este StatefulSet alcance el estado Running.

4

Si reutiliza volúmenes persistentes, puede encontrar los datos que insertó en el paso 2 en las bases de datos almacenadas en volúmenes persistentes:

$ kubectl describe mongodb/<my-replica-set> -n mongodb

La siguiente salida indica que tu solicitud de cambio de tamaño de PVC está siendo procesada.

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: ""
5

Si reutiliza volúmenes persistentes, puede encontrar los datos que insertó en el paso 2 en las bases de datos almacenadas en volúmenes persistentes:

$ kubectl exec -it <my-replica-set>-1 \
/var/lib/mongodb-mms-automation/mongodb-linux-x86_64-8.0.0/bin/mongo
<my-replica-set>:PRIMARY> use test
switched to db test
<my-replica-set>:PRIMARY> db.tmp.count()
1
1

Utiliza un recurso de base de datos existente o crea uno nuevo con almacenamiento persistente. Espere hasta que el volumen persistente alcance el estado Running.

Ejemplo

Un recurso de base de datos con almacenamiento persistente incluiría:

1apiVersion: mongodb.com/v1
2kind: MongoDB
3metadata:
4 name: <my-replica-set>
5spec:
6 members: 3
7 version: "8.0.0"
8 project: my-project
9 credentials: my-credentials
10 type: ReplicaSet
11 podSpec:
12 persistence:
13 single:
14 storage: "1Gi"
2
  1. Inicie mongo en el clúster de Kubernetes.

    $kubectl exec -it <my-replica-set>-0 \
    /var/lib/mongodb-mms-automation/mongodb-linux-x86_64-8.0.0/bin/mongo
  2. Insertar datos en la base de datos 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")
    }
3

Invoca los siguientes comandos para todo el set 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"}}}}'

Espere hasta que cada solicitud de volumen persistente llegue a la siguiente condición:

- 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
4

Actualiza la definición de implementación de Kubernetes operador y aplica el cambio a tu clúster de Kubernetes a fin de escalar Kubernetes operador a 0 réplicas. Reducir el Operador de Kubernetes a 0 réplicas te permite evitar una condición de competencia en la que el Operador de Kubernetes intenta restaurar el estado del recurso actualizado manualmente para alinearlo con la definición original del recurso.

apiVersion: apps/v1
kind: Deployment
metadata:
name: mongodb-kubernetes-operator
namespace: mongodb
spec:
replicas: 0
5

Nota

Este paso remueve únicamente el StatefulSet. Los pods se mantienen sin cambios y en funcionamiento.

Borra un recurso StatefulSet.

kubectl delete sts --cascade=false <my-replica-set>
6
  1. Actualiza el tamaño del disco. Abre tu editor de texto preferido y realiza cambios similares a este ejemplo:

    Ejemplo

    Para actualizar el tamaño de disco del set de réplicas a 2 GB, cambie el valor storage en la especificación del recurso de base de datos:

    1apiVersion: mongodb.com/v1
    2kind: MongoDB
    3metadata:
    4 name: <my-replica-set>
    5spec:
    6 members: 3
    7 version: "8.0.0"
    8 project: my-project
    9 credentials: my-credentials
    10 type: ReplicaSet
    11 podSpec:
    12 persistence:
    13 single:
    14 storage: "2Gi"
  2. Recrea un recurso StatefulSet con el nuevo tamaño de volumen.

    kubectl apply -f my-replica-set-vol.yaml
  3. Espera hasta que el recurso personalizado de MongoDB esté en un estado Running.

7

Ejecute el siguiente comando:

kubectl rollout restart sts <my-replica-set>

Los nuevos pods montan el volumen redimensionado.

8

Si el volumen persistente se reutilizó, los datos que insertaste en el paso 2 se pueden encontrar en las bases de datos almacenadas en volumen persistente:

$ kubectl exec -it <my-replica-set>-1 \
/var/lib/mongodb-mms-automation/mongodb-linux-x86_64-8.0.0/bin/mongo
<my-replica-set>:PRIMARY> use test
switched to db test
<my-replica-set>:PRIMARY> db.tmp.count()
1

Volver

Escalar implementación

En esta página