Add comprehensive README.md for Kubernetes home lab
- Document complete media server and CI/CD infrastructure - Include quick start deployment instructions - Add troubleshooting and management commands - Document network access and storage configuration - Include security considerations and prerequisites 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
430fb959b8
commit
aafc797a2c
1 changed files with 199 additions and 0 deletions
199
README.md
Normal file
199
README.md
Normal file
|
@ -0,0 +1,199 @@
|
|||
# Kubernetes Home Lab
|
||||
|
||||
A comprehensive Kubernetes deployment for media server applications and CI/CD infrastructure, designed for home lab environments.
|
||||
|
||||
## Overview
|
||||
|
||||
This repository contains Kubernetes manifests for deploying:
|
||||
- **Media Server Stack**: Complete *arr suite (Radarr, Sonarr, Prowlarr, etc.) with Overseerr for request management
|
||||
- **CI/CD Infrastructure**: Forgejo self-hosted runners with full development toolchain
|
||||
- **Supporting Infrastructure**: MetalLB load balancer, NFS storage, and Kubernetes dashboard
|
||||
|
||||
## Architecture
|
||||
|
||||
### Media Applications (`arr/` directory)
|
||||
- **Radarr** - Movie collection management (port 7878)
|
||||
- **Sonarr** - TV series collection management (port 8989)
|
||||
- **Prowlarr** - Indexer management and proxy
|
||||
- **SABnzbd** - Usenet downloader
|
||||
- **Overseerr** - Media request management (port 5055)
|
||||
- **Tautulli** - Plex monitoring and analytics
|
||||
|
||||
### Infrastructure Components
|
||||
- **MetalLB**: Load balancer with IP pool `192.168.15.200-192.168.15.210`
|
||||
- **NFS Storage**: External server at `192.168.12.16` for media files
|
||||
- **Longhorn**: Block storage for application configurations
|
||||
- **Kubernetes Dashboard**: Web UI with cluster-admin access
|
||||
- **Forgejo Workers**: Self-hosted CI/CD runners for `git.deco.sh`
|
||||
|
||||
## Prerequisites
|
||||
|
||||
Before deploying, ensure you have:
|
||||
|
||||
1. **Kubernetes cluster** with kubectl configured
|
||||
2. **NGINX Ingress Controller** installed
|
||||
3. **Longhorn storage system** deployed
|
||||
4. **NFS server** accessible at `192.168.12.16` with media shares
|
||||
5. **Local DNS** configured to resolve `*.local` domains
|
||||
6. **MetalLB** compatible network environment
|
||||
|
||||
## Quick Start
|
||||
|
||||
### 1. Deploy Infrastructure
|
||||
```bash
|
||||
# Deploy storage classes
|
||||
kubectl apply -f nfs-storage-classes.yaml
|
||||
|
||||
# Deploy MetalLB load balancer
|
||||
kubectl apply -f metallb-config.yaml
|
||||
|
||||
# Deploy Kubernetes dashboard
|
||||
kubectl apply -f k8s-dashboard-ingress.yaml
|
||||
kubectl apply -f dash-admin.yaml
|
||||
```
|
||||
|
||||
### 2. Deploy Media Applications
|
||||
```bash
|
||||
# Create media namespace
|
||||
kubectl create namespace media
|
||||
|
||||
# Deploy all media applications
|
||||
kubectl apply -f arr/
|
||||
|
||||
# Check deployment status
|
||||
kubectl get pods -n media
|
||||
```
|
||||
|
||||
### 3. Deploy CI/CD Workers (Optional)
|
||||
```bash
|
||||
# Create namespace and deploy workers
|
||||
kubectl create namespace forgejo-workers
|
||||
|
||||
# Deploy worker configuration
|
||||
kubectl apply -f forgejo-worker-config.yaml
|
||||
|
||||
# Deploy workers (choose one variant)
|
||||
kubectl apply -f forgejo-workers-volume5.yaml
|
||||
```
|
||||
|
||||
## Configuration Details
|
||||
|
||||
### Storage Configuration
|
||||
- **Config Storage**: Longhorn PVCs for each application
|
||||
- **Media Storage**: NFS mounts from `192.168.12.16`:
|
||||
- `/Volume2/media` → `/media`
|
||||
- `/Volume2/tv` → `/tv`
|
||||
- `/Volume2/movies` → `/movies`
|
||||
- `/Volume2/downloads` → `/downloads`
|
||||
|
||||
### Network Access
|
||||
All media applications are accessible via ingress at:
|
||||
- `http://radarr.local`
|
||||
- `http://sonarr.local`
|
||||
- `http://prowlarr.local`
|
||||
- `http://overseerr.local`
|
||||
- `http://sabnzbd.local`
|
||||
- `http://tautulli.local`
|
||||
|
||||
### Forgejo Workers
|
||||
Multiple worker configurations available:
|
||||
- `forgejo-workers-nodejs-simple.yaml` - Basic Node.js worker
|
||||
- `forgejo-workers-volume5.yaml` - Full-featured worker with NFS
|
||||
- `forgejo-workers-volume5-fixed.yaml` - Stable version
|
||||
- `forgejo-workers-volume5-symlinks.yaml` - Enhanced with symlinks
|
||||
|
||||
Workers include: Node.js, Go, Hugo, AWS CLI, Python, Git, yarn, jq
|
||||
|
||||
## Management Commands
|
||||
|
||||
### Check Application Status
|
||||
```bash
|
||||
# View all deployments
|
||||
kubectl get deployments -n media
|
||||
|
||||
# Check pod logs
|
||||
kubectl logs -f deployment/radarr -n media
|
||||
|
||||
# View services and ingress
|
||||
kubectl get svc,ingress -n media
|
||||
```
|
||||
|
||||
### Storage Management
|
||||
```bash
|
||||
# Test NFS connectivity
|
||||
kubectl apply -f nfs-test.yaml
|
||||
|
||||
# Check PVC status
|
||||
kubectl get pvc -n media
|
||||
|
||||
# View storage classes
|
||||
kubectl get storageclass
|
||||
```
|
||||
|
||||
### Worker Management
|
||||
```bash
|
||||
# Check worker status
|
||||
kubectl get pods -n forgejo-workers
|
||||
|
||||
# View worker logs
|
||||
kubectl logs -f daemonset/forgejo-worker-full -n forgejo-workers
|
||||
|
||||
# Scale workers
|
||||
kubectl scale daemonset/forgejo-worker-full --replicas=2 -n forgejo-workers
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Common Issues
|
||||
|
||||
**Pods stuck in Pending state:**
|
||||
```bash
|
||||
kubectl describe pod <pod-name> -n <namespace>
|
||||
# Check for resource constraints or storage issues
|
||||
```
|
||||
|
||||
**NFS mount failures:**
|
||||
```bash
|
||||
# Test NFS connectivity
|
||||
kubectl apply -f nfs-test.yaml
|
||||
kubectl logs nfs-test-pod
|
||||
```
|
||||
|
||||
**Ingress not working:**
|
||||
```bash
|
||||
# Check ingress controller
|
||||
kubectl get pods -n ingress-nginx
|
||||
|
||||
# Verify ingress resources
|
||||
kubectl get ingress -A
|
||||
```
|
||||
|
||||
### Logs and Monitoring
|
||||
```bash
|
||||
# Application logs
|
||||
kubectl logs -f deployment/<app-name> -n media
|
||||
|
||||
# System events
|
||||
kubectl get events -n media --sort-by='.lastTimestamp'
|
||||
|
||||
# Resource usage
|
||||
kubectl top pods -n media
|
||||
```
|
||||
|
||||
## Security Considerations
|
||||
|
||||
- All containers run with UID/GID 1000
|
||||
- Forgejo workers require privileged containers for full CI/CD functionality
|
||||
- Dashboard has cluster-admin privileges - secure access appropriately
|
||||
- NFS shares should have appropriate network restrictions
|
||||
|
||||
## Contributing
|
||||
|
||||
1. Test changes in a development environment
|
||||
2. Update documentation for any configuration changes
|
||||
3. Follow existing naming conventions and resource patterns
|
||||
4. Ensure all deployments include proper resource limits
|
||||
|
||||
## License
|
||||
|
||||
This configuration is provided as-is for home lab use. Modify according to your specific requirements and security policies.
|
Loading…
Add table
Add a link
Reference in a new issue