Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Modificar los contenedores de recursos de Ops Manager o MongoDB Kubernetes

Puedes modificar los contenedores en el Pods en los que se ejecutan los recursos de Ops Manager y la base de datos de MongoDB usando el template o podTemplate configuración que se aplica a su implementación:

  • Base de datos de MongoDB: spec.podSpec.podTemplate

  • Ops Manager: spec.statefulSet.spec.template

  • Servicio de daemon de copias de seguridad: spec.backup.statefulSet.spec.template

Para revisar qué campos puedes agregar a un template o a un podTemplate, consulta la Documentación de Kubernetes.

Cuando creas contenedores con un template o podTemplate, el Operador de Kubernetes maneja la creación de contenedores de manera diferente en función del name que proporcionas para cada contenedor en el arreglo containers:

  • Si el name campo coincide con el nombre de la imagen de recurso aplicable, el operador de Kubernetes actualiza el contenedor de base de datos de Ops Manager o MongoDB en el pod al que se template podTemplate aplica o:

    • Ops Manager: mongodb-kubernetes-ops-manager

    • Servicio daemon de copias de seguridad: mongodb-backup-daemon

    • Base de datos de MongoDB: mongodb-enterprise-database

    • base de datos de la aplicación: mongodb-kubernetes-appdb

  • Si el campo name no coincide con el nombre de la imagen de recurso correspondiente, el Operador de Kubernetes crea un nuevo contenedor en cada Pod al que se aplica el template o el podTemplate.

Los archivos en disco en los contenedores de Pods no sobreviven a los fallos o reinicios del contenedor. Usando la configuración spec.podSpec.podTemplate, puedes añadir un montaje de volumen para persistir datos en un recurso de base de datos MongoDB durante toda la vida del Pod.

Para crear un punto de montaje de volumen para un recurso de base de datos MongoDB:

  1. Actualice la definición de recursos de la base de datos MongoDB para incluir un montaje de volumen para contenedores en los pods de base de datos que crea el operador de Kubernetes.

    Ejemplo

    Utiliza spec.podSpec.podTemplate para definir un montaje de volumen:

    podSpec:
    podTemplate:
    spec:
    containers:
    - name: mongodb-enterprise-database
    volumeMounts:
    - mountPath: </new/mount/path>
    name: survives-restart
    volumes:
    - name: survives-restart
    emptyDir: {}
  2. Aplicar la definición de recurso actualizada:

    kubectl apply -f <database-resource-conf>.yaml -n <metadata.namespace>

MongoDB los recursos de imágenes Docker se ejecutan en RHEL y utilizan la configuración del sistema por defecto de RHEL. Para ajustar la configuración subyacente del sistema RHEL en los contenedores de recursos MongoDB, añade un InitContainer privilegiado contenedor init utilizando una de las siguientes configuraciones:

Ejemplo

Las imágenes de Docker del recurso de la base de datos MongoDB utilizan el tiempo por defecto de RHEL keepalive de 7200. MongoDB recomienda un keepalive tiempo más corto de 120 para implementaciones de la base de datos.

Puede ajustar el tiempo keepalive en las imágenes Docker de los recursos de la base de datos si experimenta tiempos de espera de red o errores de socket en la comunicación entre los clientes y los recursos de la base de datos.

Tip

¿El tiempo de conexión de TCP afecta las implementaciones de MongoDB? en el Manual de MongoDB

Para ajustar las imágenes de Docker para un contenedor de recursos de bases de datos MongoDB:

  1. Actualice la definición de recursos de la base de datos MongoDB para agregar un InitContainer privilegiado a los pods de base de datos que crea el operador de Kubernetes.

    Ejemplo

    Cambie spec.podSpec.podTemplate el valor de keepalive al valor recomendado de 120:

    spec:
    podSpec:
    podTemplate:
    spec:
    initContainers:
    - name: "adjust-tcp-keepalive"
    image: "busybox:latest"
    securityContext:
    privileged: true
    command: ["sysctl", "-w", "net.ipv4.tcp_keepalive_time=120"]
  2. Aplicar la definición de recurso actualizada:

    kubectl apply -f <database-resource-conf>.yaml -n <metadata.namespace>

Kubernetes añade un InitContainer privilegiado a cada Pod que el operador de Kubernetes crea usando la definición de recurso MongoDB.

Abra una sesión de shell en un contenedor en ejecución en su recurso de base de datos Pod y verifique los cambios.

Ejemplo

Para seguir el ejemplo anterior de keepalive, ejecuta el siguiente comando para obtener el valor actual de keepalive:

> kubectl exec -n <metadata.namespace> -it <pod-name> -- cat /proc/sys/net/ipv4/tcp_keepalive_time
> 120

Tip

Configuración del sistema operativo en el manual de MongoDB.

Puede modificar las plantillas de Dockerfile de MongoDB para crear imágenes personalizadas de operadores de Kubernetes que se adapten a su caso de uso. Para compilar una imagen personalizada, necesitas:

  • Tu Dockerfile personalizado, modificado a partir de una plantilla de MongoDB.

  • La imagen de contexto proporcionada por MongoDB para su plantilla.

Los Dockerfile utilizados para construir imágenes de contenedores están disponibles públicamente desde el repositorio Github de MongoDB Kubernetes.

El directorio Dockerfile está organizado por nombre de recurso, versión y distribución:

├── <resource name>
│ └── <image version>
│ └── <base distribution>
│ └── Dockerfile template

Copie la plantilla que desea usar en su propio Dockerfile y modifíquela según lo desee.

Para compilar una imagen a partir de cualquier template de Dockerfile de MongoDB, debe proporcionar su imagen de contexto.

Cada plantilla de Dockerfile tiene una imagen de contexto asociada, recuperable del mismo registro Quay que las imágenes originales. La imagen de contexto siempre se etiqueta en el formato quay.io/mongodb/<resource-name>:<image-version>-context.

Para proporcionar una imagen de contexto a docker build, incluya la opción --build-arg con la variable imagebase establecida en una etiqueta Quay.io, donde <resource-name> y <image-version> coincidan con su plantilla de Dockerfile.

Ejemplo

Si deseas compilar la imagen mongodb-enterprise-database versión 2.0.0 para cualquier distribución, incluye:

--build-arg imagebase=quay.io/mongodb/mongodb-kubernetes-database:2.0.0-context

La distribución de Ubuntu para mongodb-kubernetes-operator versión 1.9.1 se basa en ubuntu:1604 por defecto. En este ejemplo, esa plantilla base del Dockerfile se modifica para usar ubuntu:1804 y se guarda como myDockerfile.

El siguiente comando crea la imagen personalizada y le asigna la etiqueta 1.9.1-ubuntu-1804:

cat myDockerfile | docker build --build-arg imagebase=quay.io/mongodb/mongodb-kubernetes-operator:1.9.1-context \
--tag mongodb-kubernetes-operator:1.9.1-ubuntu-1804 -

Nota

Incluya un guión (-) al final de docker build para leer la salida de cat myDockerfile en vez de proporcionar un directorio local como contexto de compilación.

Tip

Para obtener más información sobre docker build, consulta la documentación de Docker.

Volver

Solucionar problemas

En esta página