From 07072d1c726bb3588a80234f684669a4188606c7 Mon Sep 17 00:00:00 2001 From: Paul Payne Date: Tue, 24 Jun 2025 17:51:02 -0700 Subject: [PATCH] Add comprehensive setup documentation for wild-cloud --- docs/SETUP_FULL.md | 136 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 docs/SETUP_FULL.md diff --git a/docs/SETUP_FULL.md b/docs/SETUP_FULL.md new file mode 100644 index 0000000..79fc9da --- /dev/null +++ b/docs/SETUP_FULL.md @@ -0,0 +1,136 @@ +# Wild-cloud Setup + +```bash +source env.sh +``` + +Initialize a personal wild-cloud in any empty directory, for example: + +```bash +cd ~ +mkdir ~/my-wild-cloud +cd my-wild-cloud +wild-init +``` + +## Cloud configuration + +```bash +cp config.example.yaml config.yaml +cp secrets.example.yaml secrets.yaml +``` + +```md +Core Variables: + +- wildcloud.root - Used by wild-config wildcloud.root command +- cluster.name - Cluster name + +DNS/Network Variables: + +- cloud.dns.ip - DNS server IP for dnsmasq +- cloud.domain - Main public domain +- cloud.internalDomain - Internal/private domain +- cloud.dhcpRange - DHCP range for dnsmasq +- cloud.router.ip - Gateway/router IP +- cloud.dnsmasq.interface - Network interface for dnsmasq +- cloud.dns.externalResolver - External DNS resolver + +Cluster Variables: + +- cluster.loadBalancerIp - Load balancer IP for services +- cluster.ipAddressPool - MetalLB IP address pool +- cluster.nodes.control.vip - Virtual IP for control plane +- cluster.nodes.control.node1/2/3.ip - Control plane node IPs +- cluster.nodes.control.node1/2/3.interface - Network interfaces +- cluster.nodes.control.node1/2/3.disk - Installation disks +- cluster.nodes.talos.version - Talos version +- cluster.nodes.talos.schematicId - Talos schematic ID + +Certificate/DNS Variables: + +- operator.email - Email for Let's Encrypt certificates +- cluster.certManager.cloudflare.domain - Domain for Cloudflare DNS challenge +- cluster.externalDns.ownerId - Unique identifier for ExternalDNS + +Storage Variables: + +- cloud.nfs.host - NFS server host +- cloud.nfs.mediaPath - NFS media path +- cloud.nfs.storageCapacity - Storage capacity for NFS PV + +Registry Variables: + +- cloud.dockerRegistryHost - Docker registry hostname +``` + +Copy setup files. + +```bash +wild-setup +``` + +## Dnsmasq + +- Install a Linux machine on your LAN. Record it's IP address in your `config:cloud.dns.ip`. +- Ensure it is accessible with ssh. +- From your wild-cloud directory, run `wild-central-generate-setup`. +- Run `cluster/dnsmasq/bin/create-setup-bundle.sh` +- Run `cluster/dnsmasq/bin/transfer-setup-bundle.sh` + +Now ssh into your dnsmasq machine and do the following: + +```bash +sudo -i +cd /root/dnsmasq-setup +./setup.sh +``` + +## Cluster Setup + +```bash +# ONE-TIME CLUSTER INITIALIZATION (run once per cluster) +./init-cluster.sh +``` + +### Join control nodes + +Boot each nodes with Talos ISO in maintenance mode. + +```bash +./detect-node-hardware.sh +./generate-machine-configs.sh +talosctl apply-config --insecure -n 192.168.8.168 --file final/controlplane-node-1.yaml +``` + +### Cluster bootstrap + +After all control plane nodes are configured. + +```bash +# Bootstrap the cluster using any control node +talosctl bootstrap --nodes 192.168.8.31 --endpoint 192.168.8.31 + +# Get kubeconfig +talosctl kubeconfig + +# Verify cluster is ready +kubectl get nodes +``` + +### Cluster services + +```bash +./setup/cluster/setup-all.sh +./setup/cluster/validate-setup.sh +``` + +## Installing Wild-Cloud apps + +```bash +wild-apps-list +wild-app-fetch +wild-app-config +wild-app-deploy +# Optional: Check in app templates. +```