khuedoan-homelab/docs/src/deployment/prerequisites.md

79 lines
2.6 KiB
Markdown
Raw Normal View History

2021-07-17 00:02:28 +07:00
# Prerequisites
2021-08-04 00:10:04 +07:00
## Hardware requirements
### Initial controller
> The initial controller is the machine used to bootstrap the cluster, we only need it once, you can use your laptop or desktop
- Any machine that can run Docker with the `host` networking driver ([which means only Docker on Linux hosts](https://docs.docker.com/network/host/), you can use a Linux virtual machine with bridged networking if you're on macOS or Windows)
### Servers
Any modern `x86_64` computer(s) should work, you can use old PCs, laptops or servers.
> This is the requirements for _each_ node
| Component | Minimum | Recommended |
| --------- | ------- | ----------- |
| CPU | 2 cores | 4 cores |
| RAM | 8 GB | 16 GB |
| Hard drive | 128 GB | 512 GB (depending on your storage usage, the base installation will not use more than 128GB) |
| Node count | 1 | 3 or more for high availability |
Additional capabilities:
- Ability to boot from the network (PXE boot)
- Wake-on-LAN capability, used to wake the machines up automatically without physically touching the power button
### Network setup
- All servers must be connected to the same **wired** network with the initial controller (Wifi is untested, please let me know if it works)
- You have the access to change DNS config (on your router or at your domain registrar)
## Domain
Buying a domain is highly recommended, but if you don't have one, you can also update your router config and point [`*.home.arpa`](https://datatracker.ietf.org/doc/html/rfc8375) to the load balancer (more on that later).
2021-10-20 17:52:39 +07:00
## BIOS setup
> You need to do it once per machine if the default config is not sufficent,
> usually for consumer hardware this can not be automated
> (it requires something like [IPMI](https://en.wikipedia.org/wiki/Intelligent_Platform_Management_Interface) to automate).
Below is my BIOS setup, your motherboard may have a different name for the options, so you'll need to adapt it with your hardware.
```json
{
"Devices": {
"Network Setup": {
"PXE IPv4": true,
"PXE IPv6": false
}
},
"Advanced": {
"CPU Setup": {
"VT-d": true
}
},
"Power": {
"Automatic Power On": {
"WoL": "Automatic"
}
},
"Security": {
"Secure Boot": false
},
"Startup": {
"CSM": false
}
}
```
## Gather information
2021-10-20 17:52:39 +07:00
- [ ] MAC address for each machine
- [ ] OS disk name (for example `/dev/sda`)
- [ ] Network interface name (for example `eth0`)
- [ ] Choose a static IP address for each machine (just the desired address, we don't set anything up yet)