This is the configuration for my home server running in Kubernetes.
-
Install Proxmox.
-
Create user.
apt update apt install sudo useradd -m mchill passwd mchill echo "mchill ALL=(ALL) NOPASSWD: ALL" | tee -a /etc/sudoers.d/mchill
-
Add ssh key from GitHub.
mkdir ~/.ssh touch ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys wget -O - https://github.com/mchill.keys >> ~/.ssh/authorized_keys
-
Configure the hosts with Ansible.
ansible-playbook playbooks/configure_proxmox_hosts.yaml -i inventory.yaml --extra-vars "@variables.yaml" -
If Ceph was installed for the first time, some values need to be replaced.
-
Replace the
clusterIDwith the result ofceph fsidin: -
Replace the
userKeywith the result ofceph auth get-key client.k8sin:
-
When creating VMs for the first time, set initialize=true to add the bootable CD and exclude devices that interfere with the OS installation process.
terraform apply -var="initialize=true"-
Install Ubuntu Server 24.04. Keep defaults except where noted below.
- Disable "Set up this disk as an LVM group"
- Enable "Install OpenSSH server"
- Import SSH key from GitHub
-
Reapply terraform configuration, removing the bootable CD and adding PCI and serial devices.
cd terraform terraform apply -
Enable passwordless sudo to allow Ansible to run later.
echo "mchill ALL=(ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers.d/mchill
cd ansible
ansible-playbook playbooks/configure_proxmox_vms.yaml -i inventory.yaml --extra-vars "@variables.yaml"cd k8s
# Sealed Secrets key
kubectl create namespace sealed-secrets
kubectl apply -f sources/sealed-secrets/sealed-secrets-key.yaml
# Argo CD
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update
helm upgrade --install --create-namespace -n argocd \
--version $(yq '.spec.sources[0].targetRevision' applications/wave2/argocd.yaml) \
--values argocd/values.yaml argocd argo/argo-cd
# Workloads
kubectl apply -f applications/root.yaml