nixinfra | ||
.gitignore | ||
README.md |
KittehCluster
This is my (work in progress, deployed but nothing production running on it yet) Kubernetes clustered computing setup, based on Proxmox VE and NixOS.
Currently, I cannot recommend that you use this setup in production yet. I have to delete and recreate my VMs multiple times a day, until I fix everything.
Prerequisites
- An x86_64 computer with virtualization enabled, running NixOS
- A cluster of computers running Proxmox, with your SSH keys copied to them. These should (not required, but highly recommended) be connected together in Proxmox using the cluster feature.
- Cluster hypervisor's IPs next to eachother (ex. node 1's Proxmox is
192.168.0.20
, node 2's is192.168.0.21
) - Patience (will take a while, and may test it)
kubectl
, andhelm
installed on your local computer.
Setup
VM Setup
- First, you'll need to fork this repository, and
git clone
it down. - Copy
secrets.example.nix
tosecrets.nix
. - Change
services.k3s.token
to be a unique token (i.e. usinguuidgen
,head -c 500 /dev/random | sha1sum | cut -d " " -f 1
, etc) - Change
users.users.clusteradm.openssh.authorizedKeys.keys
to have your SSH key(s) in there. - Then, run
./buildall.sh
, to build all the virtual machines. This may take a long time, depending on your hardware! On a 2015 MacBook Air, this took 30 minutes. Make some tea while you wait! - Finally, run
BASE_IP=your_base_ip_here ./upload.sh -i -d
, withBASE_IP
being the first IP for your Proxmox cluster. - Set all VMs to auto-start, then turn them all on, starting with the first node's
k3s-server
. - You can now connect using your SSH key to any of the nodes with the user
clusteradm
. The default password is1234
. Be sure to change this!
Kubernetes setup
- SSH into any of the nodes. (i.e.
ssh clusteradm@kitteh-node-2-k3s-server
) - As root, grab
/etc/rancher/k3s/k3s.yaml
, and copy it to wherever you store your k3s configurations (on macOS, this is~/.kube/config
)
Updating (TODO)
In NixOS, instead of apt update; apt upgrade -y
, pacman -Syu --noconfirm
, or other systems, you need to "rebuild" the system.
There is a work in progress of this system (see kittehclean
's Git downloader), but it is not done yet.
Customization
Adding nodes
Copy kitteh-node-2
, to kitteh-node-X
, where X
is the server number. Change the hostname to correspond to each clustered computer (ex. 3rd computer's k3s agent is kitteh-node-3-k3s-agent
)
Custom cluster setup / Forking
This is a guide. You can change more stuff if you'd like, but this will get you started.
- First, fork this Git repository if you haven't already.
- If you want to change the folder names, rename the folders (i.e. kitteh-node-* to whatever-*), and change
buildall.sh
's for loop to bewhatever-*/*
, for example. - If you want to change the hostname, change them all. Be sure to change
commons.agent.nix
andcommons.server.nix
to correspond to the newkitteh-node-1-k3s-server
's name! - In
commons.nix
, either removekittehclean
(not recommended unless you're using a private Git repository), or change the git repository it pulls down from (i.e. changehttps://git.hofers.cloud/greysoh/kittehcluster
tohttps://github.com/contoso/k3s-cluster
). - (optional) Rename
kittehclean
and change the description.
Troubleshooting
- I can't login via SSH!
- Have you copied your SSH keys to the
clusteradm
user? Try copying your keys on another computer (or the VM console) if you got a new one, for example (in the~/.ssh/authorized_keys
on each VM) - Additionally, password authentication is disabled!
- Have you copied your SSH keys to the