Docker, clusters, Raspberry pi's y vlans… plan viable?

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.602
Hola!

Les cuento: tengo en la casa 2 rpi's: un rpi4 de 4gb conectado a un ssd que está metido donde está el lector de luz y que en este momento corre cerca de 20 imágenes en Docker: desde home assistant hasta la página de inicio que ocupo en la casa. Éste está conectado al trunk.

Tengo otro rpi3b+ que tiene 1gb de ram, ya no me quedan gpio's disponibles en ese rpi y está conectado a la VLAN_IOT ya que es el punto donde toda la domótica de la casa le habla. Obviamente VLAN_IOT no tiene permiso para iniciar una conexión con trunk, trunk por el otro lado sí puede iniciar la conversación con VLAN_IOT.

Ahora bien: acabo de descubrir que sí es posible asignar más de una VLAN a través de un solo cable a un rpi, así que se me ocurrió la brillante idea de hacer lo siguiente:

Armo un cluster entre la rpi4 y la rpi3.
Correré algunas imágenes específicas de docker en la rpi3, mientras que el grueso lo dejaré corriendo en la (muuuucho más rápida) rpi4. Específicamente estoy pensando en correr nodered y grafana en la rpi3 y todo lo demás en la rpi4. Eso debería ser suficiente ya que esas dos apps son más consumidoras de ram (que me sobra en la rpi3) que de disco (que le falta a la rpi3).

Preguntas:
Es posible o estoy teniendo pensamiento mágico?
Qué necesito investigar? Qué software necesito para correr un cluster?
Puedo correr ciertas imágenes de docker (a través de docker-compose) en una máquina y otros en otra?
Estamos realmente solos en este universo prácticamente infinito?

Saludos.
 

Miguelwill

I am online
Miembro del Equipo
MOD
Se incorporó
23 Febrero 2004
Mensajes
12.403
lo del universo, quizás si, quizás no

lo del cluster, quieres armar un cluster con docker swarm o con algo como kubernetes ?

el de docker swarm está como más ideal para tu caso, ya que es livianisimo porque solo usa el demonio docker y containerd

el cluster permite que se gestione todo desde el modo principal, y en la conf del docker-compose.yml puedes meter los tags para que ciertos "servicios" funcionen en algunos nodos o en cualquiera
incluso puedes indicar cuántas réplicas tendrá cada nodo
en este caso funciona similar a kubernetes, solo que integrado (ingress y puertos directos pueden funcionar en cualquier host e irán directo al contenedor definido )

la carga de la configuración no funciona con docker-compose, sino que es directa
creo que el comando era algo como docker stack create nombre -f docker-compose.yml

puedes hacer pruebas con un par de vm y ahí sacar el detalle de lo que necesitas

para tener una visualización de todo puedes usar portainer que es bastante liviano
 

galansinchance

enajenao
Se incorporó
3 Enero 2006
Mensajes
7.425
Qué interesante, no se me había ocurrido usar docker sobre las pi. Las vlan que hiciste son para que las imágenes se comuniquen entre ellas?

Enviado desde mi JKM-LX3 mediante Tapatalk
 

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.602
@galansinchance : sip, hay hartas imágenes disponibles para arm7 y arm6, aunque no siempre hay una imagen correcta disponible (por ejemplo, el otro día para syslog-ng creo que no encontré una que funcionara bien)

Tengo algunas VLAN's, me sirven para separar tráfico y poder separar las cosas de forma lógica:
Trunk: todo el hardware que administra redes se conecta al trunk: switches, AP's, y una rpi4 de 4GB con un SSD que corre en Docker lo siguiente:
Código:
linuxserver/unifi-controller
homeassistant/raspberrypi4-homeassistant:stable
telegraf:latest
koenkk/zigbee2mqtt
bastilimbach/docker-magicmirror
carldebilly/zigbee2mqttassistant
influxdb:latest
nginx:latest
linuxserver/bazarr
linuxserver/radarr
automatic-downloader_phpfpm
linuxserver/sonarr
linuxserver/nzbget
nginx:latest
php:7.4-fpm
grafana/grafana:6.3.6
portainer/portainer
nodered/node-red:1.0.3-2-12-minimal-arm32v7

Este rpi4 corre además syslog-ng, X + una ventana de firefox, más detalles sobre eso último acá: https://www.capa9.net/temas/creando-un-magic-monitor.1125649/

Luego tenemos las VLANs:
VLAN_FILTERED: usada para nuestros equipos personales, piensa en teléfonos, el iPad, el ebook, el PC mío, el de mi señora, ese tipo de aparatos. La gracia de esta VLAN es que tiene un ad blocker a nivel de red completa. Nadie ve propaganda innecesaria sin tener que instalar software en cada aparato: el DNS filtra todos los requests.
VLAN_IOT: todos los aparatos relacionados con domótica se conectan a esta red, piensa en los Google cosos, la Chromecast, el receiver, pero también aparataje de Shelly y Sonoff. Esta red no tiene acceso a mis redes privadas.
VLAN_GUESTS: si tenemos visita en la casa, se pueden conectar a una wifi sin contraseña. Está fuertemente regulada, básicamente sólo deja pasar tráfico en puertos 80 y 443, y además la tengo para experimentar con DPI.
VLAN_IPTV: la tele funciona via IPTV, así que por eso la tengo separada, nadie tiene que andar metiendo las narices en esta red a menos que seas un decodificador.
VLAN_WORK: El PC de mi pega es el único cliente de esta VLAN. Por seguridad, no quiero que ningún dispositivo pueda ver el tráfico del PC de la pega, de ahí que le mandé una VLAN sólo para este equipo.

Ahora bien: como los equipos en la VLAN_IOT no pueden salir de esta red, tuve que dejar una rpi corriendo Mosquitto (un MQTT Broker) en esa red, pero como ahora sé que puedo correr múltiples VLANs en un solo dispositivo, puedo dejarlo como parte de un cluster para que esta máquina en particular también pueda hablar de vuelta con el nodo maestro en el trunk Y que IOT pueda contactarlo igual.

--------------

@Miguelwill : Gracias! Estuve estudiando un poco el tema y docker swarm es exactamente lo que necesito. Me da la idea de que k8s es más que nada para correr cosas de forma concurrente, pero que docker swarm es para controlar de forma más granular qué corre dónde.

Voi a armarme un pequeño lab en algunas máquinas virtuales para ir probando!

Saludos.
 

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.602
Habemus múltiples IP's de distintas VLANs a través de un mismo dispositivo :)

Screenshot_2021-01-20_00-48-15.png


Ahora a ir por el cluster!
 

Miguelwill

I am online
Miembro del Equipo
MOD
Se incorporó
23 Febrero 2004
Mensajes
12.403
que bueno que lo del cluster te sirviera
yo lo uso con un grupo de 3 a 4 vms, unas con un cluster mariadb-galera y otras con un nginx que uso para el mirror de debian :p
 

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.602
bueno... me funcionó pero no me funcionaron otras weas jajja

Cuento: asignar una VLAN a una interfaz es repapa con Ubuntu Server en una raspberry pi, yo lo hice con la siguiente configuración:

Código:
ubuntu@mqtt:~$ sudo cat /etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by the datasource.  Changes
# to it will not persist across an instance reboot.  To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    version: 2
    ethernets:
        eth0:
            dhcp4: true
            optional: true
    vlans:
        vlan.50:
            dhcp4: true
            id: 50
            link: eth0
            macaddress: 00:00:00:00:00:50

esto me creó dos redes: una en el trunk y la otra en VLAN id 50 (que en mi casa es la dedicada a IoT). Reinicié y todo bkn: mi rpi tenía dos ips y todo el mundo feliz comiendo perdiz.

El único atado es que al parecer Mosquitto no le gustó mucho: no entiendo muy bien cómo todavía, pero el wn desconectaba a cada rato a los clientes, a pesar de que le tenía configurado que sólo esuchara en la red de IoT, a pesar de que bloqueé en el firewall todo tráfico al puerto 1883 con destino esa máquina, lo probé todo pero no hubo caso.

Revertí los cambios y voilá, todo funcionó perfect de una de nuevo.

Así que por el momento lo haré de otra forma jaja Creo que simplemente voi a tener que escribir las reglas para que este dispositivo en IoT pueda ir de vuelta a Trunk de forma directa. Es una paja pq voi a tener que averiguar qué puertos necesita, pero ya no le hallé ni patas ni cabeza a este problema.

Saludos.

PD: pq esto era tanto drama? Pues pq Home Assistant cada vez que se conecta al broker insiste en correr todas las automatizaciones que quiere. Una de ellas es que si el wn cree que es de noche, baja las cortinas. Como el mensaje de que es de día no había llegado, durante todo el día cada X segundos el wn bajaba las cortinas. Mi esposa las subía, a los pocos minutos bajaban... y podrán entender que el WAF (Wife Approval Factor) se fue a la mierda, así que por eso mejor revertí.

Además, mientras estaba weando en esto, pta que la vi pelua jajajajja tb tenía un atado con el receiver y según internet, tenía que hacerle un power cycle... así que aprovechando este arreglo, tb quería arreglar eso. Después del famoso power cycle, EL SONIDO NO FUNCIONABA!!! xemimadre que las vi negras (una cosa es que las cortinas bajan, otra MUY distinta es que no podamos escuchar ni la tele ni música todo el santo día!), lo pude solucionar eso si manteniendo apretado el botón de power en el equipo mismo por varios segundos, eso triggerea un restart y dp de ese restart, el sonido funcionaba nuevamente, esto en un Marantz.
 
Última modificación:
Subir