[doc] add basic microvm documentation
This commit is contained in:
@@ -14,3 +14,4 @@
|
|||||||
- [How-to]()
|
- [How-to]()
|
||||||
- [Updates](./anleitung/updates.md)
|
- [Updates](./anleitung/updates.md)
|
||||||
- [Rollbacks](./anleitung/rollback.md)
|
- [Rollbacks](./anleitung/rollback.md)
|
||||||
|
- [MicroVM](./anleitung/microvm.md)
|
||||||
|
|||||||
39
doc/src/anleitung/microvm.md
Normal file
39
doc/src/anleitung/microvm.md
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
### Declaring a MicroVM
|
||||||
|
|
||||||
|
The hosts nixosSystems modules should be declared using the ```makeMicroVM``` helper function.
|
||||||
|
Use durruti as orientation:
|
||||||
|
``` nix
|
||||||
|
modules = makeMicroVM "durruti" "10.0.0.5" [
|
||||||
|
./durruti/configuration.nix
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
"durruti" is the hostname.
|
||||||
|
"10.0.0.5" is the IP assigned to its tap interface.
|
||||||
|
|
||||||
|
### Testing MicroVMs locally
|
||||||
|
MicroVMs can be built and run easily on your local host.
|
||||||
|
For durruti this is done by:
|
||||||
|
``` bash
|
||||||
|
sudo nix run .\#nixosConfigurations.durruti.config.microvm.declaredRunner
|
||||||
|
```
|
||||||
|
|
||||||
|
It seems to be necessary to run this as root so that the according tap interface can be created.
|
||||||
|
To be able to ping the VM or give Internet Access to the VM your host needs to be setup as described below.
|
||||||
|
|
||||||
|
### Host Setup
|
||||||
|
To provide network access to the VMs a bridge interface needs to be created on your host.
|
||||||
|
For that:
|
||||||
|
- Add the infrastructure flake as input to your hosts flake
|
||||||
|
- Add ```inputs.malobeo.nixosModules.malobeo``` to your hosts imports
|
||||||
|
- enable the host bridge: ```services.malobeo.microvm.enableHostBridge = true;```
|
||||||
|
|
||||||
|
If you want to provide Internet access to the VM it is necessary to create a nat.
|
||||||
|
This could be done like this:
|
||||||
|
``` nix
|
||||||
|
networking.nat = {
|
||||||
|
enable = true;
|
||||||
|
internalInterfaces = [ "microvm" ];
|
||||||
|
externalInterface = "eth0"; #change to your interface name
|
||||||
|
};
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user