Importante
Esta sección es solo para implementaciones de un solo clúster de Kubernetes. Para implementaciones de MongoDB en múltiples clústeres de Kubernetes, consulte Soluciona problemas de implementaciones con múltiples clústeres de Kubernetes.
Obtener el estado de un recurso implementado
Para encontrar el estado de un recurso desplegado con el operador de Kubernetes, invoca uno de los siguientes comandos:
Para implementaciones de recursos de Ops Manager:
kubectl get <resource-name> -n <metadata.namespace> -o yaml La
status.applicationDatabase.phaseEl campo muestra el estado de implementación del recurso de la base de datos de la aplicación.El
status.backup.phasemuestra el estado de la implementación del recurso del daemon de copias de seguridad.El campo
status.opsManager.phasemuestra el estado de implementación del recurso de Ops Manager.
Nota
El Cloud Manager o el controlador Ops Manager supervisa los recursos de la base de datos definidos en la siguientes configuraciones:
spec.backup.s3Stores
Para las implementaciones de recursos de MongoDB:
kubectl get mdb <resource-name> -n <metadata.namespace> -o yaml El campo
status.phasemuestra el estado de implementación del recurso MongoDB.
Los siguientes pares clave-valor describen los estados de implementación de recursos:
Clave | Valor | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Mensaje que explica por qué el recurso está en estado | ||||||||||
|
| ||||||||||
| Timestamp en Formato de fecha y horaISO en 8601 UTC cuando se produjo la última conciliación. | ||||||||||
| Deployment URL in MongoDB Ops Manager. | ||||||||||
| Si activó copias de seguridad continuas con | ||||||||||
Campos específicos de recursos | Para descripciones de estos campos, consulta Especificación de recursos de base de datos de MongoDB. |
Ejemplo
Para ver el estado de un set de réplicas llamado my-replica-set en el namespace developer, ejecute:
kubectl get mdb my-replica-set -n developer -o yaml
Si my-replica-set se está ejecutando, debería ver:
status: lastTransition: "2019-01-30T10:51:40Z" link: http://ec2-3-84-128-187.compute-1.amazonaws.com:9080/v2/5c503a8a1b90141cbdc60a77 members: 1 phase: Running version: 8.0.0
Si my-replica-set no está en ejecución, deberías ver:
status: lastTransition: 2019-02-01T13:00:24Z link: http://ec2-34-204-36-217.compute-1.amazonaws.com:9080/v2/5c51c040d6853d1f50a51678 members: 1 message: 'Failed to create/update replica set in Ops Manager: Status: 400 (Bad Request), Detail: Something went wrong validating your Automation Config. Sorry!' phase: Failed version: 8.0.0
Revisar los registros
Mantener y revisar registros adecuados para ayudar a depurar problemas y supervisar la actividad del clúster. Utilizar la arquitectura de registro recomendada para conservar los registros del Pod, incluso después de borrar un Pod.
Proceso de registro
El operador de Kubernetes escribe en los registros del pod mediante un contenedor que convierte los registros del agente MongoDB y los componentes en el pod de implementación de la base mongod de datos en una entrada de registro estructurada en el siguiente formato JSON:
{ "logType": "<log-type>", "contents": "<log line from a log file>" }
El Operador de Kubernetes admite los siguientes tipos de registros:
automation-agent-verboseautomation-agent-stderrmongodbmongodb-auditagent-launcher-scriptautomation-agentmonitoring-agentbackup-agent
Cuando lee registros de un contenedor de base de datos, el operador de Kubernetes devuelve la entrada JSON estructurada que contiene registros de diferentes fuentes.
Revisar registros del operador de Kubernetes
Para revisar los registros del operador de Kubernetes, invoque este comando:
kubectl logs -f deployment/mongodb-kubernetes-operator -n <metadata.namespace>
También podrías consultar los Registros de Ops Manager para ver si se informaron problemas a Ops Manager.
Encuentra un pod específico
Para encontrar qué pods están disponibles, ejecuta primero este comando:
kubectl get pods -n <metadata.namespace>
Tip
Documentación de Kubernetes en kubectl get.
Revisar los registros de un pod específico
Si desea limitar su revisión a un Pod específico, puede invocar este comando:
kubectl logs <podName> -n <metadata.namespace>
Ejemplo
Si tu set de réplicas está etiquetado como myrs, ejecuta:
kubectl logs myrs-0 -n <metadata.namespace>
Esto devuelve el registro del agente de automatización para este conjunto de réplicas.
Revisar un registro específico
Puedes limitar tu revisión a un tipo específico de registro. Por ejemplo, el siguiente comando devuelve registros de auditoría de los registros de Kubernetes del Pod especificado especificando el tipo de registro mongodb-audit:
kubectl logs -c mongodb-enterprise-database replica-set-0 | jq -r 'select(.logType == "mongodb-audit") | .contents'
El comando devuelve una entrada similar a la siguiente salida:
{{{ "atype":"startup","ts":{"$date":"2023-08-30T20:43:54.649+00:00"},"uuid":{"$binary":"oDcPEY69R1yiUtpMupaXOQ==","$type":"04"},"local":{"isSystemUser":true},"remote":{"isSystemUser":true},"users":[],"roles":[],"param":{"options":{"auditLog":{"destination":"file","format":"JSON","path":"/var/log/mongodb-mms-automation/mongodb-audit.log"},"config":"/data/automation-mongod.conf","net":{"bindIp":"0.0.0.0","port":27017,"tls":{"mode":"disabled"}},"processManagement":{"fork":true},"replication":{"replSetName":"replica-set"},"storage":{"dbPath":"/data","engine":"wiredTiger"},"systemLog":{"destination":"file","path":"/var/log/mongodb-mms-automation/mongodb.log"}}},"result":0} {"atype":"startup","ts":{"$date":"2023-08-30T20:44:05.466+00:00"},"uuid":{"$binary":"OUbUWC1DQM6k/Ih4hKZq4g==","$type":"04"},"local":{"isSystemUser":true},"remote":{"isSystemUser":true},"users":[],"roles":[],"param":{"options":{"auditLog":{"destination":"file","format":"JSON","path":"/var/log/mongodb-mms-automation/mongodb-audit.log"},"config":"/data/automation-mongod.conf","net":{"bindIp":"0.0.0.0","port":27017,"tls":{"mode":"disabled"}},"processManagement":{"fork":true},"replication":{"replSetName":"replica-set"},"storage":{"dbPath":"/data","engine":"wiredTiger"},"systemLog":{"destination":"file","path":"/var/log/mongodb-mms-automation/mongodb.log"}}},"result":0}}}
Registros de auditoría
Para incluir los registros de auditoría en los registros del Pod de Kubernetes, añade la siguiente configuración additionalMongodConfig.auditLog a la definición de tu recurso. Puedes actualizar el nombre del archivo proporcionado según sea necesario.
spec: additionalMongodConfig: auditLog: destination: file format: JSON path: /var/log/mongodb-mms-automation/mongodb-audit.log
Revisar mensajes del Webhook de validación
El operador de Kubernetes utiliza un Webhook de validación Webhook para evitar que los usuarios apliquen definiciones de recursos no válidas. El webhook rechaza las solicitudes inválidas.
El rol de clúster y el enlace del rol de clúster para el webhook se incluyen en los archivos de configuración predeterminados que se aplican durante la instalación. Para crear el rol y el enlace, debe tener privilegios de administrador del clúster.
Si creas una definición de recurso no válida, el webhook devuelve un mensaje similar al siguiente que describe el error en el Shell:
error when creating "my-ops-manager.yaml": admission webhook "ompolicy.mongodb.com" denied the request: shardPodSpec field is not configurable for application databases as it is for sharded clusters and appdb replica sets
Cuando el Operador de Kubernetes concilia cada recurso, también valida ese recurso. El Operador de Kubernetes no requiere el webhook de validación para crear o actualizar recursos.
Si omites el webhook de validación o si remueves el rol y la vinculación del webhook de la configuración por defecto, o si tienes privilegios insuficientes para ejecutar la configuración, el Operador de Kubernetes emitirá advertencias, ya que no se trata de errores críticos. Si el Operador de Kubernetes encuentra un error crítico, marca el recurso como Failed.
Nota
Implementaciones de GKE (Google Kubernetes Engine)
GKE (Google Kubernetes Engine) tiene un problema conocido con el webhook al implementar en clústeres privados. Para obtener más información, consulte Actualice las reglas de firewall de Google para solucionar problemas de WebHook.
Ver todas las MongoDB especificaciones de recursos
Para ver todas las MongoDB especificaciones de recursos en el espacio de nombres proporcionado:
kubectl get mdb -n <metadata.namespace>
Ejemplo
Para leer detalles sobre el recurso independiente dublin, ejecute este comando:
kubectl get mdb dublin -n <metadata.namespace> -o yaml
Esto devuelve la siguiente respuesta:
apiVersion: mongodb.com/v1 kind: MongoDB metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"mongodb.com/v1","kind":"MongoDB","metadata":{"annotations":{},"name":"dublin","namespace":"mongodb"},"spec":{"credentials":"credentials","persistent":false,"podSpec":{"memory":"1Gi"},"project":"my-om-config","type":"Standalone","version":"4.0.0"}} clusterDomain: "" creationTimestamp: 2018-09-12T17:15:32Z generation: 1 name: dublin namespace: mongodb resourceVersion: "337269" selfLink: /apis/mongodb.com/v1/namespaces/mongodb/mongodbstandalones/dublin uid: 7442095b-b6af-11e8-87df-0800271b001d spec: credentials: my-credentials type: Standalone persistent: false project: my-om-config version: 8.0.0
Restaurar un StatefulSet que no se pudo implementar
Un pod StatefulSet puede bloquearse con un estado de Pending si encuentra un error durante la implementación.
Pending Los pods no finalizan automáticamente, incluso si realiza y aplica cambios de configuración para resolver el error.
Para devolver el StatefulSet a un estado saludable, aplica los cambios de configuración al recurso MongoDB en el estado Pending, y luego borra esos pods.
Ejemplo
Un sistema host tiene varios Pods en ejecución:
kubectl get pods my-replica-set-0 1/1 Running 2 2h my-replica-set-1 1/1 Running 2 2h my-replica-set-2 0/1 Pending 0 2h
my-replica-set-2 está atascado en la etapa Pending. Para recopilar más datos sobre el error, ejecuta:
kubectl describe pod my-replica-set-2 <describe output omitted> Warning FailedScheduling 15s (x3691 over 3h) default-scheduler 0/3 nodes are available: 1 node(s) had taints that the pod didn't tolerate, 2 Insufficient memory.
La salida indica un error en la asignación de memoria.
Actualizar las asignaciones de memoria en el recurso de MongoDB es insuficiente, ya que el pod no se termina automáticamente después de aplicar actualizaciones de configuración.
Para resolver este problema, actualiza la configuración, aplícala y luego elimina el pod bloqueado:
vi <my-replica-set>.yaml kubectl apply -f <my-replica-set>.yaml kubectl delete pod my-replica-set-2
Una vez que este pod suspendido se elimina, los otros pods se reinician con tu nueva configuración como parte de una actualización continua del Statefulset.
Nota
Para obtener más información sobre este problema, consulte Problema de Kubernetes.67250
Reemplazar un ConfigMap para reflejar los cambios
Si no puede modificar o volver a implementar un archivo de recurso ya implementado ConfigMap mediante el comando kubectl apply, ejecute:
kubectl replace -f <my-config-map>.yaml
Esto elimina y vuelve a crear el archivo de recursos ConfigMap.
Este comando es útil en los casos en que deseas realizar un cambio recursivo inmediato, o necesitas actualizar archivos de recursos que no se pueden actualizar una vez inicializados.
Remover componentes de Kubernetes
Importante
Para eliminar cualquier componente, necesita los siguientes permisos:
| |
|
Remueva un recurso de MongoDB
Para eliminar cualquier instancia que haya implementado Kubernetes, debe usar Kubernetes.
Importante
Se puede usar solo el Operador de Kubernetes para remover las instancias implementadas por Kubernetes. Si utiliza Ops Manager para remover la instancia, Ops Manager arroja un error.
Eliminar un recurso de MongoDB no lo elimina de la interfaz de usuario de Ops Manager. Debes remover el recurso manualmente de Ops Manager. Para más información, consulta remover un Proceso de supervisión.
Borrar un recurso de MongoDB para el que activaste copia de seguridad no borra los snapshots del recurso. Debes borrar instantáneas en Ops Manager.
Ejemplo
Para remover una única instancia de MongoDB creada utilizando Kubernetes:
kubectl delete mdb <name> -n <metadata.namespace>
Para remover todas las instancias de MongoDB que creaste utilizando Kubernetes:
kubectl delete mdb --all -n <metadata.namespace>
Remueve el operador de Kubernetes
Para remover el Kubernetes Operator:
Quitar todos los recursos de Kubernetes:
kubectl delete mdb --all -n <metadata.namespace> Remueve el Operador de Kubernetes:
kubectl delete deployment mongodb-kubernetes-operator -n <metadata.namespace>
Remover las CustomResourceDefinitions
Para remover el CustomResourceDefinitions:
Quitar todos los recursos de Kubernetes:
kubectl delete mdb --all -n <metadata.namespace> Remover la CustomResourceDefinitions:
kubectl delete crd mongodb.mongodb.com kubectl delete crd mongodbusers.mongodb.com kubectl delete crd opsmanagers.mongodb.com
Eliminar el namespace
Para remover el namespace:
Quitar todos los recursos de Kubernetes:
kubectl delete mdb --all -n <metadata.namespace> Remover el namespace:
kubectl delete namespace <metadata.namespace>
Crear una Nueva Solicitud de Volumen Persistente después de borrar un Pod
Si elimina accidentalmente el conjunto de réplicas de MongoDB Pod y su reclamo de volumen persistente, el operador de Kubernetes no puede reprogramar el Pod de MongoDB y emite el siguiente mensaje de error:
scheduler error: pvc not found to schedule the pod
Para recuperarte de este error, debes crear manualmente un nuevo PVC con el nombre del objeto PVC que corresponde a este pod de set de réplicas, como data-<replicaset-pod-name>.
Deshabilitar controles de funcionalidades de Ops Manager
Cuando gestionas un Proyecto de Ops Manager a través del operador de Kubernetes, este ubica la EXTERNALLY_MANAGED_LOCK política de control de funcionalidad en el Proyecto. Esta política desactiva ciertas funcionalidades en la aplicación Ops Manager que pueden comprometer la configuración del operador de Kubernetes. Si necesitas utilizar estas funcionalidades bloqueadas, puedes eliminar la política mediante la API de controles de funcionalidad, realizar cambios en la aplicación Ops Manager, y luego restablecer la política original a través de la API.
Advertencia
El siguiente procedimiento le permite utilizar funcionalidades en la aplicación Ops Manager que de otro modo estarían bloqueadas por el operador de Kubernetes.
Recupere las políticas de control de funciones para su proyecto de Ops Manager.
curl --user "{USERNAME}:{APIKEY}" --digest \ --header "Accept: application/json" \ --header "Content-Type: application/json" \ --include \ --request GET "https://{OPSMANAGER-HOST}:{PORT}/api/public/v1.0/groups/{PROJECT-ID}/controlledFeature?pretty=true" Guarde la respuesta que devuelve la API. Después de realizar cambios en la aplicación Ops Manager, debe añadir estas políticas nuevamente al proyecto.
Importante
Tenga en cuenta los campos y valores resaltados en la siguiente respuesta de muestra. Debes enviar estos mismos campos y valores en pasos posteriores cuando remuevas y agregues políticas de control de funciones.
El campo
externalManagementSystem.versioncorresponde a la versión de Kubernetes operador. Debes enviar exactamente el mismo valor de campo en tus solicitudes más tarde en esta tarea.Tu respuesta debe ser similar a:
{ "created": "2020-02-25T04:09:42Z", "externalManagementSystem": { "name": "mongodb-kubernetes-operator", "systemId": null, "version": "1.4.2" }, "policies": [ { "disabledParams": [], "policy": "EXTERNALLY_MANAGED_LOCK" }, { "disabledParams": [], "policy": "DISABLE_AUTHENTICATION_MECHANISMS" } ], "updated": "2020-02-25T04:10:12Z" } Actualizar el arreglo
policiescon una lista vacía:Nota
Los valores que proporciones para el objeto
externalManagementSystem, como el campoexternalManagementSystem.version, deben coincidir con los valores recibidos en la respuesta del Paso 1.curl --user "{USERNAME}:{APIKEY}" --digest \ --header "Accept: application/json" \ --header "Content-Type: application/json" \ --include \ --request PUT "https://{OPSMANAGER-HOST}:{PORT}/api/public/v1.0/groups/{PROJECT-ID}/controlledFeature?pretty=true" \ --data '{ "externalManagementSystem": { "name": "mongodb-kubernetes-operator", "systemId": null, "version": "1.4.2" }, "policies": [] }' Las funcionalidades previamente bloqueadas ya están disponibles en la aplicación Ops Manager.
Realice sus cambios en la aplicación Ops Manager.
Actualice la
policiesmatriz con las políticas de control de características originales:Nota
Los valores que proporciones para el objeto
externalManagementSystem, como el campoexternalManagementSystem.version, deben coincidir con los valores recibidos en la respuesta del Paso 1.curl --user "{USERNAME}:{APIKEY}" --digest \ --header "Accept: application/json" \ --header "Content-Type: application/json" \ --include \ --request PUT "https://{OPSMANAGER-HOST}:{PORT}/api/public/v1.0/groups/{PROJECT-ID}/controlledFeature?pretty=true" \ --data '{ "externalManagementSystem": { "name": "mongodb-kubernetes-operator", "systemId": null, "version": "1.4.2" }, "policies": [ { "disabledParams": [], "policy": "EXTERNALLY_MANAGED_LOCK" }, { "disabledParams": [], "policy": "DISABLE_AUTHENTICATION_MECHANISMS" } ] }' Las funcionalidades ahora están bloqueadas de nuevo, lo que impide realizar más cambios por medio de la aplicación Ops Manager. Sin embargo, el operador de Kubernetes conserva cualquier cambio que hayas realizado en la aplicación de Ops Manager mientras las funcionalidades estuvieron disponibles.
Remover recursos cuando el operador de Kubernetes falle
Cuando borras un recurso personalizado de MongoDB a través del operador de Kubernetes, este último se encarga de eliminar el despliegue en Cloud Manager u Ops Manager. Para obtener más información, consulta Eliminar un recurso de MongoDB.
Sin embargo, la eliminación de recursos podría fallar en Kubernetes. Por ejemplo, si el Operador de Kubernetes falla antes de que borres el recurso de MongoDB, debes remover manualmente las implementaciones y borrar sus proyectos en Cloud Manager u Ops Manager.
Para remover los recursos de Ops Manager o Cloud Manager manualmente:
Remover una implementación de Ops Manager o Cloud Manager en el Proyecto utilizando la Interfaz de Usuario o la API.
Elimina una implementación en la interfaz de usuario de Ops Manager o Cloud Manager. En Ops Manager, remueva una implementación de automatización y remueva una implementación de supervisión.
En Cloud Manager, elimina una implementación de la automatización y elimina una implementación de supervisión.
Como alternativa, elimine una implementación mediante la API para actualizar la configuración de automatización en Ops Manager o Cloud Manager con una configuración vacía mediante la solicitud de API de Ops Manager o la solicitud de API de Cloud Manager.
Ejecute el comando similar al siguiente ejemplo de Ops Manager:
curl --user "{USERNAME}:{APIKEY}" --digest \ --header "Content-Type: application/json" \ --include \ --request PUT "https://{OPSMANAGER-HOST}/api/public/v1.0/groups/{PROJECT-ID}/automationConfig" \ --data '{}' Nota
Eliminar un recurso de MongoDB para el que se habilitó la copia de seguridad no elimina las instantáneas del recurso. Debe eliminarlas en Ops Manager o en Cloud Manager.
Elimine un proyecto de Ops Manager o Cloud Manager mediante la interfaz de usuario o la API. Elimine un proyecto en Ops Manager o Cloud Manager.
Como alternativa, elimine un proyecto mediante la solicitud de API de Ops Manager o la solicitud de API de Cloud Manager.
Ejecute el comando similar al siguiente ejemplo de Ops Manager:
curl --user "{USERNAME}:{APIKEY}" --digest \ --request DELETE "{OPSMANAGER-HOST}/api/public/v1.0/groups/${PROJECT-ID}"
Depurar un contenedor que falla
Un contenedor podría fallar con un error que provoque que Kubernetes reinicie dicho contenedor en un bucle.
Es posible que debas interactuar con ese contenedor para inspeccionar archivos o ejecutar comandos. Esto requiere que evites que se reinicie el contenedor.
En tu editor de texto preferido, abre el recurso de MongoDB que necesitas reparar.
A este recurso, añade una colección
podSpecque se asemeje a la siguiente.podSpec: podTemplate: spec: containers: - name: mongodb-enterprise-database command: ['sh', '-c', 'echo "Hello!" && sleep 3600' ] El comando sleep en el
spec.podSpec.podTemplate.specle indica al contenedor que espere el número de segundos que especifique. En este ejemplo, el contenedor esperará durante 1 hora.Aplica este cambio al recurso.
kubectl apply -f <resource>.yaml Invocar el shell dentro del contenedor.
kubectl exec -it <pod-name> bash
Verificar la exactitud de los nombres de dominio en los certificados TLS
Un set de réplicas de MongoDB o un clúster puede no alcanzar el estado READY si el certificado TLS no es válido.
Cuando configuras TLS para **sets de réplicas** de MongoDB o **clústeres**, verifica que especifiques un certificado válido.
Si no especifica el nombre de dominio correcto para cada certificado TLS, los registros del operador de Kubernetes pueden contener un mensaje de error similar al siguiente, donde foo.svc.local es el nombre de dominio especificado incorrectamente para el pod del miembro del clúster:
TLS attempt failed : x509: certificate is valid for foo.svc.local, not mongo-0-0.mongo-0.mongodb.svc.cluster.local
Cada certificado debe incluir un nombre de dominio válido.
Para cada conjunto de réplicas o miembro del clúster fragmentado, el nombre común, también conocido como nombre de dominio, para el certificado de ese miembro debe coincidir con el FQDN del pod en el que está implementado este miembro del clúster.
El nombre FQDN en cada certificado tiene la siguiente sintaxis: pod-name.service-name.namespace.svc.cluster.local. Este nombre es diferente para cada Pod que aloje un nodo del set de réplicas o un clúster fragmentado.
Por ejemplo, para un nodo de un set de réplicas implementado en un Pod con el nombre rs-mongos-0-0, en el servicio de Kubernetes Operador denominado mongo-0 que se crea en el namespace por defecto mongodb, el FQDN es:
rs-mongos-0-0.mongo-0.mongodb.svc.cluster.local
Para verificar si ha configurado correctamente los certificados TLS:
Ejecuta:
kubectl logs -f <pod_name> Comprueba los mensajes relacionados con TLSen los archivos de registro del Operador de Kubernetes.
Para obtener más información sobre los requisitos del certificado TLS, consulte los requisitos previos en la TLS-Encrypted Connections pestaña en Implementar un set de réplicas o en Implementar un clúster.
Verifica la versión de MongoDB cuando se ejecuta en modo local.
Es posible que MongoDB no alcance un CustomResource Running estado si Ops Manager se ejecuta en modo local y usted especifica una versión de MongoDB que no existe o una versión válida de MongoDB para la cual Ops Manager implementado en modo local no descargó un archivo MongoDB correspondiente.
Si especifica una versión de MongoDB que no existe, o una versión de MongoDB válida para la que Ops Manager no pudo descargar un fichero de MongoDB, aunque los Pods puedan alcanzar el estado READY, los registros del operador de Kubernetes contienen un mensaje de error similar al siguiente:
Failed to create/update (Ops Manager reconciliation phase): Status: 400 (Bad Request), Detail: Invalid config: MongoDB <version> is not available.
Esto podría significar que el Agente de MongoDB no pudo descargar correctamente el binario correspondiente de MongoDB al directorio /var/lib/mongodb-mms-automation. Si el Agente de MongoDB puede descargar correctamente el binario de MongoDB para la versión especificada, este directorio contiene una carpeta de binarios de MongoDB, como mongodb-linux-x86_64-8.0.0.
Para verificar si existe una carpeta binaria de MongoDB:
Especifica el nombre del Pod para este comando:
kubectl exec --stdin --tty $<pod_name> /bin/sh Verifica si hay una carpeta binaria de MongoDB en el directorio
/var/lib/mongodb-mms-automation.Si no puede localizar una carpeta binaria de MongoDB, copie el fichero de MongoDB en el Volumen Persistente de Ops Manager para cada set de réplicas de Ops Manager desplegado.
La actualización falla al usar kubectl o oc
Puedes recibir el siguiente error al actualizar el Operador de Kubernetes:
Forbidden: updates to statefulset spec for fields other than 'replicas', 'template', and 'updateStrategy' are forbidden
Para resolver este error:
Elimine la implementación antigua de Kubernetes Operator.
kubectl delete deployment/mongodb-kubernetes-operator -n <metadata.namespace> Nota
Eliminar la implementación de Kubernetes Operator no afecta al ciclo de vida de los recursos de MongoDB.
Repita el comando
kubectl applypara actualizar a la nueva versión del operador de Kubernetes.
La actualización falla usando Helm Charts
Puedes recibir el siguiente error al actualizar el Operador de Kubernetes:
Error: UPGRADE FAILED: cannot patch "mongodb-kubernetes-operator" with kind Deployment: Deployment.apps "mongodb-kubernetes-operator" is invalid: ... field is immutable
Para resolver este error:
Elimine la implementación antigua de Kubernetes Operator.
kubectl delete deployment/mongodb-kubernetes-operator -n <metadata.namespace> Nota
Eliminar la implementación de Kubernetes Operator no afecta al ciclo de vida de los recursos de MongoDB.
Repita el comando
helmpara actualizar a la nueva versión del operador de Kubernetes.
Recuperar recurso debido a una configuración de automatización rota
Si un recurso personalizado permanece en un estado Pending o Failed durante un período prolongado, el Operador de Kubernetes recupera automáticamente tus recursos MongoDB enviando la configuración de automatización a Ops Manager. Esto impide un bloqueo mutuo cuando el MongoDB Agent no puede implementar un cambio de configuración de automatización actualizado porque el StatefulSet está atascado en un estado Pending debido a un intento previo de implementación de una configuración de automatización no válida.
Para configurar la recuperación automática, define las siguientes variables de entorno en tu archivo mongodb-kubernetes.yaml:
MDB_AUTOMATIC_RECOVERY_ENABLE para habilitar o deshabilitar la recuperación automática de
MongoDBrecursos por pod.MDB_AUTOMATIC_RECOVERY_BACKOFF_TIME_S para establecer la cantidad de segundos que un recurso personalizado puede permanecer en un
PendingFailedestado o antes de que el operador de Kubernetes recupere automáticamente susMongoDBrecursos.
Ejemplo
1 spec: 2 template: 3 spec: 4 serviceAccountName: mongodb-kubernetes-operator 5 containers: 6 - name: mongodb-kubernetes-operator 7 image: <operatorVersionUrl> 8 imagePullPolicy: <policyChoice> 9 env: 10 - name: MDB_AUTOMATIC_RECOVERY_ENABLE 11 value: true 12 - name: MDB_AUTOMATIC_RECOVERY_BACKOFF_TIME_S 13 value: 1200
Para aprender a definir variables de entorno, consulte Definir variables de entorno para un contenedor.