El Ops Manager, la base de datos de MongoDB, AppDB y los recursos personalizados del daemon de copias de seguridad que constituyen una implementación estándar del operador de Kubernetes se implementan cada uno como Kubernetes
statefulSets. El operador de Kubernetes admite el aumento del almacenamiento asociado a estos recursos específicos mediante el aumento de la capacidad de sus respectivos Kubernetes persistentVolumeClaims cuando el Kubernetes subyacente storageClass 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 personalizado de recurso | Expansión manual de almacenamiento | Fácil expansión del almacenamiento |
|---|---|---|
AppDB | ||
Daemon de copias de seguridad | ||
Base de datos MongoDB | ||
MongoDB Multi-clúster | ||
Gerente de Operaciones |
Requisitos previos
La clase de almacenamiento debe admitir el cambio de tamaño
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.
Almacenamiento fácil de expandir
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.
Crea o identifica un recurso personalizado persistente.
Utilice un recurso de base de datos existente o cree uno nuevo con almacenamiento persistente. Espere hasta que el volumen persistente entre en el estado Running.
Ejemplo
Un recurso de base de datos con almacenamiento persistente incluiría:
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"
Inserta datos en la base de datos a la que sirve el recurso.
Inicie
mongoen el clúster de Kubernetes.kubectl exec -it <my-replica-set>-0 \ /var/lib/mongodb-mms-automation/mongodb-linux-x86_64-4.4.0/bin/mongo Inserte 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") }
Actualiza el recurso de base de datos con un nuevo valor de almacenamiento.
Importante
Solo puedes aumentar el tamaño del disco para los recursos de almacenamiento existentes, no disminuirlo. La disminución del tamaño de almacenamiento causa un error en la fase de conciliación.
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
storageen la especificación del recurso de base de datos: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" Actualice el recurso personalizado de MongoDB con el nuevo tamaño de volumen.
kubectl apply -f my-updated-replica-set-vol.yaml Espera hasta que este StatefulSet alcance el estado
Running.
Valida que el Persistent Volume Claim haya sido redimensionado.
Si reutilizas Volúmenes Persistentes, puedes encontrar los datos que insertaste 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: ""
Validar que existan datos en el reclamo de volumen persistente actualizado.
Si reutilizas Volúmenes Persistentes, puedes encontrar los datos que insertaste 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-4.4.0/bin/mongo
<my-replica-set>:PRIMARY> use test switched to db test <my-replica-set>:PRIMARY> db.tmp.count() 1
Expandir almacenamiento manualmente
Crea o identifica un recurso personalizado persistente.
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:
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"
Inserte datos en la base de datos que el recurso sirve.
Inicie
mongoen el clúster de Kubernetes.kubectl exec -it <my-replica-set>-0 \ /var/lib/mongodb-mms-automation/mongodb-linux-x86_64-4.4.0/bin/mongo Inserte 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") }
Parchar cada volumen persistente.
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
Detenga el operador.
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.
# Source: enterprise-operator/templates/operator.yaml apiVersion: apps/v1 kind: Deployment metadata: name: mongodb-enterprise-operator namespace: mongodb spec: replicas: 0
Remueve los StatefulSets.
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>
Actualiza el recurso de base de datos con un nuevo valor de almacenamiento.
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
storageen la especificación del recurso de base de datos: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" Recrea un recurso StatefulSet con el nuevo tamaño de volumen.
kubectl apply -f my-replica-set-vol.yaml Espera hasta que el recurso personalizado de MongoDB esté en un estado
Running.
Validar que existan datos en el reclamo de volumen persistente actualizado.
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-4.4.0/bin/mongo
<my-replica-set>:PRIMARY> use test switched to db test <my-replica-set>:PRIMARY> db.tmp.count() 1