Puede modificar los contenedores en los Pods en los que se ejecutan los recursos de la base de datos de Ops Manager y MongoDB utilizando la configuración template o podTemplate que corresponda a su implementación:
Base de datos de MongoDB:
spec.podSpec.podTemplateOps Manager:
spec.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
namecampo coincide con el nombre de la imagen de recurso aplicable, el operador de Kubernetes actualiza el contenedor de la base de datos Ops Manager o MongoDB en el Pod al que setemplatepodTemplateaplica o:Ops Manager:
mongodb-kubernetes-ops-managerServicio de demonio de respaldo:
mongodb-backup-daemonBase de datos de MongoDB:
mongodb-enterprise-databasebase de datos de la aplicación:
mongodb-kubernetes-appdb
If the
namefield does not match the name of the applicable resource image, the Kubernetes Operator creates a new container in each Pod to which thetemplateorpodTemplateapplies.
Define un punto de montaje de volumen para un recurso MongoDB Kubernetes
Los archivos en disco de los contenedores en los Pods no se conservan tras fallos o reinicios del contenedor. Mediante 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:
Actualiza la definición del recurso de la base de datos MongoDB para incluir un montaje de volumen para los contenedores en los pods de la base de datos creados por el operador de Kubernetes.
Ejemplo
Utiliza
spec.podSpec.podTemplatepara 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: {} Aplicar la definición de recurso actualizada:
kubectl apply -f <database-resource-conf>.yaml -n <metadata.namespace>
Ajuste las imágenes Docker de recursos Kubernetes de MongoDB con un InitContainer
MongoDB Los recursos de imágenes de Docker se ejecutan en RHEL y utilizan la configuración por defecto del sistema de RHEL. Para ajustar la configuración subyacente del sistema RHEL en los contenedores de recursos MongoDB, añade un InitContainer privilegiado init container utilizando una de las siguientes configuraciones:
spec.podSpec.podTemplateañadir un InitContainer privilegiado a un contenedor de recursos de la base de datos MongoDB.spec.statefulSet.spec.template; agregue un InitContainer privilegiado a un contenedor de recursos de Ops Manager.
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.
Puedes ajustar el tiempo keepalive en las imágenes de Docker de recursos de base de datos si experimentas tiempos de espera de red o errores de socket en la comunicación entre los clientes y los recursos de base de datos.
Tip
¿El tiempo de mantenimiento activo 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:
Actualiza la definición del recurso de base de datos MongoDB para añadir un InitContainer privilegiado a los pods de base de datos que crea el Operador de Kubernetes.
Ejemplo
Cambie
spec.podSpec.podTemplateel valor dekeepaliveal valor recomendado de120: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 agrega un InitContainer privilegiado a cada Pod que el Operador de Kubernetes crea utilizando la MongoDB definición de recurso.
Abre una sesión de shell en un contenedor en ejecución en tu recurso de base de datos Pod y verifica tus 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.
Cree imágenes a medida con plantillas Dockerfile
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 tu plantilla.
MongoDB Dockerfile Templates
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.
Imágenes de contexto
Para compilar una imagen a partir de cualquier template de Dockerfile de MongoDB, debe proporcionar su imagen de contexto.
Each Dockerfile template has one associated context image, retrievable from the same Quay registry as the original images. Context image are always tagged in the format 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
docker build Ejemplo
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 compila la imagen personalizada y le da 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.