Nota
En cualquier lugar de esta página donde diga Ops Manager, puedes sustituir Cloud Manager.
Importante
Puedes usar el Operador de Kubernetes para implementar recursos de MongoDB con Cloud Manager y con Ops Manager versión 6.0.x o posterior.
Puede utilizar el Atlas Operator para implementar recursos de MongoDB en Atlas.
Advertencia
El operador de Kubernetes no es compatible con nodos árbitros.
Clústeres fragmentados proporcionan escalado horizontal para grandes conjuntos de datos y permiten operaciones de alto rendimiento al distribuir el conjunto de datos entre un grupo de servidores.
Para aprender más sobre particionado, consulta Introducción al particionado en el manual de MongoDB.
Utiliza este procedimiento para implementar un nuevo clúster particionado que Ops Manager gestiona. Posteriormente, puede usar Ops Manager para agregar particiones y realizar otras operaciones de mantenimiento en el clúster.
Considerations
No implementar agentes de supervisión dentro y fuera de Kubernetes
Debido a la traducción de red de Kubernetes, un agente de supervisión fuera de Kubernetes no puede supervisar instancias de MongoDB dentro de Kubernetes. Por esta razón, no se admiten implementaciones k8s y no k8s en el mismo proyecto. Utiliza proyectos separados.
Elige si deseas cifrar las conexiones
Cuando implemente su clúster sharded a través del operador de Kubernetes, debe elegir si desea cifrar las conexiones utilizando TLS certificados.
El siguiente procedimiento para TLS-Encrypted Conexiones:
Establece conexiones cifradas TLSentre particiones de clúster.
Establece conexiones cifradas mediante TLSentre aplicaciones cliente y implementaciones de MongoDB.
Requiere certificados válidos para el cifrado TLS.
El siguiente procedimiento para Non-Encrypted Connections:
No cifra las conexiones entre particiones del clúster.
No cifra las conexiones entre las aplicaciones cliente y las implementaciones de MongoDB.
Tiene menos requisitos de configuración que una implementación con conexiones cifradas TLS.
Nota
No puedes asegurar una instancia autónoma de MongoDB en un clúster de Kubernetes.
Para configurar el cifrado TLS para un set de réplicas, consulta Implementa un conjunto de réplicas.
Seleccione la pestaña adecuada dependiendo de si desea cifrar las conexiones de su set de réplicas con TLS.
Requisitos previos
Para implementar un clúster particionado utilizando un objeto, debes:
Tenga o cree una instancia de Ops Manager o una organización de Cloud Manager.
Tener o instalar los Controladores MongoDB para el Operador de Kubernetes.
Crea o genera un ConfigMap de Kubernetes Operator.
Crea credenciales para el Operador de Kubernetes o configura una herramienta diferente de almacenamiento de secretos.
Nota
Para evitar almacenar secretos en implementaciones de Kubernetes de un solo clúster, puedes migrar todos los secretos a una herramienta de almacenamiento de secretos. Las implementaciones en múltiples clústeres de Kubernetes no admiten el almacenamiento de secretos en herramientas de almacenamiento de secretos, como HashiCorp Vault.
Genera un certificado TLS para cada uno de los siguientes componentes:
Cada partición en su clúster. Asegúrese de añadir SANes para cada pod de Kubernetes que hospeda un miembro de partición al certificado.
En tus certificados TLS, el SAN de cada pod de partición debe utilizar el siguiente formato:
<pod-name>.<metadata.name>-sh.<namespace>.svc.cluster.local Tus servidores de configuración. Asegúrate de agregar SANs para cada pod de Kubernetes que hospede tus servidores de configuración al certificado.
En tus certificados TLS, el SAN para cada pod de servidor de configuración debe usar el siguiente formato:
<pod-name>.<metadata.name>-cs.<namespace>.svc.cluster.local Tu
mongosinstancias. Asegúrese de añadir SANs para cada pod de Kubernetes que aloje unamongosal certificado.En tus certificados TLS, el SAN para cada pod
mongosdebe utilizar este formato:<pod-name>.<metadata.name>-svc.<namespace>.svc.cluster.local
El MongoDB Agent de tu proyecto. Para el certificado del agente MongoDB, asegúrese de cumplir los siguientes requisitos:
El Nombre común en el certificado TLS no está vacío.
La Organización combinada y la Unidad Organizativa en cada certificado TLS difiere de la Organización y Unidad Organizativa en el certificado TLS para los miembros del set de réplicas.
Debe poseer el certificado CA y la clave que utilizó para firmar sus certificados TLS.
Importante
El operador de Kubernetes utiliza kubernetes.io/tls secretos para almacenar TLS certificados y llaves privadas para Ops Manager y recursos de MongoDB. A partir de la versión 1.17.0 del operador de Kubernetes, el operador de Kubernetes no admite archivos PEM concatenados almacenados como secretos opacos.
Para implementar un clúster particionado utilizando un objeto, debes:
Tenga o cree una instancia de Ops Manager o una organización de Cloud Manager.
Tener o instalar los Controladores MongoDB para el Operador de Kubernetes.
Crea o genera un ConfigMap de Kubernetes Operator.
Crea credenciales para el Operador de Kubernetes o configura una herramienta diferente de almacenamiento de secretos.
Nota
Para evitar almacenar secretos en implementaciones de Kubernetes de un solo clúster, puedes migrar todos los secretos a una herramienta de almacenamiento de secretos. Las implementaciones en múltiples clústeres de Kubernetes no admiten el almacenamiento de secretos en herramientas de almacenamiento de secretos, como HashiCorp Vault.
Implementar un clúster particionado
Configura kubectl para que se ajuste por defecto a tu espacio de nombres.
Si aún no lo ha hecho, ejecute el siguiente comando para ejecutar todos los comandos de kubectl en el namespace que creó.
Nota
Si estás implementando un recurso de Ops Manager en una implementación de MongoDB multidispositivo en clústeres de Kubernetes:
Defina
contextcomo el nombre del clúster operador, por ejemplo:kubectl config set context "$MDB_CENTRAL_CLUSTER_FULL_NAME".Establece el
--namespaceen el mismo ámbito que utilizaste para tu implementación de MongoDB de clústeres multi-Kubernetes, como por ejemplo:kubectl config --namespace "mongodb".
kubectl config set-context $(kubectl config current-context) --namespace=<metadata.namespace>
Crea el secreto de los certificados TLS de tus particiones.
Ejecuta este comando kubectl para crear un nuevo secreto que almacene los certificados de las particiones del clúster:
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-0-cert \ --cert=<shard-0-tls-cert> \ --key=<shard-0-tls-key> kubectl -n mongodb create secret tls <prefix>-<metadata.name>-1-cert \ --cert=<shard-1-tls-cert> \ --key=<shard-1-tls-key>
Si utilizas HashiCorp Vault como tu herramienta de almacenamiento secreto, puedes crear un secreto de Vault en su lugar.
Crea el secreto para el certificado TLS de los servidores de configuración.
Ejecute este comando kubectl para crear un nuevo secreto que almacene el certificado de los servidores de configuración del clúster fragmentado:
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-config-cert \ --cert=<config-tls-cert> \ --key=<config-tls-key>
Si utilizas HashiCorp Vault como tu herramienta de almacenamiento secreto, puedes crear un secreto de Vault en su lugar.
Crea el secreto para el certificado TLS de tus servidores mongos.
Ejecute este comando kubectl para crear un nuevo secreto que almacene el clúster fragmentado mongos certificado:
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-mongos-cert \ --cert=<mongos-tls-cert> \ --key=<mongos-tls-key>
Si utilizas HashiCorp Vault como tu herramienta de almacenamiento secreto, puedes crear un secreto de Vault en su lugar.
Cree el secreto para el certificado TLS de su agente.
Ejecute este comando kubectl para crear un nuevo secreto que almacene el certificado TLS del agente:
kubectl create secret tls <prefix>-<metadata.name>-agent-certs \ --cert=<agent-tls-cert> \ --key=<agent-tls-key>
Si utilizas HashiCorp Vault como tu herramienta de almacenamiento secreto, puedes crear un secreto de Vault en su lugar.
Cree el ConfigMap para vincular su CA con su implementación.
Ejecuta este comando kubectl para vincular tu CA a tu clúster segmentado y especificar el archivo de certificado CA que siempre debes llamar ca-pem para el recurso MongoDB:
kubectl create configmap custom-ca --from-file=ca-pem=<your-custom-ca-file>
Copia el clúster recurso.
Cambia la configuración de este archivo YAML para que coincida con su configuración deseada de sharded cluster.
Cambia la configuración para que coincida con la configuración deseada del clúster fragmentado.
1 2 apiVersion: mongodb.com/v1 3 kind: MongoDB 4 metadata: 5 name: <my-sharded-cluster> 6 spec: 7 shardCount: 2 8 mongodsPerShardCount: 3 9 mongosCount: 2 10 configServerCount: 3 11 version: "8.0.0" 12 opsManager: 13 configMapRef: 14 name: <configMap.metadata.name> 15 # Must match metadata.name in ConfigMap file 16 credentials: <mycredentials> 17 type: ShardedCluster 18 persistent: true 19 ...
19 security: 20 tls: 21 ca: <custom-ca> 22 certsSecretPrefix: <prefix> 23 ...
Pega el ejemplo copiado para crear un nuevo recurso de clúster fragmentado.
Abre tu editor de texto preferido y pega la especificación del objeto en un nuevo archivo de texto.
Configura los ajustes resaltados en el paso anterior de la siguiente manera.
Clave | Tipo | Descripción | Ejemplo |
|---|---|---|---|
string | Etiqueta para este clúster objeto de Kubernetes. Los nombres de recursos deben tener 44 caracteres o menos. Para aprender más, consulta |
| |
entero | Cantidad de particiones a implementar. |
| |
entero | Número de nodos de partición por partición. |
| |
entero | Número de routers de particiones que se van a implementar. |
| |
entero | Número de nodos del set de réplicas del servidor de configuración. |
| |
string | Versión de MongoDB que debería ejecutar este clúster. El formato debe ser IMPORTANTE: Asegúrate de elegir una versión compatible del servidor MongoDB. Las versiones compatibles varían según la imagen base que utiliza el recurso de la base de datos MongoDB. Para obtener más información sobre el versionado de MongoDB, consulta versionado de MongoDB en el manual de MongoDB. | Para obtener los mejores resultados, utilice la última versión disponible de MongoDB Enterprise que sea compatible con su versión de Ops Manager. | |
string | Nombre del ConfigMap con la configuración de conexión de Ops Manager. La configuración Este valor debe existir en el mismo espacio de nombres que el recurso que quieres crear. IMPORTANTE: El operador de Kubernetes rastrea cualquier cambio en el ConfigMap y reconcilia el estado del recurso |
| |
string | Nombre del secreto que creaste como Ops Manager API credenciales de autenticación para que el Operador Kubernetes se comunique con Ops Manager. El objeto secreto de Kubernetes de Ops Manager que contiene las credenciales debe estar en el mismo namespace que el recurso que se quiere crear. IMPORTANTE: El operador de Kubernetes rastrea cualquier cambio realizado en el Secreto y reconcilia el estado del recurso |
| |
string | Tipo de recurso |
| |
string | Opcional. Indicador que muestra si este recurso Si este valor es Para cambiar la <a class=\" \" target=\" \"href=\" \" rel=\"noopener noreferrer\"> Solicitud de volumen persistente <svg class=\" \" height=\" \" width=\" \" role=\" \" aria-hidden=\" \" alt=\" \" viewbox=\" \"><path d=\" \" fill=\" \"> <path d=\" \" fill=\" \"> configuración, configura las siguientes colecciones para cumplir con tus requisitos de implementación:
ADVERTENCIA: Otorga a tus contenedores permiso para guardar en tu volumen persistente. El operador de Kubernetes establece Si no usas Volúmenes persistentes, los gráficos Disk Usage y Disk IOPS no se pueden mostrar ni en la pestaña Processes en la página Deployment, ni en la página Metrics al revisar los datos de esta implementación. |
|
Configura los ajustes de TLS para tu recurso de cluster fragmentado utilizando una autoridad certificadora personalizada (CA).
Para habilitar TLS en tu implementación, configura los siguientes ajustes en tu objeto de Kubernetes:
Clave | Tipo | Necesidad | Descripción | Ejemplo |
|---|---|---|---|---|
spec.security | string | Requerido | Agregar el nombre del ConfigMap que almacena la CA personalizada que usaste para firmar los certificados TLS de tu implementación. |
|
spec.security | string | Requerido | Agrega el Por ejemplo, si le llamas a tu implementación |
|
Agrega cualquier configuración adicional aceptada para una clúster fragmentado implementación.
También puede agregar cualquiera de los siguientes ajustes opcionales al archivo de especificaciones objeto para una implementación de clúster:
Advertencia
Debe establecer spec.clusterDomain si su clúster Kubernetes tiene un dominio por defecto diferente al por defecto cluster.local. Si no utilizas la opción por defecto ni estableces la opción spec.clusterDomain, el Operador Kubernetes podría no funcionar como se espera.
For config server
Para enrutadores de particiones
Para los nodos de la partición
Inicie su implementación de clúster particionado.
Ejecute el siguiente comando de Kubernetes para crear su clúster fragmentado:
kubectl apply -f <sharded-cluster-conf>.yaml
Verifica el registro después de ejecutar este comando. Si la creación fue exitosa, deberías ver un mensaje similar al siguiente:
2018-06-26T10:30:30.346Z INFO operator/shardedclusterkube.go:52 Created! {"sharded cluster": "my-sharded-cluster"}
Supervisa el estado de tu implementación de clúster fragmentado.
Para verificar el estado de su MongoDB recurso, utilice el siguiente comando:
kubectl get mdb <resource-name> -o yaml -w
Con la bandera -w (observar) activada, cuando la configuración cambia, la salida se actualiza inmediatamente hasta que la fase de estado alcanza el estado Running. Para obtener más información sobre el estado de implementación de recursos, consulta Solucionar problemas con el operador de Kubernetes.
Después de encriptar el recurso de base de datos con TLS, puedes proteger lo siguiente:
Renovar los certificados TLS para un clúster fragmentado
Renueva tus certificados TLS periódicamente utilizando el siguiente procedimiento:
Configura kubectl para que se ajuste por defecto a tu espacio de nombres.
Si aún no lo ha hecho, ejecute el siguiente comando para ejecutar todos los comandos de kubectl en el namespace que creó.
Nota
Si estás implementando un recurso de Ops Manager en una implementación de MongoDB multidispositivo en clústeres de Kubernetes:
Defina
contextcomo el nombre del clúster operador, por ejemplo:kubectl config set context "$MDB_CENTRAL_CLUSTER_FULL_NAME".Establece el
--namespaceen el mismo ámbito que utilizaste para tu implementación de MongoDB de clústeres multi-Kubernetes, como por ejemplo:kubectl config --namespace "mongodb".
kubectl config set-context $(kubectl config current-context) --namespace=<metadata.namespace>
Renueva el secreto para los certificados TLS de tus particiones.
Ejecute este comando kubectl para renovar un secreto existente que almacena los certificados de las particiones del clúster fragmentado:
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-0-cert \ --cert=<shard-0-tls-cert> \ --key=<shard-0-tls-key> \ --dry-run=client \ -o yaml | kubectl apply -f - kubectl -n mongodb create secret tls <prefix>-<metadata.name>-1-cert \ --cert=<shard-1-tls-cert> \ --key=<shard-1-tls-key> \ --dry-run=client \ -o yaml | kubectl apply -f -
Renueva el secreto para los certificados TLS del servidor de configuración.
Ejecuta este comando kubectl para renovar un secreto que almacena los certificados del servidor de configuración del clúster fragmentado:
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-config-cert \ --cert=<config-tls-cert> \ --key=<config-tls-key> \ --dry-run=client \ -o yaml | kubectl apply -f -
Renueva el secreto para los certificados TLS del servidor mongos.
Ejecute este comando kubectl para renovar un secret existente que almacene los certificados de mongos del clúster sharded:
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-mongos-cert \ --cert=<mongos-tls-cert> \ --key=<mongos-tls-key> \ --dry-run=client \ -o yaml | kubectl apply -f -
Configura kubectl para que se ajuste por defecto a tu espacio de nombres.
Si aún no lo ha hecho, ejecute el siguiente comando para ejecutar todos los comandos de kubectl en el namespace que creó.
Nota
Si estás implementando un recurso de Ops Manager en una implementación de MongoDB multidispositivo en clústeres de Kubernetes:
Defina
contextcomo el nombre del clúster operador, por ejemplo:kubectl config set context "$MDB_CENTRAL_CLUSTER_FULL_NAME".Establece el
--namespaceen el mismo ámbito que utilizaste para tu implementación de MongoDB de clústeres multi-Kubernetes, como por ejemplo:kubectl config --namespace "mongodb".
kubectl config set-context $(kubectl config current-context) --namespace=<metadata.namespace>
Copia el clúster recurso.
Cambia la configuración de este archivo YAML para que coincida con su configuración deseada de sharded cluster.
Este es un archivo YAML que puedes modificar para cumplir con la configuración deseada. Cambia los ajustes para que coincidan con la configuración de clústeres fragmentados que deseas.
1 2 apiVersion: mongodb.com/v1 3 kind: MongoDB 4 metadata: 5 name: <my-sharded-cluster> 6 spec: 7 shardCount: 2 8 mongodsPerShardCount: 3 9 mongosCount: 2 10 configServerCount: 3 11 version: "8.0.0" 12 opsManager: 13 configMapRef: 14 name: <configMap.metadata.name> 15 # Must match metadata.name in ConfigMap file 16 credentials: <mycredentials> 17 type: ShardedCluster 18 persistent: true 19 ...
Pega el ejemplo copiado para crear un nuevo recurso de clúster fragmentado.
Abre tu editor de texto preferido y pega la especificación del objeto en un nuevo archivo de texto.
Configura los ajustes resaltados en el paso anterior de la siguiente manera.
Clave | Tipo | Descripción | Ejemplo |
|---|---|---|---|
string | Etiqueta para este clúster objeto de Kubernetes. Los nombres de recursos deben tener 44 caracteres o menos. Para aprender más, consulta |
| |
entero | Cantidad de particiones a implementar. |
| |
entero | Número de nodos de partición por partición. |
| |
entero | Número de routers de particiones que se van a implementar. |
| |
entero | Número de nodos del set de réplicas del servidor de configuración. |
| |
string | Versión de MongoDB que debería ejecutar este clúster. El formato debe ser IMPORTANTE: Asegúrate de elegir una versión compatible del servidor MongoDB. Las versiones compatibles varían según la imagen base que utiliza el recurso de la base de datos MongoDB. Para obtener más información sobre el versionado de MongoDB, consulta versionado de MongoDB en el manual de MongoDB. | Para obtener los mejores resultados, utilice la última versión disponible de MongoDB Enterprise que sea compatible con su versión de Ops Manager. | |
string | Nombre del ConfigMap con la configuración de conexión de Ops Manager. La configuración Este valor debe existir en el mismo espacio de nombres que el recurso que quieres crear. IMPORTANTE: El operador de Kubernetes rastrea cualquier cambio en el ConfigMap y reconcilia el estado del recurso |
| |
string | Nombre del secreto que creaste como Ops Manager API credenciales de autenticación para que el Operador Kubernetes se comunique con Ops Manager. El objeto secreto de Kubernetes de Ops Manager que contiene las credenciales debe estar en el mismo namespace que el recurso que se quiere crear. IMPORTANTE: El operador de Kubernetes rastrea cualquier cambio realizado en el Secreto y reconcilia el estado del recurso |
| |
string | Tipo de recurso |
| |
string | Opcional. Indicador que muestra si este recurso Si este valor es Para cambiar la <a class=\" \" target=\" \"href=\" \" rel=\"noopener noreferrer\"> Solicitud de volumen persistente <svg class=\" \" height=\" \" width=\" \" role=\" \" aria-hidden=\" \" alt=\" \" viewbox=\" \"><path d=\" \" fill=\" \"> <path d=\" \" fill=\" \"> configuración, configura las siguientes colecciones para cumplir con tus requisitos de implementación:
ADVERTENCIA: Otorga a tus contenedores permiso para guardar en tu volumen persistente. El operador de Kubernetes establece Si no usas Volúmenes persistentes, los gráficos Disk Usage y Disk IOPS no se pueden mostrar ni en la pestaña Processes en la página Deployment, ni en la página Metrics al revisar los datos de esta implementación. |
|
Agrega cualquier configuración adicional aceptada para una clúster fragmentado implementación.
También puede agregar cualquiera de los siguientes ajustes opcionales al archivo de especificaciones objeto para una implementación de clúster:
Advertencia
Debe establecer spec.clusterDomain si su clúster Kubernetes tiene un dominio por defecto diferente al por defecto cluster.local. Si no utilizas la opción por defecto ni estableces la opción spec.clusterDomain, el Operador Kubernetes podría no funcionar como se espera.
For config server
Para enrutadores de particiones
Para los nodos de la partición
Inicie su implementación de clúster particionado.
Ejecute el siguiente comando de Kubernetes para crear su clúster fragmentado:
kubectl apply -f <sharded-cluster-conf>.yaml
Verifica el registro después de ejecutar este comando. Si la creación fue exitosa, deberías ver un mensaje similar al siguiente:
2018-06-26T10:30:30.346Z INFO operator/shardedclusterkube.go:52 Created! {"sharded cluster": "my-sharded-cluster"}
Supervisa el estado de tu implementación de clúster fragmentado.
Para verificar el estado de su MongoDB recurso, utilice el siguiente comando:
kubectl get mdb <resource-name> -o yaml -w
Con la bandera -w (observar) activada, cuando la configuración cambia, la salida se actualiza inmediatamente hasta que la fase de estado alcanza el estado Running. Para obtener más información sobre el estado de implementación de recursos, consulta Solucionar problemas con el operador de Kubernetes.