feat: Add dynamic NAS and VPS options
This commit is contained in:
parent
32e58c32cf
commit
bdbf8ea389
14
Makefile
14
Makefile
@ -35,17 +35,23 @@ install_libvirt:
|
|||||||
@echo "Creating components using libvirt..."
|
@echo "Creating components using libvirt..."
|
||||||
@vagrant up --provider=libvirt
|
@vagrant up --provider=libvirt
|
||||||
|
|
||||||
|
|
||||||
wg:
|
wg:
|
||||||
@cd ansible && ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook -i ../inventory/lab.yml -i ../inventory/outsider.yml init.yml --extra-vars "enable_setup=false enable_wireguard=true enable_k3s=false"
|
@cd ansible && ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook -i ../inventory/lab.yml -i ../inventory/outsider.yml init.yml --extra-vars "enable_setup=false enable_wireguard=true enable_k3s=false"
|
||||||
|
|
||||||
ansible:
|
ansible:
|
||||||
@cd ansible && ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook -i ../inventory/lab.yml -i ../inventory/outsider.yml init.yml --extra-vars "enable_setup=true enable_wireguard=true enable_k3s=true"
|
INV_LIST="-i ../inventory/lab.yml"; \
|
||||||
|
if [ x"${VPS}" != "x" ]; then \
|
||||||
|
INV_LIST="$${INV_LIST} -i ../inventory/outside.yml"; \
|
||||||
|
fi; \
|
||||||
|
if [ x"${NAS}" != "x" ]; then \
|
||||||
|
INV_LIST="$${INV_LIST} -i ../inventory/nas.yml"; \
|
||||||
|
fi; \
|
||||||
|
cd ansible && ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook $${INV_LIST} init.yml --extra-vars 'enable_setup=true enable_wireguard=true enable_k3s=true'
|
||||||
@make get_k3s_credentials
|
@make get_k3s_credentials
|
||||||
|
|
||||||
k3s_reset:
|
k3s_reset:
|
||||||
@echo "Resetting k3s configuration..."
|
@echo "Resetting k3s configuration..."
|
||||||
@cd ansible && ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook -i ../inventory/lab.yml -i ../inventory/outsider.yml k3s-ansible/reset.yml
|
@cd ansible && ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook -i ../inventory/nas.yml -i ../inventory/lab.yml -i ../inventory/outsider.yml k3s-ansible/reset.yml
|
||||||
@make ansible
|
@make ansible
|
||||||
@make get_k3s_credentials
|
@make get_k3s_credentials
|
||||||
|
|
||||||
@ -61,6 +67,6 @@ get_k3s_credentials:
|
|||||||
@echo "Retrieving k3s credentials locally..."
|
@echo "Retrieving k3s credentials locally..."
|
||||||
@vagrant ssh -c "sudo cat /home/creator/.kube/config" hb-wide-1 > ~/.kube/config-halia
|
@vagrant ssh -c "sudo cat /home/creator/.kube/config" hb-wide-1 > ~/.kube/config-halia
|
||||||
@sed -i 's/127.0.*:/192.168.56.101:/g' ~/.kube/config-halia
|
@sed -i 's/127.0.*:/192.168.56.101:/g' ~/.kube/config-halia
|
||||||
@kube-merge
|
@curl https://git.halis.io/therbron/dotfiles/raw/branch/master/.bin/kube-merge | bash
|
||||||
@kubectl get nodes --context halia
|
@kubectl get nodes --context halia
|
||||||
|
|
||||||
|
29
README.md
29
README.md
@ -6,11 +6,40 @@
|
|||||||
- vagrant-scp
|
- vagrant-scp
|
||||||
|
|
||||||
## Setup
|
## Setup
|
||||||
|
Clone the whole repository, including submodules
|
||||||
|
```
|
||||||
|
git clone --recurse-submodules -j8 https://git.halis.io/athens-school/Homelab
|
||||||
|
```
|
||||||
|
|
||||||
|
Update submodules after cloning the repository
|
||||||
|
```
|
||||||
|
git submodule update --init --recursive
|
||||||
|
```
|
||||||
|
|
||||||
|
### Enable ingress for internet access
|
||||||
For ingress node connected to the internet, I recommend using a VPS of either choice, acting as the public input to the cluster.<br />
|
For ingress node connected to the internet, I recommend using a VPS of either choice, acting as the public input to the cluster.<br />
|
||||||
To do so, complete the IP in the `inventory/outsider.yml` file.
|
To do so, complete the IP in the `inventory/outsider.yml` file.
|
||||||
|
|
||||||
This VPS needs to be pre-configured with [this script](https://git.halis.io/athens-school/ISO-repository/raw/branch/master/quick-installer.sh).
|
This VPS needs to be pre-configured with [this script](https://git.halis.io/athens-school/ISO-repository/raw/branch/master/quick-installer.sh).
|
||||||
|
|
||||||
|
## Run
|
||||||
|
### Basic
|
||||||
|
To run the project as is, creating k3s nodes only
|
||||||
|
```
|
||||||
|
make up
|
||||||
|
```
|
||||||
|
|
||||||
|
### Enable NAS
|
||||||
|
If you wish to also create a NAS VM, set the `NAS` environment variable
|
||||||
|
```
|
||||||
|
NAS=true make up
|
||||||
|
```
|
||||||
|
|
||||||
|
### Enable ingress
|
||||||
|
If you wish to also enable a Kubernetes Ingress using an external VPS, set the `VPS` environment variable after setting your VPS up in the `Setup` section
|
||||||
|
```
|
||||||
|
VPS=true make up
|
||||||
|
```
|
||||||
|
|
||||||
## TODO
|
## TODO
|
||||||
- Detect default network interface
|
- Detect default network interface
|
||||||
|
9
Vagrantfile
vendored
9
Vagrantfile
vendored
@ -1,3 +1,5 @@
|
|||||||
|
enable_nas = ENV["NAS"] || false
|
||||||
|
|
||||||
Vagrant.configure("2") do |config|
|
Vagrant.configure("2") do |config|
|
||||||
config.vm.box = "debian/bullseye64"
|
config.vm.box = "debian/bullseye64"
|
||||||
config.vm.synced_folder '.', '/vagrant', disabled: true # Allows WSL call to work within WSL filesystem
|
config.vm.synced_folder '.', '/vagrant', disabled: true # Allows WSL call to work within WSL filesystem
|
||||||
@ -16,13 +18,14 @@ Vagrant.configure("2") do |config|
|
|||||||
boxes = [
|
boxes = [
|
||||||
{ :name => "hb-slim-1", :ip => "192.168.56.11"},
|
{ :name => "hb-slim-1", :ip => "192.168.56.11"},
|
||||||
{ :name => "hb-slim-2", :ip => "192.168.56.12"},
|
{ :name => "hb-slim-2", :ip => "192.168.56.12"},
|
||||||
{ :name => "hb-slim-3", :ip => "192.168.56.13"},
|
|
||||||
{ :name => "hb-wide-1", :ip => "192.168.56.101", :cpus => 2, :memory => 4096},
|
{ :name => "hb-wide-1", :ip => "192.168.56.101", :cpus => 2, :memory => 4096},
|
||||||
{ :name => "hb-wide-2", :ip => "192.168.56.102", :cpus => 2, :memory => 4096},
|
{ :name => "hb-wide-2", :ip => "192.168.56.102", :cpus => 2, :memory => 4096},
|
||||||
{ :name => "hb-wide-3", :ip => "192.168.56.103", :cpus => 2, :memory => 4096},
|
|
||||||
{ :name => "nas", :ip => "192.168.56.200", :cpus => 2, :memory => 4096, :drive => { name: "extra_disk", size: "30GB" }},
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
if enable_nas != false
|
||||||
|
boxes.push({ :name => "nas", :ip => "192.168.56.200", :cpus => 2, :memory => 4096, :drive => { name: "extra_disk", size: "30GB" }})
|
||||||
|
end
|
||||||
|
|
||||||
boxes.each do |opts|
|
boxes.each do |opts|
|
||||||
config.vm.define opts[:name] do |box|
|
config.vm.define opts[:name] do |box|
|
||||||
box.vm.hostname = opts[:name]
|
box.vm.hostname = opts[:name]
|
||||||
|
@ -50,13 +50,6 @@ all:
|
|||||||
- size=slim
|
- size=slim
|
||||||
headscale:
|
headscale:
|
||||||
network: beta
|
network: beta
|
||||||
nas:
|
|
||||||
ansible_host: 192.168.56.200
|
|
||||||
is_nas: true
|
|
||||||
hostname: nas
|
|
||||||
wireguard_ip: 10.20.0.100
|
|
||||||
headscale:
|
|
||||||
network: beta
|
|
||||||
children:
|
children:
|
||||||
master:
|
master:
|
||||||
hosts:
|
hosts:
|
||||||
@ -85,7 +78,6 @@ all:
|
|||||||
hb-slim-1:
|
hb-slim-1:
|
||||||
hb-slim-2:
|
hb-slim-2:
|
||||||
hb-slim-3:
|
hb-slim-3:
|
||||||
nas:
|
|
||||||
vars:
|
vars:
|
||||||
ansible_ssh_private_key_file: ~/.ssh/creator
|
ansible_ssh_private_key_file: ~/.ssh/creator
|
||||||
ansible_user: creator
|
ansible_user: creator
|
||||||
|
22
inventory/nas.yml
Normal file
22
inventory/nas.yml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
all:
|
||||||
|
hosts:
|
||||||
|
nas:
|
||||||
|
ansible_host: 192.168.56.200
|
||||||
|
is_nas: true
|
||||||
|
hostname: nas
|
||||||
|
wireguard_ip: 10.20.0.100
|
||||||
|
headscale:
|
||||||
|
network: beta
|
||||||
|
children:
|
||||||
|
headscale_client:
|
||||||
|
nas:
|
||||||
|
vars:
|
||||||
|
ansible_ssh_private_key_file: ~/.ssh/creator
|
||||||
|
ansible_user: creator
|
||||||
|
ansible_become_password: aberation
|
||||||
|
ansible_ssh_port: 22
|
||||||
|
k3s_version: v1.28.5+k3s1
|
||||||
|
token: "aberation" # Use ansible vault if you want to keep it secret
|
||||||
|
api_endpoint: "{{ hostvars[groups['server'][0]]['ansible_tailscale0'].ipv4.address | default(groups['server'][0]) }}"
|
||||||
|
extra_server_args: "--disable traefik --advertise-address {{hostvars[inventory_hostname]['ansible_tailscale0'].ipv4.address}} --flannel-iface tailscale0 --tls-san {{ ansible_host }} --disable servicelb {{ ['--node-label']|product(hostvars[inventory_hostname]['k3s_label'])|map('join', ' ')|join(' ') }}"
|
||||||
|
extra_agent_args: "--flannel-iface tailscale0 --node-external-ip {{hostvars[inventory_hostname]['ansible_default_ipv4']['address']}} {{ ['--node-label']|product(hostvars[inventory_hostname]['k3s_label'])|map('join', ' ')|join(' ') }}"
|
Loading…
Reference in New Issue
Block a user