k8s-clusters/readme.md

2 KiB

home-k8s-cluster

This repository contains the configuration, scripts, and other goodies for building and managing my home cluster. I share the source with you so you can make exactly the same mistakes as I do.

Setup

Setup the pre-commit hooks before you change anything!

pip install pre-commit
pre-commit install --install-hooks
pre-commit autoupdate

Provision Machines

Before we interact with the cluster, we have some manual work to do.

Manual Preparation

  • Currently, my nodes are Arch Linux machines on bare metal
    • Nodes must be ready to be controlled via Ansible
      • Have python3 installed
      • Need to be ssh-able from a controller (my workstation)
        • curl -L files.lyte.dev/key.pub >> ~/.ssh/authorized_keys

TODO: script this? maybe custom ISO+PXEBoot? Talos+Sidero?

Automated Provisioning

  • Setup Ansible on the controller (from ./ansible)
    • ansible-galaxy install -r requirements.yml --force
  • Verify Ansible can reach hosts (from ./ansible)
    • ansible all -i inventory/hosts.yml --list-hosts
    • ansible all -i inventory/hosts.yml -m ping
  • Use Ansible to build the cluster as configured on all nodes (from ./ansible)
    • ansible-playbook -i inventory/hosts.yml ./build-k3s-cluster

And the cluster is up! If you want to interact with it from your controller, you can do this:

ansible -i ansible/inventory/hosts.yml $REMOTE_HOST -m fetch \
  -a "src=/etc/rancher/k3s/k3s.yaml dest=./k3s-cluster-config.kubeconfig.yaml flat=yes"
# TODO: this did not work for me
# env KUBECONFIG="~/.kube/config:./k3s-cluster-config.kubeconfig.yaml" \
# kubectl config view --flatten | sed "s/127.0.0.1/$REMOTE_HOST/" > ~/.kube/new-config
  • Copy the cluster information from the ./k3s-cluster-config.kubeconfig.yaml file into your existing ~/.kube/config (or just copy it there if it doesn't exist)
    • You will need to edit the host from localhost/127.0.0.1 to the correct host

Automated Teardown

ansible-playbook -i inventory/hosts.yml ./nuke-k3s-cluster

Setting up Flux