https://github.com/jfreed-dev/terraform-turingpi-modules
Terraform modules for Turing Pi clusters. Use with jfreed-dev/turingpi provider.
https://github.com/jfreed-dev/terraform-turingpi-modules
golang homelabs infrastructure-as-a-code ingress-nginx k3s k3s-cluster k8s-stack kubernetes-cluster longhorn metallb monitoring portainer rk3588 rkllm rkllm-runtime rockchip talos-cloud terraform-module terraform-provider turing-pi
Last synced: 2 months ago
JSON representation
Terraform modules for Turing Pi clusters. Use with jfreed-dev/turingpi provider.
- Host: GitHub
- URL: https://github.com/jfreed-dev/terraform-turingpi-modules
- Owner: jfreed-dev
- License: apache-2.0
- Created: 2025-12-29T15:04:33.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2025-12-30T21:09:51.000Z (3 months ago)
- Last Synced: 2026-01-01T21:29:00.010Z (3 months ago)
- Topics: golang, homelabs, infrastructure-as-a-code, ingress-nginx, k3s, k3s-cluster, k8s-stack, kubernetes-cluster, longhorn, metallb, monitoring, portainer, rk3588, rkllm, rkllm-runtime, rockchip, talos-cloud, terraform-module, terraform-provider, turing-pi
- Language: HCL
- Homepage: https://registry.terraform.io/modules/jfreed-dev/modules/turingpi
- Size: 105 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
# Terraform Turing Pi Modules
[](https://github.com/jfreed-dev/terraform-turingpi-modules/actions/workflows/validate.yml)
[](https://registry.terraform.io/modules/jfreed-dev/modules/turingpi/latest)
[](https://opensource.org/licenses/Apache-2.0)
Reusable Terraform modules for Turing Pi cluster provisioning and management.
## Cluster Modules
| Module | Description |
|--------|-------------|
| [flash-nodes](./modules/flash-nodes) | Flash firmware to Turing Pi nodes |
| [talos-cluster](./modules/talos-cluster) | Deploy Talos Linux Kubernetes cluster |
| [k3s-cluster](./modules/k3s-cluster) | Deploy K3s Kubernetes cluster on Armbian |
## Addon Modules
| Module | Description |
|--------|-------------|
| [metallb](./modules/addons/metallb) | MetalLB load balancer |
| [ingress-nginx](./modules/addons/ingress-nginx) | NGINX Ingress controller |
| [longhorn](./modules/addons/longhorn) | Distributed block storage with NVMe support |
| [monitoring](./modules/addons/monitoring) | Prometheus, Grafana, Alertmanager stack |
| [portainer](./modules/addons/portainer) | Cluster management agent (CE/BE) |
## Quick Start - Talos
```hcl
# Deploy Talos cluster
module "talos" {
source = "jfreed-dev/modules/turingpi//modules/talos-cluster"
version = ">= 1.3.0"
cluster_name = "homelab"
cluster_endpoint = "https://192.168.1.101:6443"
control_plane = [{ host = "192.168.1.101" }]
workers = [
{ host = "192.168.1.102" },
{ host = "192.168.1.103" },
{ host = "192.168.1.104" }
]
# Enable NVMe for Longhorn
nvme_storage_enabled = true
kubeconfig_path = "./kubeconfig"
}
# Add MetalLB
module "metallb" {
source = "jfreed-dev/modules/turingpi//modules/addons/metallb"
depends_on = [module.talos]
ip_range = "192.168.1.200-192.168.1.220"
}
```
## Quick Start - K3s (Armbian)
```hcl
# Deploy K3s cluster
module "k3s" {
source = "jfreed-dev/modules/turingpi//modules/k3s-cluster"
version = ">= 1.3.0"
cluster_name = "homelab"
control_plane = {
host = "192.168.1.101"
ssh_user = "root"
ssh_key = file("~/.ssh/id_rsa")
}
workers = [
{ host = "192.168.1.102", ssh_user = "root", ssh_key = file("~/.ssh/id_rsa") },
{ host = "192.168.1.103", ssh_user = "root", ssh_key = file("~/.ssh/id_rsa") },
{ host = "192.168.1.104", ssh_user = "root", ssh_key = file("~/.ssh/id_rsa") }
]
# Enable NVMe for Longhorn
nvme_storage_enabled = true
kubeconfig_path = "./kubeconfig"
}
# Add MetalLB
module "metallb" {
source = "jfreed-dev/modules/turingpi//modules/addons/metallb"
depends_on = [module.k3s]
ip_range = "192.168.1.200-192.168.1.220"
}
```
## Full Stack Example
```hcl
# Cluster (Talos or K3s)
module "cluster" {
source = "..." # talos-cluster or k3s-cluster
# ... cluster config
}
# MetalLB for LoadBalancer services
module "metallb" {
source = "jfreed-dev/modules/turingpi//modules/addons/metallb"
depends_on = [module.cluster]
ip_range = "192.168.1.200-192.168.1.220"
}
# Ingress controller
module "ingress" {
source = "jfreed-dev/modules/turingpi//modules/addons/ingress-nginx"
depends_on = [module.metallb]
loadbalancer_ip = "192.168.1.200"
}
# Distributed storage
module "longhorn" {
source = "jfreed-dev/modules/turingpi//modules/addons/longhorn"
depends_on = [module.cluster]
create_nvme_storage_class = true
}
# Monitoring
module "monitoring" {
source = "jfreed-dev/modules/turingpi//modules/addons/monitoring"
depends_on = [module.longhorn]
grafana_admin_password = var.grafana_password
storage_class = "longhorn"
}
# Cluster management
module "portainer" {
source = "jfreed-dev/modules/turingpi//modules/addons/portainer"
depends_on = [module.metallb]
loadbalancer_ip = "192.168.1.201"
}
```
## Examples
| Example | Description |
|---------|-------------|
| [talos-full-stack](./examples/talos-full-stack) | Complete Talos cluster with all addons |
| [k3s-full-stack](./examples/k3s-full-stack) | Complete K3s cluster with all addons |
## Talos vs K3s
| Feature | Talos | K3s (Armbian) |
|---------|-------|---------------|
| Security | Immutable, API-only | Standard Linux |
| Updates | Image-based | apt + k3s script |
| Access | talosctl | SSH |
| Customization | Limited (secure) | Full Linux |
| Best for | Production, security-focused | Development, flexibility |
## Requirements
- Terraform >= 1.0
- [Turing Pi Provider](https://github.com/jfreed-dev/terraform-provider-turingpi) >= 1.3.0 (for flashing)
- [Talos Provider](https://github.com/siderolabs/terraform-provider-talos) >= 0.7 (for Talos clusters)
## License
Apache License 2.0