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.
Puedes utilizar el operador de Atlas para implementar recursos de MongoDB en Atlas.
Advertencia
Kubernetes Operator no admite nodos árbitro.
Los clústeres fragmentados proporcionan escalabilidad horizontal para grandes conjuntos de datos y permiten operaciones de alto rendimiento al distribuir el conjunto de datos entre un grupo de servidores.
Para obtener más información sobre el particionamiento (sharding), consulte la sección "Introducción al particionamiento" en el manual de MongoDB.
Siga este procedimiento para implementar un nuevo clúster fragmentado administrado por Ops Manager. Posteriormente, podrá usar Ops Manager para agregar fragmentos 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
Al implementar su clúster fragmentado a través del operador de Kubernetes, debe elegir si desea cifrar las conexiones mediante certificados TLS.
El siguiente procedimiento para TLS-Encrypted conexiones:
Establece conexiones cifradas mediante TLSentre las particiones del clúster.
Establece conexiones cifradas mediante TLSentre las aplicaciones cliente y las 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 mediante TLS.
Nota
No puedes asegurar una instancia autónoma de MongoDB en un clúster de Kubernetes.
Para configurar el cifrado TLS para un conjunto de réplicas, consulte Implementar un conjunto de réplicas.
Seleccione la pestaña correspondiente según si desea cifrar las conexiones de su conjunto de réplicas con TLS.
Requisitos previos
Para implementar un clúster fragmentado mediante un objeto, debe:
Disponer o crear 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.
Nota
Para evitar almacenar secretos en implementaciones de Kubernetes de un solo clúster, puede migrar todos los secretos a una herramienta de almacenamiento de secretos. Las implementaciones en varios clústeres de Kubernetes no admiten el almacenamiento de secretos en herramientas como HashiCorp Vault.
Genere un certificado TLS para cada uno de los siguientes componentes:
Cada fragmento en su clúster fragmentado. Asegúrese de agregar SANpara cada pod de Kubernetes que aloje un miembro del fragmento al certificado.
En sus certificados TLS, el SAN para cada pod de fragmento debe utilizar el siguiente formato:
<pod-name>.<metadata.name>-sh.<namespace>.svc.cluster.local Sus servidores de configuración. Asegúrese de agregar SANpara cada pod de Kubernetes que aloje sus servidores de configuración al certificado.
En sus certificados TLS, el SAN para cada pod del servidor de configuración debe utilizar el siguiente formato:
<pod-name>.<metadata.name>-cs.<namespace>.svc.cluster.local Sus instancias
mongos. Asegúrese de agregar SANpara cada pod de Kubernetes que aloje una instanciamongosal certificado.En sus certificados TLS, el SAN para cada pod
mongosdebe usar 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 y la Unidad Organizativa combinadas en cada certificado TLS difieren de la Organización y la Unidad Organizativa en el certificado TLS para los miembros de su conjunto de réplicas.
Debe poseer el certificado de la CA y la clave que utilizó para firmar sus certificados TLS.
Importante
El operador de Kubernetes utiliza secretos de kubernetes.io/tls para almacenar certificados TLS y claves privadas para los recursos de Ops Manager y MongoDB. A partir de la versión 1.17.0 del operador de Kubernetes, este no admite archivos PEM concatenados almacenados como secretos opacos.
Para implementar un clúster fragmentado mediante un objeto, debe:
Disponer o crear 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.
Nota
Para evitar almacenar secretos en implementaciones de Kubernetes de un solo clúster, puede migrar todos los secretos a una herramienta de almacenamiento de secretos. Las implementaciones en varios clústeres de Kubernetes no admiten el almacenamiento de secretos en herramientas como HashiCorp Vault.
Implementar un clúster particionado
Configura kubectl para que sea por defecto en tu namespace.
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.
Ejecute este comando kubectl para crear un nuevo secreto que almacene los certificados de los fragmentos 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> 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 herramienta de almacenamiento de secretos, puedes crear un secreto de Vault.
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 herramienta de almacenamiento de secretos, puedes crear un secreto de Vault.
Crea el secreto para el certificado TLS de tus servidores mongos.
Ejecute este comando kubectl para crear un nuevo secreto que almacene el certificado del clúster fragmentado mongos:
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-mongos-cert \ --cert=<mongos-tls-cert> \ --key=<mongos-tls-key>
Si utilizas HashiCorp Vault como herramienta de almacenamiento de secretos, puedes crear un secreto de Vault.
Crea la clave secreta para el certificado TLS de tu 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 herramienta de almacenamiento de secretos, puedes crear un secreto de Vault.
Crea el ConfigMap para vincular tu CA con tu despliegue.
Ejecute este comando kubectl para vincular su CA a su clúster fragmentado y especifique el archivo de certificado de CA que siempre debe nombrar ca-pem para el recurso MongoDB:
kubectl create configmap custom-ca --from-file=ca-pem=<your-custom-ca-file>
Copie el recurso de clúster fragmentado de muestra.
Modifique la configuración de este archivo YAML para que coincida con la configuración de clúster fragmentado que desee.
Modifique la configuración para que coincida con la configuración de clúster fragmentado que desee.
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 ...
Pegue el ejemplo copiado para crear un nuevo recurso de clúster fragmentado.
Abra su editor de texto preferido y pegue 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 objeto de clúster fragmentado de Kubernetes. Los nombres de recursos deben tener 44 caracteres o menos. Para obtener más información, consulte |
| |
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 debe ejecutar este clúster fragmentado. 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 empresarial de MongoDB disponible 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 creó como credenciales de autenticación de la API de Ops Manager para que el operador de Kubernetes se comunique con Ops Manager. El objeto Ops Manager Kubernetes Secret que contiene las credenciales debe existir en el mismo espacio de nombres que el recurso que desea 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 especifica si este recurso Si este valor es Para cambiar la configuración de sus Reclamaciones de Volumen Persistente, configure las siguientes colecciones para que cumplan con sus requisitos de implementación:
ADVERTENCIA: Otorgue a sus contenedores permiso para escribir en su Volumen Persistente. El Operador de Kubernetes establece Si no utiliza volúmenes persistentes, los gráficos Disk Usage y Disk IOPS no se pueden mostrar ni en la pestaña Processes de la página Deployment ni en la página Metrics al revisar los datos de esta implementación. |
|
Configure los ajustes TLS para su recurso de clúster fragmentado utilizando una autoridad de certificación (CA) personalizada.
Para habilitar TLS en su implementación, configure los siguientes ajustes en su objeto Kubernetes:
Clave | Tipo | Necesidad | Descripción | Ejemplo |
|---|---|---|---|---|
| string | Requerido | Agregue el nombre del ConfigMap que almacena la CA personalizada que utilizó para firmar los certificados TLS de su implementación. |
|
| string | Requerido | Agregue el Por ejemplo, si llama a su despliegue |
|
Agregue cualquier configuración adicional aceptada para una implementación de clúster fragmentado.
También puede agregar cualquiera de las siguientes configuraciones opcionales al archivo de especificación de objetos para una implementación de clúster fragmentado:
Advertencia
Debe configurar spec.clusterDomain si su clúster de Kubernetes tiene un dominio predeterminado distinto del predeterminado cluster.local. Si no utiliza el dominio predeterminado ni configura la opción spec.clusterDomain, es posible que el operador de Kubernetes no funcione como se espera.
For config server
Para enrutadores de particiones
Para los nodos de la partición
Inicie el despliegue de su clúster fragmentado.
Invoca el siguiente comando de Kubernetes para crear tu 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"}
Realice un seguimiento del estado de la implementación de su 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 cifrar el recurso de su base de datos con TLS, puede proteger lo siguiente:
Renovar los certificados TLS para un clúster fragmentado
Renueve sus certificados TLS periódicamente siguiendo el siguiente procedimiento:
Configura kubectl para que sea por defecto en tu namespace.
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 la clave secreta de los certificados TLS de tus fragmentos.
Ejecute este comando kubectl para renovar un secreto existente que almacena los certificados de los fragmentos 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 la clave secreta de los certificados TLS de tu servidor de configuración.
Ejecute este comando kubectl para renovar un secreto existente 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 la clave secreta de los certificados TLS de tu servidor mongos.
Ejecute este comando kubectl para renovar un secreto existente que almacena los certificados del clúster fragmentado mongos:
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 sea por defecto en tu namespace.
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>
Copie el recurso de clúster fragmentado de muestra.
Modifique la configuración de este archivo YAML para que coincida con la configuración de clúster fragmentado que desee.
Este es un archivo YAML que puede modificar para adaptarlo a la configuración deseada. Cambie los ajustes para que coincidan con la configuración de clúster fragmentado que prefiera.
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 ...
Pegue el ejemplo copiado para crear un nuevo recurso de clúster fragmentado.
Abra su editor de texto preferido y pegue 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 objeto de clúster fragmentado de Kubernetes. Los nombres de recursos deben tener 44 caracteres o menos. Para obtener más información, consulte |
| |
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 debe ejecutar este clúster fragmentado. 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 empresarial de MongoDB disponible 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 creó como credenciales de autenticación de la API de Ops Manager para que el operador de Kubernetes se comunique con Ops Manager. El objeto Ops Manager Kubernetes Secret que contiene las credenciales debe existir en el mismo espacio de nombres que el recurso que desea 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 especifica si este recurso Si este valor es Para cambiar la configuración de sus Reclamaciones de Volumen Persistente, configure las siguientes colecciones para que cumplan con sus requisitos de implementación:
ADVERTENCIA: Otorgue a sus contenedores permiso para escribir en su Volumen Persistente. El Operador de Kubernetes establece Si no utiliza volúmenes persistentes, los gráficos Disk Usage y Disk IOPS no se pueden mostrar ni en la pestaña Processes de la página Deployment ni en la página Metrics al revisar los datos de esta implementación. |
|
Agregue cualquier configuración adicional aceptada para una implementación de clúster fragmentado.
También puede agregar cualquiera de las siguientes configuraciones opcionales al archivo de especificación de objetos para una implementación de clúster fragmentado:
Advertencia
Debe configurar spec.clusterDomain si su clúster de Kubernetes tiene un dominio predeterminado distinto del predeterminado cluster.local. Si no utiliza el dominio predeterminado ni configura la opción spec.clusterDomain, es posible que el operador de Kubernetes no funcione como se espera.
For config server
Para enrutadores de particiones
Para los nodos de la partición
Inicie el despliegue de su clúster fragmentado.
Invoca el siguiente comando de Kubernetes para crear tu 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"}
Realice un seguimiento del estado de la implementación de su 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.