Docs Menu
Docs Home
/ /
/ / /

Aumentar el almacenamiento para volúmenes persistentes

El Los recursos personalizados deOps Manager, MongoDB Database, AppDB y Backup Daemon que componen una implementación estándar de Kubernetes Operator se implementan 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.

Según el tipo de recurso específico, puede aumentar el almacenamiento de dos maneras: manualmente o aprovechando la función de expansión de almacenamiento fácil del operador de Kubernetes. La siguiente tabla ilustra cuál de estos dos procedimientos es compatible con un tipo de recurso personalizado determinado.

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

Base de datos de aplicaciones

Daemon de copias de seguridad

Base de datos MongoDB

Multiclúster MongoDB

Gerente de Operaciones

Asegúrese de que el proveedor del complemento de volumen y StorageClass que usan los volúmenes persistentes admitan el cambio de tamaño:

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

Si no tiene un storageClass que admita el cambio de tamaño, pídale ayuda a su administrador de Kubernetes.

Nota

El mecanismo de expansión sencilla requiere el RBAC predeterminado incluido en el operador de Kubernetes. En concreto, requiere los permisos get, list, watch, patch y update para persistantVolumeClaims. Si ha personalizado alguno de los recursos RBAC del operador de Kubernetes, es posible que deba ajustar los permisos para que el operador pueda redimensionar 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 en el clúster de mongo 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. Actualice el tamaño del disco. Abra su editor de texto preferido y realice 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. Espere 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 su solicitud de cambio de tamaño de PVC se está procesando.

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

Utilice un recurso de base de datos existente o cree 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 en el clúster de mongo 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

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

Espere hasta que cada reclamación 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

Actualice la definición de implementación del Operador de Kubernetes y aplique el cambio a su clúster de Kubernetes para reducir el tamaño del Operador de Kubernetes a 0 réplicas. Reducir el tamaño del Operador de Kubernetes a 0 réplicas le permite evitar una condición de carrera en la que el Operador de Kubernetes intenta restaurar el estado del recurso actualizado manualmente para que coincida con su definición original.

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

Nota

Este paso elimina únicamente el StatefulSet. Los pods permanecen sin cambios y en ejecución.

Borra un recurso StatefulSet.

kubectl delete sts --cascade=false <my-replica-set>
6
  1. Actualice el tamaño del disco. Abra su editor de texto preferido y realice 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. Espere 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 se reutilizaron los volúmenes persistentes, los datos que insertó en el paso 2 se pueden encontrar 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

Volver

Despliegue a escala

En esta página