
¿Es posible que un clúster CoreOS comparta espacio en disco, por ejemplo, utilizando NFS? Si es así, ¿cómo se haría esto? (por ejemplo, en el escenario en el que un nodo tiene mucho espacio en disco). Esto sería útil para evitar que cada nodo tenga que descargar y almacenar su propia biblioteca de imágenes de Docker, por ejemplo, o para compartir el espacio del directorio de inicio entre nodos.
Debido a que no podemos instalar software adicional directamente en CoreOS, imagino que habría que escribir un contenedor solo para instalar NFS (por ejemplo, nfs-kernel-server
en un contenedor basado en Ubuntu).
No tengo idea de si esto es posible, pero espero que haya alguna forma establecida de compartir espacio en disco en un clúster CoreOS (después de todo, parece una expectativa común para un clúster, y tal vez mi propuesta a continuación sea más complicada de lo necesario). . Sólo para proporcionar algo de información para comentarios, esto es lo que estoy pensando hasta ahora:
Proporcionar el lado del host de NFS parece una tarea acoplable razonable, por ejemplo, me imagino un Dockerfile como:
FROM ubuntu:14.04
ENV CLIENT_IP 11.111.111.111
RUN apt-get update && apt-get install -y nfs-kernel-server supervisor
RUN mkdir /var/nfs && chown nobody:nogroup /var/nfs
RUN echo "/home ${CLIENT_IP}(rw,sync,no_root_squash,no_subtree_check)" >> /etc/exports
RUN echo "/var/nfs ${CLIENT_IP}(rw,sync,no_subtree_check)" >> /etc/exports
RUN exportfs -a
CMD service nfs-kernel-server start
Donde CLIENT_IP
se completó apropiadamente (y tal vez necesitemos reemplazar el CMD con una llamada a supervisord
o similar para que esto sea persistente, pero ya entiendes la idea)
Entonces, ¿cómo vincularíamos los volúmenes de manera adecuada al ejecutar este contenedor? ¿Qué volumen vincularíamos desde el host CoreOS? ¿O necesito agregar algo como --net="host"
para que el cliente esté disponible?
docker run -v /home:/home nfs-server
No me queda del todo claro cómo podríamos implementar el lado del cliente, ya que una vez más necesitaríamos un contenedor para proporcionar nfs-common
y de alguna manera descubrir cómo otros contenedores podrían compartir ese recurso (¿quizás algún uso apropiado de --volumes-from
?). Me encantaría ver un resumen de cómo hacer esto, o por qué no es posible y si existen mejores alternativas para abordar este caso de uso. ¡Gracias!
Respuesta1
Debería poder montar un volumen NFS en el host CoreOS. Si no hay herramientas de usuario para exportar un sistema de archivos desde CoreOS, puede usar el contenedor de la caja de herramientas de Fedora proporcionado por el toolbox
comando.
Respuesta2
Debe iniciar rpc-mountd
los nfsd
servicios systemd y definir sus exportaciones nfs en /etc/exports
el archivo.
Ejemplo de cloud-config.yml
:
coreos:
units:
- name: rpc-mountd.service
command: start
enable: true
- name: nfsd.service
command: start
enable: truestrong text
write_files:
- path: /etc/exports
permissions: '0644'
# Change /network-raid with the dir you want to export over nfs
content: /network-raid/ 192.168.1.0/24(rw,async,no_subtree_check,no_root_squash,fsid=0)
Tengo esta configuración funcionando con CoreOSv723.3.0.
Puede encontrar más información sobre cómo compartir disco a través de NFS en CentOS en los siguientes enlaces: