Files
infrastructure/servers/legion/ollama.tf
T

119 lines
2.0 KiB
Terraform

# Ollama — local LLM inference with GPU
resource "kubernetes_namespace" "ollama" {
metadata {
name = "ollama"
labels = {
managed-by = "terraform"
tier = "application"
}
}
}
resource "kubernetes_persistent_volume_claim" "ollama_models" {
metadata {
name = "ollama-models"
namespace = kubernetes_namespace.ollama.metadata[0].name
}
spec {
access_modes = ["ReadWriteOnce"]
resources {
requests = {
storage = "50Gi"
}
}
}
}
resource "kubernetes_deployment" "ollama" {
metadata {
name = "ollama"
namespace = kubernetes_namespace.ollama.metadata[0].name
labels = {
app = "ollama"
}
}
spec {
replicas = 1
strategy {
type = "Recreate"
}
selector {
match_labels = {
app = "ollama"
}
}
template {
metadata {
labels = {
app = "ollama"
}
}
spec {
container {
name = "ollama"
image = "ollama/ollama:latest"
port {
container_port = 11434
}
env {
name = "NVIDIA_VISIBLE_DEVICES"
value = "all"
}
volume_mount {
name = "models"
mount_path = "/root/.ollama"
}
resources {
requests = {
memory = "2Gi"
cpu = "500m"
}
limits = {
memory = "8Gi"
cpu = "4"
}
}
}
volume {
name = "models"
persistent_volume_claim {
claim_name = kubernetes_persistent_volume_claim.ollama_models.metadata[0].name
}
}
}
}
}
}
resource "kubernetes_service" "ollama" {
metadata {
name = "ollama"
namespace = kubernetes_namespace.ollama.metadata[0].name
}
spec {
selector = {
app = "ollama"
}
port {
port = 11434
target_port = 11434
node_port = 31434
}
type = "NodePort"
}
}