148 lines
3.7 KiB
Markdown
Raw Normal View History

2025-10-07 11:12:02 +01:00
# Full Infrastructure Template
This is a comprehensive infrastructure template with multiple server types and advanced configuration examples.
## What's Included
- **Web servers** - 2 frontend web servers
- **Database server** - Backend database with private networking
- **Kubernetes control plane** - Control plane node
- **Kubernetes workers** - 2 worker nodes
- **Advanced settings** - SSH config, monitoring, backup options
- **Comprehensive examples** - Multiple server roles and configurations
## Server Inventory
| Hostname | Role | Network | Purpose |
|----------|------|---------|---------|
| web-01, web-02 | Web | Public + Private | Frontend application servers |
| db-01 | Database | Private only | Backend database |
| k8s-control-01 | K8s Control | Public + Private | Kubernetes control plane |
| k8s-worker-01, k8s-worker-02 | K8s Worker | Public + Private | Kubernetes compute nodes |
## Quick Start
### 1. Load Required Modules
```bash
cd infra/<your-infra-name>
# Load provider
provisioning mod load providers . upcloud
# Load taskservs
provisioning mod load taskservs . kubernetes containerd cilium
# Load cluster configurations (optional)
provisioning mod load clusters . buildkit
```
### 2. Customize Configuration
Edit `servers.k`:
**Provider-specific settings:**
```kcl
# Uncomment and adjust for your provider
plan = "2xCPU-4GB" # Server size
storage_size = 50 # Disk size in GB
```
**Task services:**
```kcl
# Uncomment after loading modules
taskservs = [
{ name = "kubernetes", profile = "control-plane" }
{ name = "containerd", profile = "default" }
{ name = "cilium", profile = "default" }
]
```
**Select servers to deploy:**
```kcl
# Choose which server groups to deploy
all_servers = web_servers + db_servers # Web + DB only
# OR
all_servers = k8s_control + k8s_workers # Kubernetes cluster only
# OR
all_servers = web_servers + db_servers + k8s_control + k8s_workers # Everything
```
### 3. Deploy
```bash
# Test configuration
kcl run servers.k
# Dry-run deployment (recommended)
provisioning s create --infra <name> --check
# Deploy selected servers
provisioning s create --infra <name>
# Or deploy specific server groups
provisioning s create --infra <name> --select web
```
## Architecture Examples
### Web Application Stack
Deploy web servers + database:
```kcl
all_servers = web_servers + db_servers
```
### Kubernetes Cluster
Deploy control plane + workers:
```kcl
all_servers = k8s_control + k8s_workers
```
### Complete Infrastructure
Deploy everything:
```kcl
all_servers = web_servers + db_servers + k8s_control + k8s_workers
```
## Advanced Configuration
### Network Segmentation
- **Public servers**: web-01, web-02 (public + private networks)
- **Private servers**: db-01 (private network only)
- **Hybrid**: k8s nodes (public for API access, private for pod networking)
### Monitoring
Monitoring is pre-configured in settings:
```kcl
monitoring = {
enabled = True
metrics_port = 9100
log_aggregation = True
}
```
### SSH Configuration
Advanced SSH settings are included:
```kcl
ssh_config = {
connect_timeout = 30
retry_attempts = 3
compression = True
}
```
## Next Steps
1. **Customize server specs** - Adjust CPU, memory, storage
2. **Configure networking** - Set up firewall rules, load balancers
3. **Add taskservs** - Uncomment and configure task services
4. **Set up clusters** - Deploy Kubernetes or container clusters
5. **Configure monitoring** - Set up metrics and logging
6. **Implement backup** - Configure backup policies
## Template Characteristics
- **Complexity**: High
- **Servers**: 6 examples (web, database, k8s)
- **Pre-configured modules**: Examples for all major components
- **Best for**: Production deployments, complex architectures, learning advanced patterns