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.podTemplateOps Manager:
spec.statefulSet.spec.templateServicio 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
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-kubernetes-ops-managerServicio daemon de copias de seguridad:
mongodb-backup-daemonBase de datos de MongoDB:
mongodb-enterprise-databasebase de datos de la aplicación:
mongodb-kubernetes-appdb
Si el campo
nameno 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 eltemplateo elpodTemplate.
Define un punto de montaje de volumen para un recurso MongoDB Kubernetes
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:
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.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 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:
spec.podSpec.podTemplate:agrega un InitContainer privilegiado a un contenedor de recursos de 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.
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:
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.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 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.
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 su 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.
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
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 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.