3.6 KiB
3.6 KiB
Kubernetes Workspace Setup
This template provides a complete Kubernetes cluster configuration using the package-based provisioning system.
Prerequisites
-
Core provisioning package installed:
kcl-packager.nu install --version latest -
Module loader CLI available:
module-loader --help
Setup Steps
1. Initialize Workspace
# Create workspace from template
cp -r provisioning/templates/workspaces/kubernetes ./my-k8s-cluster
cd my-k8s-cluster
# Initialize directory structure
workspace-init.nu . init
2. Load Required Taskservs
# Load Kubernetes components
module-loader load taskservs . [kubernetes, cilium, containerd]
# Verify loading
module-loader list taskservs .
3. Load Cloud Provider
# For UpCloud
module-loader load providers . [upcloud]
# For AWS
module-loader load providers . [aws]
# For local development
module-loader load providers . [local]
4. Configure Infrastructure
- Edit
servers.kto uncomment the import statements and taskserv configurations - Adjust server specifications, hostnames, and labels as needed
- Configure provider-specific settings in the generated provider files
5. Validate Configuration
# Validate KCL configuration
kcl run servers.k
# Validate workspace
module-loader validate .
6. Deploy Cluster
# Create servers
provisioning server create --infra . --check
# Install taskservs
provisioning taskserv create kubernetes --infra .
provisioning taskserv create cilium --infra .
provisioning taskserv create containerd --infra .
# Verify cluster
kubectl get nodes
Configuration Details
Server Roles
- k8s-master-01: Control plane node running the Kubernetes API server, etcd, and scheduler
- k8s-worker-01/02: Worker nodes running kubelet and container runtime
Taskservs
- containerd: Container runtime for Kubernetes
- kubernetes: Core Kubernetes components (kubelet, kubeadm, kubectl)
- cilium: CNI (Container Network Interface) for pod networking
Network Configuration
- All nodes have public IPv4 for initial setup
- Cilium provides internal pod-to-pod networking
- SSH access on port 22 for management
Customization
Adding More Workers
Copy the worker node configuration in servers.k and modify:
hostnametitle- Any provider-specific settings
Different Container Runtime
Replace containerd taskserv with:
crio: CRI-O runtimedocker: Docker runtime (not recommended for production)
Different CNI
Replace cilium taskserv with:
calico: Calico CNIflannel: Flannel CNI- Built-in kubenet (remove CNI taskserv)
Storage
Add storage taskservs:
module-loader load taskservs . [rook-ceph, mayastor]
Then add to server taskserv configurations:
taskservs = [
{ name = "containerd", profile = "default" },
{ name = "kubernetes", profile = "worker" },
{ name = "cilium", profile = "worker" },
{ name = "rook-ceph", profile = "default" }
]
Troubleshooting
Module Import Errors
If you see import errors like "module not found":
- Verify modules are loaded:
module-loader list taskservs . - Check generated import files:
ls .taskservs/ - Reload modules if needed:
module-loader load taskservs . [kubernetes, cilium, containerd]
Provider Configuration
Check provider-specific configuration in .providers/ directory after loading.
Kubernetes Setup Issues
- Check taskserv installation logs in
./tmp/k8s-deployment/ - Verify all nodes are reachable via SSH
- Check firewall rules for Kubernetes ports (6443, 10250, etc.)