Los recursos personalizados Ops Manager, MongoDB Database, AppDB y Backup Daemon que componen una implementación estándar de Kubernetes Operator se implementan como Kubernetes.statefulSets Kubernetes Operator admite el aumento del almacenamiento asociado a estos recursos específicos al aumentar la capacidad de sus respectivos Kubernetes persistentVolumeClaims cuando el Kubernetes subyacente storageClass admite la persistentVolume expansión de Kubernetes.
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.
Cree o identifique un recurso personalizado.
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: "8.0.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 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 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: "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 Espera hasta que este StatefulSet alcance el estado
Running.
Valide que la Reclamación de volumen persistente ha sido redimensionado.
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: ""
Validar que existan datos en la solicitud 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 almacenamiento manualmente
Cree o identifique un recurso personalizado.
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: "8.0.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 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 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.
apiVersion: apps/v1 kind: Deployment metadata: name: mongodb-kubernetes-operator namespace: mongodb spec: replicas: 0
Remueve los StatefulSets.
Nota
Este paso remueve solo el StatefulSet. Los pods permanecen sin cambios y en ejecución.
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: "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 Espera hasta que el recurso personalizado de MongoDB esté en un estado
Running.
Validar que existan datos en la solicitud 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 los 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