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 |
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 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
mongoen 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 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") }
Actualiza 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.
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.
Valida que el Persistent Volume Claim haya 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 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
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: "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
mongoen 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 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.
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
Eliminar 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: "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 reclamación de volumen persistente actualizada.
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