Los recursos personalizados de Ops 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 |
Requisitos previos
La clase de almacenamiento debe ser compatible con el cambio de tamaño
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.
Almacenamiento de fácil expansión
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.
Cree o identifique 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 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: "8.0.0" 8 project: my-project 9 credentials: my-credentials 10 type: ReplicaSet 11 podSpec: 12 persistence: 13 single: 14 storage: "1Gi"
Insertar datos en la base de datos a la que sirve el recurso.
Inicie en el clúster de
mongoKubernetes.kubectl exec -it <my-replica-set>-0 \ /var/lib/mongodb-mms-automation/mongodb-linux-x86_64-8.0.0/bin/mongo 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") }
Actualice el recurso de base de datos con un nuevo valor de almacenamiento.
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.
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
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: "8.0.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 Espere hasta que este StatefulSet alcance el estado
Running.
Valide que se haya redimensionado el reclamo de volumen persistente.
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: ""
Validar que existan datos en la reclamación de volumen persistente actualizada.
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
Expandir manualmente el almacenamiento
Cree o identifique 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 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: "8.0.0" 8 project: my-project 9 credentials: my-credentials 10 type: ReplicaSet 11 podSpec: 12 persistence: 13 single: 14 storage: "1Gi"
Insertar datos en la base de datos a la que sirve el recurso.
Inicie en el clúster de
mongoKubernetes.kubectl exec -it <my-replica-set>-0 \ /var/lib/mongodb-mms-automation/mongodb-linux-x86_64-8.0.0/bin/mongo 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") }
Parchear cada volumen de persistencia.
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
Detenga el operador.
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.
# Source: enterprise-operator/templates/operator.yaml apiVersion: apps/v1 kind: Deployment metadata: name: mongodb-enterprise-operator namespace: mongodb spec: replicas: 0
Eliminar los StatefulSets.
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>
Actualice el recurso de base de datos con un nuevo valor de almacenamiento.
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
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: "8.0.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 Espere hasta que el recurso personalizado de MongoDB esté en un estado
Running.
Validar que existan datos en la reclamación de volumen persistente actualizada.
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