Puedes modificar los contenedores en los Pods en el que los recursos de base de datos de Ops Manager y MongoDB se ejecutan utilizando el template o podTemplate configuración que se aplica a su implementación:
Base de datos MongoDB:
spec.podSpec.podTemplateOps Manager:
spec.statefulSet.spec.templateServicio Daemon de respaldo:
spec.backup.statefulSet.spec.template
Para revisar qué campos puedes agregar a un template o podTemplate un, consulta la documentación de Kubernetes.
Cuando crea contenedores con un template o podTemplate, el operador de Kubernetes maneja la creación de contenedores de manera diferente según el name que proporcione para cada contenedor en la matriz containers:
Si el
namecampo 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 setemplatepodTemplateaplica o:Ops Manager:
mongodb-enterprise-ops-managerServicio Daemon de respaldo:
mongodb-backup-daemonBase de datos MongoDB:
mongodb-enterprise-databaseBase de datos de la aplicación:
mongodb-enterprise-appdb
Si el
namecampo no coincide con el nombre de la imagen de recurso aplicable, el operador de Kubernetes crea un nuevo contenedor en cada pod al que setemplatepodTemplateaplica o.
Definir un montaje de volumen para un recurso de Kubernetes de MongoDB
Los archivos en disco de los contenedores de los pods no sobreviven a fallos o reinicios del contenedor. Con la configuración, puede spec.podSpec.podTemplate agregar un montaje de volumen para conservar los datos en un recurso de base de datos MongoDB durante la vida útil del pod.
Para crear un punto de montaje de volumen para un recurso de base de datos MongoDB:
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
Utilice para definir un montaje de
spec.podSpec.podTemplatevolumen:podSpec: podTemplate: spec: containers: - name: mongodb-enterprise-database volumeMounts: - mountPath: </new/mount/path> name: survives-restart volumes: - name: survives-restart emptyDir: {} Aplicar la definición de recurso actualizada:
kubectl apply -f <database-resource-conf>.yaml -n <metadata.namespace>
Ajuste las imágenes Docker de recursos de MongoDB Kubernetes con un InitContainer
MongoDB Las imágenes Docker de recursos se ejecutan en RHEL y utilizan la configuración predeterminada del sistema. Para ajustar la configuración subyacente del sistema RHEL en los MongoDB contenedores de recursos, agregue un contenedor de inicio privilegiado InitContainer con una de las siguientes opciones:
spec.podSpec.podTemplate:agrega un InitContainer privilegiado a un contenedor de recursos de base de datos MongoDB.spec.statefulSet.spec.template:agrega un InitContainer privilegiado a un contenedor de recursos de Ops Manager.
Ejemplo
Las imágenes Docker de los recursos de base de datos de MongoDB utilizan el tiempo predeterminado de RHEL (keepalive, 7200). MongoDB recomienda un tiempo keepalive más corto (120) para las implementaciones de bases 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 base de datos MongoDB:
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.podTemplateelkeepalivevalor al valor recomendado120de:spec: podSpec: podTemplate: spec: initContainers: - name: "adjust-tcp-keepalive" image: "busybox:latest" securityContext: privileged: true command: ["sysctl", "-w", "net.ipv4.tcp_keepalive_time=120"] 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 keepalive anterior, invoque el siguiente comando para obtener el valor keepalive actual:
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.
Cree imágenes personalizadas con plantillas Dockerfile
Puedes modificar las plantillas de Dockerfile de MongoDB para crear imágenes de operador de Kubernetes personalizadas que se adapten a tu caso de uso. Para crear 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.
MongoDB Dockerfile Templates
Los Dockerfiles utilizados para crear imágenes de contenedores están disponibles públicamente en el repositorio GitHub de MongoDB Enterprise Kubernetes.
El directorio Dockerfile está organizado por nombre de recurso, versión y distribución:
├── <resource name> │ └── <image version> │ └── <base distribution> │ └── Dockerfile template
Copia la plantilla que deseas utilizar en tu propio Dockerfile y modifícala como desees.
Imágenes de contexto
Para crear una imagen desde cualquier plantilla Dockerfile de MongoDB, debe proporcionar su imagen de contexto.
Cada plantilla de Dockerfile tiene una imagen de contexto asociada, que se puede recuperar del mismo registro de Quay que las imágenes originales. Las imágenes de contexto siempre se etiquetan con el quay.io/mongodb/<resource-name>:<image-version>-context formato.
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> coinciden con su plantilla Dockerfile.
Ejemplo
Si desea crear la imagen de la versión mongodb-enterprise-database 2.0.0 para cualquier distribución, incluya:
--build-arg imagebase=quay.io/mongodb/mongodb-enterprise-database:2.0.0-context
docker build Ejemplo
La distribución de Ubuntu para mongodb-enterprise-operator versión 1.9.1 se basa en ubuntu:1604 por defecto. En este ejemplo, esa plantilla base de 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-enterprise-operator:1.9.1-context \ --tag mongodb-enterprise-operator:1.9.1-ubuntu-1804 -
Nota
Incluya un guion (-) al final de docker build para leer la salida de cat myDockerfile en lugar de proporcionar un directorio local como contexto de compilación.
Tip
Para obtener más información docker build sobre, consulte la documentación de Docker.