From d3e770254de0bb301815ca87257c8b1a357d06c4 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 26 Apr 2026 21:02:47 +0800 Subject: hehe --- terraform/modules/agent/main.tf | 114 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 terraform/modules/agent/main.tf (limited to 'terraform/modules/agent/main.tf') diff --git a/terraform/modules/agent/main.tf b/terraform/modules/agent/main.tf new file mode 100644 index 0000000..f53acdc --- /dev/null +++ b/terraform/modules/agent/main.tf @@ -0,0 +1,114 @@ +resource "kubernetes_namespace_v1" "agent" { + metadata { + name = var.namespace + labels = { + "app.kubernetes.io/part-of" = "llm-platform" + } + } +} + +resource "kubernetes_deployment_v1" "agent" { + metadata { + name = "agent" + namespace = kubernetes_namespace_v1.agent.metadata[0].name + labels = { app = "agent" } + } + spec { + replicas = 1 + selector { + match_labels = { app = "agent" } + } + template { + metadata { + labels = { app = "agent" } + annotations = { + # Bounce the pod when agent.py changes on disk, even if image tag is unchanged. + "checksum/code" = substr(sha256(file(var.agent_source_path)), 0, 16) + } + } + spec { + container { + name = "agent" + image = var.agent_image + image_pull_policy = "IfNotPresent" + env { + name = "OPENAI_BASE_URL" + value = var.llm_service_url + } + env { + name = "MODEL" + value = var.model_alias + } + port { + name = "http" + container_port = 8001 + } + readiness_probe { + http_get { + path = "/health" + port = "http" + } + initial_delay_seconds = 3 + period_seconds = 5 + failure_threshold = 10 + } + liveness_probe { + http_get { + path = "/health" + port = "http" + } + initial_delay_seconds = 30 + period_seconds = 30 + } + resources { + requests = { cpu = "100m", memory = "128Mi" } + limits = { cpu = "1", memory = "512Mi" } + } + } + } + } + } +} + +resource "kubernetes_service_v1" "agent" { + metadata { + name = "agent" + namespace = kubernetes_namespace_v1.agent.metadata[0].name + labels = { app = "agent" } + } + spec { + selector = { app = "agent" } + port { + name = "http" + port = 8001 + target_port = "http" + } + } +} + +resource "kubernetes_ingress_v1" "agent" { + metadata { + name = "agent" + namespace = kubernetes_namespace_v1.agent.metadata[0].name + } + spec { + ingress_class_name = var.ingress_class + rule { + host = var.ingress_host + http { + path { + path = "/" + path_type = "Prefix" + backend { + service { + name = kubernetes_service_v1.agent.metadata[0].name + port { + number = 8001 + } + } + } + } + } + } + } +} -- cgit