miguelammatos / Kollaps

Kollaps: a decentralized container based network emulator
Apache License 2.0
30 stars 5 forks source link

Unable to run example from README on docker swarm - Dashboard website is not launched #55

Closed Nandinski closed 1 month ago

Nandinski commented 1 month ago

I'm unable to run the example from README on docker swarm. After following the instructions, the docker stack service is brought up, and all the services are running. However, the dashboard container does not start the website from which we can start the experiment. The dashboard image built from calling ./KollapsAppBuilder creates an image that only runs a while true loop. https://github.com/miguelammatos/Kollaps/blob/bc744a6c7fe746d415128af09282eb83c9683454/examples/KollapsAppBuilder#L68

https://github.com/miguelammatos/Kollaps/blob/bc744a6c7fe746d415128af09282eb83c9683454/examples/utils/dashboard/Dockerfile#L1-L24

https://github.com/miguelammatos/Kollaps/blob/bc744a6c7fe746d415128af09282eb83c9683454/examples/utils/dashboard/dashboard.sh#L1-L8

Given this current code, the dashboard does nothing, so the website is not available, and the experiments cannot be started.

There is another dashboard in dockerfiles/Dashboard, but this one seems to target the baremetal deployment with Kubernetes.

https://github.com/miguelammatos/Kollaps/blob/bc744a6c7fe746d415128af09282eb83c9683454/dockerfiles/Dashboard#L19-L23

Is there any quick fix for this?

sebastiaoamaro commented 1 month ago

Hi @Nandinski, The dashboard code is correct, the functional part of the website is later injected into the container. Can you show the output of docker logs god_***(id of god container)?

Nandinski commented 1 month ago

Oh. I'm curious as to why it was decided to inject the dashboard code later. That's interesting. After confirmation that the code was correct, I double-checked everything and found the issue. I'm running docker swarm with two hosts, and the hosts had the topology file in different locations, causing the mount on one of the hosts to fail when both hosts try to mount using the same path. After using the same path on both hosts, it seems to work! Maybe it's worth it to add a note about this in the website tutorial: https://kollaps.dev/docker.html

One more thing. In the 'active flows' tab of the dashboard, there's an Error column; what does it represent? In the iperf3 test, these values oscillate and sometimes reach 100%. I could not find details about the dashboard values. Maybe I missed it.

I also see some of these messages in the logs of the god container. Are these safe to ignore?

RTNETLINK answers: Invalid argument
We have an error talking to the kernel
RUST EC - server : In init: origin is server dest is server latency is 10 links are [13, 8] bw is 100000 drop is 0
RUST EC - server : In init: origin is server dest is client1 latency is 25 links are [11, 7, 1] bw is 50000 drop is 0
RTNETLINK answers: Invalid argument
We have an error talking to the kernel

Thank you for the help!

sebastiaoamaro commented 1 month ago

So that it runs on the host namespace and shares the filesystem with the other emulation cores to allow for metadata to be shared.

You are completely correct I will add it to the tutorial, thanks for pointing it out!

The link state tab (I think you are referring to this) is a prototype to see if the accuracy of the emulation is correct. It should not be displayed yet since it is not finished, the value is the percentage deviation of the total bandwidth available on the link from the actual bandwidth on the link (It does not account for sharing, thus it is not really useful yet).

Yes those errors can be ignored.

Nandinski commented 1 month ago

Got it. Thank you very much for the answers!