En una configuración predeterminada, los daemons de respaldo y del agente MongoDB acceden a los archivos de instalación de MongoDB a través de Internet desde MongoDB, Inc.
Puedes configurar Ops Manager para ejecutar en Modo remoto para que los daemon de copias de seguridad y los recursos gestionados de MongoDB descarguen los ficheros de instalación solo desde Ops Manager, que actúa como proxy para las solicitudes de descarga a un endpoint HTTP en un servidor web local o en un almacén compatible con S3implementada en tu clúster de Kubernetes.
Requisitos previos y consideraciones
Procedimiento
El siguiente procedimiento implementa un servidor HTTP Nginx en su clúster de Kubernetes para alojar los archivos de instalación de MongoDB.
Configurar kubectl para establecer como predeterminado su espacio de nombres.
Si aún no lo ha hecho, ejecute el siguiente comando para ejecutar todos los kubectl comandos en el espacio de nombres que creó.
Nota
Si está implementando un recurso de Ops Manager en una implementación de MongoDB de un clúster de Kubernetes múltiple:
Establezca
contexten el nombre del clúster del operador, como por ejemplo:kubectl config set context "$MDB_CENTRAL_CLUSTER_FULL_NAME".Establezca
--namespaceen el mismo ámbito que utilizó para su implementación de MongoDB en un clúster de Kubernetes múltiple, como porkubectl config --namespace "mongodb"ejemplo:.
kubectl config set-context $(kubectl config current-context) --namespace=<metadata.namespace>
Crear un ConfigMap para Nginx.
El ConfigMap en este tutorial configura Nginx para:
Ejecute un servidor HTTP llamado
localhostque escuche en el puerto80en un nodo de su clúster de Kubernetes yEnruta solicitudes HTTP para recursos específicos a ubicaciones que sirven a los archivos de instalación de MongoDB Server y MongoDB Database Tools.
Pegue el siguiente ejemplo de Nginx ConfigMap en un editor de texto:
1 2 apiVersion: v1 3 kind: ConfigMap 4 metadata: 5 name: nginx-conf 6 data: 7 nginx.conf: | 8 events {} 9 http { 10 server { 11 server_name localhost; 12 listen 80; 13 location /linux/ { 14 alias /mongodb-ops-manager/mongodb-releases/linux/; 15 } 16 location /tools/ { 17 alias /tools/; 18 } 19 } 20 } 21 ... Guarde este archivo con una extensión de archivo
.yaml.Cree el Nginx ConfigMap invocando el siguiente comando
kubectlen el archivo ConfigMap que creó:kubectl apply -f <nginix-configmap>.yaml
Implemente Nginx en su clúster de Kubernetes.
La configuración de recursos de Nginx en este tutorial:
Implementa una réplica de Nginx,
Crea montajes de volumen para almacenar archivos de instalación de MongoDB Server y MongoDB Database Tools, y
Define contenedores de inicio que usan
curlcomandos para descargar los archivos de instalación que Nginx sirve a los recursos de base de datos MongoDB que implementa en su clúster de Kubernetes.
Pegue el siguiente ejemplo de configuración de recursos de Nginx en un editor de texto:
1 2 apiVersion: apps/v1 3 kind: Deployment 4 metadata: 5 name: nginx-deployment 6 spec: 7 replicas: 1 8 selector: 9 matchLabels: 10 app: nginx 11 template: 12 metadata: 13 labels: 14 app: nginx 15 spec: 16 containers: 17 - image: nginx:1.14.2 18 imagePullPolicy: IfNotPresent 19 name: nginx 20 ports: 21 - containerPort: 80 22 volumeMounts: 23 - mountPath: /mongodb-ops-manager/mongodb-releases/linux 24 name: mongodb-versions 25 - mountPath: /tools/db/ 26 name: mongodb-tools 27 - name: nginx-conf 28 mountPath: /etc/nginx/nginx.conf 29 subPath: nginx.conf 30 initContainers: 31 - name: setting-up-rhel-mongodb 32 image: curlimages/curl:latest 33 command: 34 - curl 35 - -L 36 - https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-8.0.0.tgz 37 - -o 38 - /mongodb-ops-manager/mongodb-releases/linux/mongodb-linux-x86_64-rhel80-8.0.0.tgz 39 volumeMounts: 40 - name: mongodb-versions 41 mountPath: /mongodb-ops-manager/mongodb-releases/linux 42 - name: setting-up-rhel-mongodb-tools 43 image: curlimages/curl:latest 44 command: 45 - curl 46 - -L 47 - https://fastdl.mongodb.org/tools/db/mongodb-database-tools-rhel80-x86_64-100.6.0.tgz 48 - -o 49 - /tools/db/mongodb-database-tools-rhel80-x86_64-100.6.0.tgz 50 volumeMounts: 51 - name: mongodb-tools 52 mountPath: /tools/db/ 53 restartPolicy: Always 54 terminationGracePeriodSeconds: 30 55 volumes: 56 - name: mongodb-versions 57 emptyDir: {} 58 - name: mongodb-tools 59 emptyDir: {} 60 - configMap: 61 name: nginx-conf 62 name: nginx-conf 63 ... Modifique las líneas resaltadas en el ejemplo para especificar las versiones de MongoDB Server que desea instalar.
Por ejemplo, para reemplazar la versión
8.0.0de MongoDB con una versión de base de datos diferente, actualice el siguiente bloque:- name: setting-up-rhel-mongodb image: curlimages/curl:latest command: - curl - -L - https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-8.0.0.tgz - -o - /mongodb-ops-manager/mongodb-releases/linux/mongodb-linux-x86_64-rhel80-8.0.0.tgz Actualice este bloque para modificar la versión de MongoDB Database Tools:
- name: setting-up-rhel-mongodb-tools image: curlimages/curl:latest command: - curl - -L - https://fastdl.mongodb.org/tools/db/mongodb-database-tools-rhel80-x86_64-100.6.0.tgz - -o - /tools/db/mongodb-database-tools-rhel80-x86_64-100.6.0.tgz - Para cargar varias versiones, agregue el comando
curl al initContainer apropiado para cada versión que desea que Nginx sirva.
Por ejemplo, para configurar Nginx para servir MongoDB
8.0.0:- name: setting-up-rhel-mongodb image: curlimages/curl:latest command: - curl - -L - https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-8.0.0.tgz - -o - /mongodb-ops-manager/mongodb-releases/linux/mongodb-linux-x86_64-rhel80-8.0.0.tgz
- Para cargar varias versiones, agregue el comando
Guarde este archivo con una extensión de archivo
.yaml.Implemente Nginx invocando el siguiente comando
kubectlen el archivo de recursos Nginx que creó:kubectl apply -f <nginix>.yaml
Pegue el siguiente ejemplo de configuración de recursos de Nginx en un editor de texto:
1 2 apiVersion: apps/v1 3 kind: Deployment 4 metadata: 5 name: nginx-deployment 6 spec: 7 replicas: 1 8 selector: 9 matchLabels: 10 app: nginx 11 template: 12 metadata: 13 labels: 14 app: nginx 15 spec: 16 containers: 17 - image: nginx:1.14.2 18 imagePullPolicy: IfNotPresent 19 name: nginx 20 ports: 21 - containerPort: 80 22 volumeMounts: 23 - mountPath: /mongodb-ops-manager/mongodb-releases/linux 24 name: mongodb-versions 25 - mountPath: /tools/db/ 26 name: mongodb-tools 27 - name: nginx-conf 28 mountPath: /etc/nginx/nginx.conf 29 subPath: nginx.conf 30 initContainers: 31 - name: setting-up-rhel-mongodb 32 image: curlimages/curl:latest 33 command: 34 - curl 35 - -L 36 - https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel<version>-8.0.0.tgz 37 - -o 38 - /mongodb-ops-manager/mongodb-releases/linux/mongodb-linux-x86_64-rhel<version>-8.0.0.tgz 39 volumeMounts: 40 - name: mongodb-versions 41 mountPath: /mongodb-ops-manager/mongodb-releases/linux 42 - name: setting-up-rhel-mongodb-tools 43 image: curlimages/curl:latest 44 command: 45 - curl 46 - -L 47 - https://fastdl.mongodb.org/tools/db/mongodb-database-tools-rhel<version>-x86_64-100.1.0.tgz 48 - -o 49 - /tools/db/mongodb-database-tools-rhel<version>-x86_64-100.1.0.tgz 50 volumeMounts: 51 - name: mongodb-tools 52 mountPath: /tools/db/ 53 restartPolicy: Always 54 terminationGracePeriodSeconds: 30 55 volumes: 56 - name: mongodb-versions 57 emptyDir: {} 58 - name: mongodb-tools 59 emptyDir: {} 60 - configMap: 61 name: nginx-conf 62 name: nginx-conf 63 ... Modifique las líneas resaltadas en el ejemplo para especificar las versiones de MongoDB Server que desea instalar.
Por ejemplo, para reemplazar la versión
8.0.0de MongoDB con una versión de base de datos diferente, actualice el siguiente bloque:- name: setting-up-rhel-mongodb image: curlimages/curl:latest command: - curl - -L - https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel<version>-8.0.0.tgz - -o - /mongodb-ops-manager/mongodb-releases/linux/mongodb-linux-x86_64-rhel<version>-8.0.0.tgz Actualice este bloque para modificar la versión de MongoDB Database Tools:
- name: setting-up-rhel-mongodb-tools image: curlimages/curl:latest command: - curl - -L - https://fastdl.mongodb.org/tools/db/mongodb-database-tools-rhel<version>-x86_64-100.1.0.tgz - -o - /tools/db/mongodb-database-tools-rhel<version>-x86_64-100.1.0.tgz Para cargar varias versiones, agregue los comandos
curlal initContainer apropiado para cada versión que desee que Nginx sirva.Por ejemplo, para configurar Nginx para servir MongoDB
8.0.0:- name: setting-up-rhel-mongodb image: curlimages/curl:latest command: - curl - -L - https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-8.0.0.tgz - -o - /mongodb-ops-manager/mongodb-releases/linux/mongodb-linux-x86_64-rhel80-8.0.0.tgz Guarde este archivo con una extensión de archivo
.yaml.Implemente Nginx invocando el siguiente comando
ocen el archivo de recursos Nginx que creó:oc apply -f <nginix>.yaml
Cree un servicio Kubernetes para que Nginx sea accesible desde otros pods en su clúster.
El servicio en este tutorial expone Nginx al tráfico de otros nodos de tu clúster de Kubernetes a través del puerto 80. Esto permite que los pods de recursos de la base de datos de MongoDB que implementas usando el operador de Kubernetes descarguen los ficheros de instalación desde Nginx.
Ejecute el siguiente comando para crear un servicio en su implementación de Nginx:
Pegue el siguiente servicio de ejemplo en un editor de texto:
1 2 apiVersion: v1 3 kind: Service 4 metadata: 5 name: nginx-svc 6 labels: 7 app: nginx 8 spec: 9 ports: 10 - port: 80 11 protocol: TCP 12 selector: 13 app: nginx 14 ... Guarde este archivo con una extensión de archivo
.yaml.Cree el servicio invocando el siguiente comando
kubectlen el archivo de servicio que creó:kubectl apply -f <nginix-service>.yaml
Copie y actualice los campos resaltados de este recurso de Ops Manager.
La sección resaltada utiliza las siguientes configuraciones de Ops Manager:
automation.versions.source: remoteen para habilitar el modospec.configurationremoto.automation.versions.download.baseUrlen para proporcionar la URL base de los recursos HTTP que sirven a los archivos de instalación despec.configurationMongoDB.Actualiza esta línea para reemplazar
<namespace>con el namespace en el que implementas recursos con el Operador Kubernetes.automation.versions.download.baseUrl.allowOnlyAvailableBuilds: "false"en para ayudar a garantizar que las compilaciones empresariales no tenganspec.configurationproblemas.
1 2 apiVersion: mongodb.com/v1 3 kind: MongoDBOpsManager 4 metadata: 5 name: ops-manager-localmode 6 spec: 7 replicas: 1 8 version: "8.0.0" 9 adminCredentials: ops-manager-admin-secret 10 configuration: 11 # this enables remote mode in Ops Manager 12 automation.versions.source: remote 13 automation.versions.download.baseUrl: "http://nginx-svc.<namespace>.svc.cluster.local:8080" 14 15 backup: 16 enabled: false 17 18 applicationDatabase: 19 members: 3 20 ...
Pegue la sección de ejemplo copiada en su recurso de Ops Manager existente.
Abra su editor de texto preferido y pegue la especificación del objeto en la ubicación adecuada en su archivo de recursos.
Realice un seguimiento del estado de su instancia de Ops Manager.
Para comprobar el estado de su recurso Ops Manager, invoque el siguiente comando:
kubectl get om -o yaml -w
Consulte Solucionar problemas del operador de Kubernetes para obtener información sobre los estados de implementación de recursos.
Una vez que el recurso Ops Manager completa la fase Pending, el comando devuelve un resultado similar al siguiente:
1 status: 2 applicationDatabase: 3 lastTransition: "2020-05-15T16:20:22Z" 4 members: 3 5 phase: Running 6 type: ReplicaSet 7 version: "8.0.0-ubi8" 8 backup: 9 phase: "" 10 opsManager: 11 lastTransition: "2020-05-15T16:20:26Z" 12 phase: Running 13 replicas: 1 14 url: http://ops-manager-localmode-svc.mongodb.svc.cluster.local:8080 15 version: "8.0.0"
Copia el valor del campo status.opsManager.url, que indica la conexión del recurso URL. Utilice este valor cuando cree un ConfigMap más adelante en el procedimiento.
Implementar un recurso de base de datos MongoDB.
Si aún no lo ha hecho, complete los siguientes requisitos previos:
Implemente un recurso de base de datos MongoDB en el mismo espacio de nombres donde implementó Ops Manager. Asegúrese de lo siguiente:
Haga coincidir el
spec.opsManager.configMapRef.namedel recurso con elmetadata.namede su ConfigMap.Haga coincidir el
spec.credentialsdel recurso con el nombre del secreto que creó y que contiene un par de claves API programáticas de Ops Manager.
Los agentes de MongoDB que se ejecutan en contenedores de recursos de base de datos de MongoDB que usted crea con el operador de Kubernetes descargan los archivos de instalación desde Ops Manager a través de Nginx en lugar de hacerlo desde Internet.