Importante
Esta sección es solo para implementaciones de un solo clúster de Kubernetes. Para implementaciones de MongoDB con varios clústeres de Kubernetes, consulte Solucionar problemas de implementaciones con múltiples clústeres de Kubernetes.
Obtener el estado de un recurso implementado
Para encontrar el estado de un recurso implementado con el operador de Kubernetes, invoque uno de los siguientes comandos:
Para implementaciones de recursos de Ops Manager:
kubectl get <resource-name> -n <metadata.namespace> -o yaml El
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 implementación del recurso del demonio de respaldo.El campo
status.opsManager.phasemuestra el estado de implementación del recurso Ops Manager.
Nota
El controlador de Cloud Manager o Ops Manager supervisa los recursos de la base de datos definidos en las siguientes configuraciones:
spec.backup.s3Stores
Para 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 | ||||||||||
|
| ||||||||||
| Marca de tiempo en Formato de fecha y horaISO en 8601 UTC cuando ocurrió la última conciliación. | ||||||||||
| URL de implementación en Ops Manager. | ||||||||||
| Si habilitó las 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 conjunto de réplicas llamado my-replica-set en el espacio de nombres 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 se está ejecutando, debería 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
Mantenga y revise los registros adecuados para depurar problemas y supervisar la actividad del clúster. Utilice la arquitectura de registro recomendada para conservar los registros del pod incluso después de eliminarlo.
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, primero invoque este comando:
kubectl get pods -n <metadata.namespace>
Tip
Documentación de Kubernetes sobre kubectl get.
Revisar 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 su conjunto de réplicas está etiquetado myrs como, ejecute:
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
Puede restringir su revisión a un tipo de registro específico. 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 registros de auditoría en los registros del pod de Kubernetes, agregue la siguiente configuración additionalMongodConfig.auditLog a la definición del recurso. Puede 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
Comprobar mensajes desde el webhook de validación
El operador de Kubernetes utiliza un webhook de validación para evitar que los usuarios apliquen definiciones de recursos no válidas. El webhook rechaza las solicitudes no vá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 crea una definición de recurso no válida, el webhook devuelve un mensaje similar al siguiente que describe el error al 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 lo valida. El operador de Kubernetes no requiere el webhook de validación para crear o actualizar recursos.
Si omite el webhook de validación, elimina su rol y enlace de la configuración predeterminada o no tiene suficientes privilegios para ejecutar la configuración, el operador de Kubernetes emite advertencias, ya que no se trata de errores críticos. Si detecta 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,consulta Actualizar las reglas del firewall de Google para solucionar problemas de webhook.
Ver todas MongoDB las especificaciones del recurso
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 que el StatefulSet vuelva a un estado saludable, aplique los cambios de configuración al recurso MongoDB en el estado Pending y luego elimine 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 MongoDB es insuficiente, ya que el pod no finaliza automáticamente después de aplicar las actualizaciones de configuración.
Para solucionar este problema, actualice la configuración, aplíquela y luego elimine 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 se elimina este pod colgado, los otros pods se reinician con su nueva configuración como parte de la actualización continua de 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 los que desea realizar un cambio recursivo inmediato o necesita actualizar archivos de recursos que no se pueden actualizar una vez inicializados.
Eliminar componentes de Kubernetes
Importante
Para eliminar cualquier componente, necesita los siguientes permisos:
| |
|
Eliminar un MongoDB recurso
Para eliminar cualquier instancia que haya implementado Kubernetes, debe usar Kubernetes.
Importante
Solo puede usar el operador de Kubernetes para eliminar instancias implementadas en Kubernetes. Si usa Ops Manager para eliminar la instancia, este genera 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 eliminar todas las instancias de MongoDB que creó usando Kubernetes:
kubectl delete mdb --all -n <metadata.namespace>
Remueve el operador de Kubernetes
Para eliminar el operador de Kubernetes:
Eliminar todos los recursos de Kubernetes:
kubectl delete mdb --all -n <metadata.namespace> Eliminar el operador de Kubernetes:
kubectl delete deployment mongodb-kubernetes-operator -n <metadata.namespace>
Eliminar las CustomResourceDefinitions
Para eliminar CustomResourceDefinitions:
Eliminar todos los recursos de Kubernetes:
kubectl delete mdb --all -n <metadata.namespace> Eliminar CustomResourceDefinitions:
kubectl delete crd mongodb.mongodb.com kubectl delete crd mongodbusers.mongodb.com kubectl delete crd opsmanagers.mongodb.com
Eliminar el espacio de nombres
Para eliminar el espacio de nombres:
Eliminar todos los recursos de Kubernetes:
kubectl delete mdb --all -n <metadata.namespace> Eliminar el espacio de nombres:
kubectl delete namespace <metadata.namespace>
Crear una nueva reclamación de volumen persistente después de eliminar 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 recuperarse de este error, debe crear manualmente una nueva PVC con el nombre del objeto PVC que corresponde a este Pod de conjunto de réplicas,data-<replicaset-pod-name> como.
Deshabilitar los controles de funciones de Ops Manager
Al administrar un proyecto de Ops Manager mediante el operador de Kubernetes, este implementa la EXTERNALLY_MANAGED_LOCK política de control de funciones en el proyecto. Esta política deshabilita ciertas funciones de la aplicación Ops Manager que podrían comprometer la configuración del operador de Kubernetes. Si necesita usar estas funciones bloqueadas, puede eliminar la política mediante la API de control de funciones, realizar cambios en la aplicación Ops Manager y, a continuación, restaurar la política original mediantela 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 volver a agregar estas políticas al proyecto.
Importante
Tenga en cuenta los campos y valores resaltados en la siguiente respuesta de ejemplo. Debe enviar estos mismos campos y valores en pasos posteriores al eliminar y agregar políticas de control de funciones.
El campo
externalManagementSystem.versioncorresponde a la versión del operador de Kubernetes. Debe enviar exactamente el mismo valor de campo en sus solicitudes más adelante en esta tarea.Su respuesta debería 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" } Actualice la
policiesmatriz con una lista vacía:Nota
Los valores que proporcione para el objeto
externalManagementSystem, como el campoexternalManagementSystem.version, deben coincidir con los valores que recibió en la respuesta en el 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 funciones anteriormente bloqueadas ahora 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 proporcione para el objeto
externalManagementSystem, como el campoexternalManagementSystem.version, deben coincidir con los valores que recibió en la respuesta en el 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 funciones están bloqueadas de nuevo, lo que impide realizar más cambios a través de la aplicación Ops Manager. Sin embargo, el operador de Kubernetes conserva los cambios realizados en la aplicación Ops Manager mientras las funciones estaban disponibles.
Eliminar recursos cuando falla el operador de Kubernetes
Al eliminar un recurso personalizado de MongoDB mediante el operador de Kubernetes, este gestiona la eliminación de la implementación en Cloud Manager u Ops Manager. Para obtener más información, consulte Eliminar un MongoDB recurso.
Sin embargo, la eliminación de recursos podría fallar en Kubernetes. Por ejemplo, si el operador de Kubernetes falla antes de eliminar el recurso de MongoDB, deberá eliminar manualmente las implementaciones y sus proyectos en Cloud Manager u Ops Manager.
Para eliminar recursos de Ops Manager o Cloud Manager manualmente:
Elimine una implementación de Ops Manager o Cloud Manager en el proyecto mediante la interfaz de usuario o la API.
Elimine una implementación en la interfaz de Ops Manager o Cloud Manager. En Ops Manager, elimine una implementación de Automationy de Monitoring.
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 con fallos
Un contenedor puede fallar con un error que haga que Kubernetes reinicie ese contenedor en un bucle.
Es posible que necesite interactuar con ese contenedor para inspeccionar archivos o ejecutar comandos. Esto requiere que evite que el contenedor se reinicie.
En su editor de texto preferido, abra el recurso MongoDB que necesita reparar.
A este recurso, agregue una colección
podSpecque se parezca a la siguiente.podSpec: podTemplate: spec: containers: - name: mongodb-enterprise-database command: ['sh', '-c', 'echo "Hello!" && sleep 3600' ] El comando sleep en indica al contenedor que espere los segundos especificados. En este ejemplo, el contenedor
spec.podSpec.podTemplate.specesperará 1 horas.Aplicar 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
Es posible que un conjunto de réplicas de MongoDB o un clúster fragmentado no alcance el READY estado si el certificado TLS no es válido.
Al configurar TLS para conjuntos de réplicas o clústeres fragmentados de MongoDB, verifique que especifique 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 de cada certificado tiene la siguientepod-name.service-name.namespace.svc.cluster.local sintaxis:. Este nombre es diferente para cada pod que aloja un miembro del conjunto de réplicas o un clúster fragmentado.
Por ejemplo, para un miembro de un conjunto de réplicas implementado en un pod con el rs-mongos-0-0 nombre, en el servicio de operador de Kubernetes llamado mongo-0 que se crea en el espacio de nombres mongodb predeterminado, el FQDN es:
rs-mongos-0-0.mongo-0.mongodb.svc.cluster.local
Para comprobar si ha configurado correctamente los certificados TLS:
Ejecuta:
kubectl logs -f <pod_name> Busque 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 conjunto de réplicas o en Implementar un clúster fragmentado.
Verificar la versión de MongoDB al ejecutar 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 cual Ops Manager no pudo descargar un archivo de MongoDB, aunque los pods puedan alcanzar el READY estado, 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 comprobar si hay una carpeta binaria de MongoDB presente:
Especifique el nombre del Pod con este comando:
kubectl exec --stdin --tty $<pod_name> /bin/sh Compruebe si hay una carpeta binaria de MongoDB en el directorio
/var/lib/mongodb-mms-automation.Si no puede encontrar una carpeta binaria de MongoDB, copie el archivo de MongoDB en el volumen persistente de Ops Manager para cada conjunto de réplicas de Ops Manager implementado.
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:
Eliminar la antigua implementación del operador de Kubernetes.
kubectl delete deployment/mongodb-kubernetes-operator -n <metadata.namespace> Nota
Eliminar la implementación del operador de Kubernetes no afecta el ciclo de vida de sus recursos de MongoDB.
Repita el comando
kubectl applypara actualizar a la nueva versión del operador de Kubernetes.
La actualización falla al usar las cartas de Helm
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:
Eliminar la antigua implementación del operador de Kubernetes.
kubectl delete deployment/mongodb-kubernetes-operator -n <metadata.namespace> Nota
Eliminar la implementación del operador de Kubernetes no afecta el ciclo de vida de sus recursos de MongoDB.
Repita el comando
helmpara actualizar a la nueva versión del operador de Kubernetes.
Recuperar recursos debido a una configuración de automatización defectuosa
Si un recurso personalizado permanece en estado Pending o Failed durante un período prolongado, Kubernetes Operator recupera MongoDB automáticamente sus recursos enviando la configuración de automatización a Ops Manager. Esto evita un bloqueo cuando el agente de MongoDB no puede enviar un cambio actualizado en la configuración de automatización porque el StatefulSet está bloqueado en Pending estado debido a una transferencia previa de una configuración de automatización no válida.
Para configurar la recuperación automática, defina las siguientes variables ambientales en su 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.
Gestionar actualizaciones de la clave API del agente de Ops Manager
Si la clave API del agente de MongoDB se elimina o actualiza desde el panel de Ops Manager, los agentes implementados con sus recursos de MongoDB ya no podrán autenticarse en Ops Manager. Como resultado, Ops Manager podría informar que el conjunto de réplicas está inactivo. Utilice el siguiente procedimiento para asegurarse de que los agentes se reinicien manualmente con la clave API actualizada: