En una configuración predeterminada, el agente de MongoDB y los daemons de copias de seguridad acceden a los ficheros 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 Nginx HTTP en su clúster de Kubernetes para alojar los archivos de instalación de MongoDB.
Configurar kubectl para establecer su namespace por defecto.
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á implementando un recurso de Ops Manager en una implementación de MongoDB de un clúster de Kubernetes múltiple:
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>
Crear un(a) ConfigMap para Nginx.
El ConfigMap en este tutorial configura Nginx para:
Ejecuta un servidor HTTP llamado
localhostescuchando en el puerto80en un nodo de tu 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 la extensión de archivo
.yaml.Cree el ConfigMap de Nginx ejecutando el siguiente comando
kubectlsobre 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:
Despliega una réplica de Nginx,
Crea puntos de montaje de volúmenes para almacenar los ficheros de instalación de MongoDB Server y MongoDB Database Tools, y
Define contenedores init que utilizan comandos
curlpara descargar los ficheros de instalación que Nginx sirve a los recursos de base de datos de MongoDB que implementas en tu 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 ... Modifica las líneas resaltadas en el ejemplo para especificar las versiones del MongoDB Server que deseas instalar.
Por ejemplo, para reemplazar la version de MongoDB
8.0.0con una diferente version de base de datos, actualiza 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, agrega comandos
curl al 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
- Para cargar varias versiones, agrega comandos
Guarde este archivo con la extensión de archivo
.yaml.Impleméntalo en Nginx invocando el siguiente comando
kubectlen el archivo de recursos de Nginx que creaste: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 ... Modifica las líneas resaltadas en el ejemplo para especificar las versiones del MongoDB Server que deseas instalar.
Por ejemplo, para reemplazar la version de MongoDB
8.0.0con una diferente version de base de datos, actualiza 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 la extensión de archivo
.yaml.Impleméntalo en Nginx invocando el siguiente comando
ocen el archivo de recursos de Nginx que creaste: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 para 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 la 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 la siguiente configuración 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"enspec.configurationpara ayudar a garantizar que las versiones empresariales no tengan problemas.
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 ...
Pega la sección de ejemplo copiada en tu recurso existente de Ops Manager.
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 tu recurso Ops Manager, ejecuta 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.
Implementa 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:
Haz coincidir el
spec.opsManager.configMapRef.namedel recurso con elmetadata.namede tu ConfigMap.Haga coincidir el
spec.credentialsdel recurso con el nombre del secreto que creó que contiene un par de claves API programáticas de Ops Manager.
Los agentes de MongoDB que se ejecutan en contenedores de recursos de bases de datos de MongoDB que crea con el Operador Kubernetes descargan los ficheros de instalación desde Ops Manager a través de Nginx en lugar de desde Internet.