blob: 15c0031cc38f1bd00fc057f700e478f7b120da3a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
REPO_ROOT := $(abspath $(dir $(abspath $(lastword $(MAKEFILE_LIST)))))
CHART_PATH := $(REPO_ROOT)/charts/llm-app
AGENT_SRC := $(REPO_ROOT)/agent/agent.py
AGENT_IMG := localhost/agent:0.1.0
CLUSTER := llm-local
CONTEXT := kind-$(CLUSTER)
export KIND_EXPERIMENTAL_PROVIDER=podman
.PHONY: help
help:
@echo "Targets:"
@echo " up-dev deploy dev LLM (Qwen2.5-0.5B, 2 replicas)"
@echo " up-prod deploy prod LLM (Qwen2.5-1.5B, 1 replica + HPA 1->3)"
@echo " up-agent up-prod + tool-using agent"
@echo " ask Q='...' POST a question to the agent"
@echo " down destroy everything + delete kind cluster"
@echo ""
@echo "URLs (after up-dev/up-prod):"
@echo " Grafana http://grafana.localtest.me:8080 (admin/admin)"
@echo " curl -f http://grafana.localtest.me:8080/api/health"
@echo " Prometheus http://prom.localtest.me:8080"
@echo " curl -f http://prom.localtest.me:8080/-/healthy"
@echo ""
.PHONY: up-dev
up-dev:
@kind get clusters | grep -qx $(CLUSTER) || kind create cluster --config $(REPO_ROOT)/cluster/kind-config.yaml
cd $(REPO_ROOT)/terraform/envs/bootstrap && \
tofu init -upgrade && \
tofu apply -auto-approve \
-var kube_context=$(CONTEXT)
cd $(REPO_ROOT)/terraform/envs/dev && \
tofu init -upgrade && \
tofu apply -auto-approve \
-var kube_context=$(CONTEXT) \
-var chart_path=$(CHART_PATH)
.PHONY: up-prod
up-prod:
@kind get clusters | grep -qx $(CLUSTER) || kind create cluster --config $(REPO_ROOT)/cluster/kind-config.yaml
cd $(REPO_ROOT)/terraform/envs/bootstrap && \
tofu init -upgrade && \
tofu apply -auto-approve \
-var kube_context=$(CONTEXT)
cd $(REPO_ROOT)/terraform/envs/prod && \
tofu init -upgrade && \
tofu apply -auto-approve \
-var kube_context=$(CONTEXT) \
-var chart_path=$(CHART_PATH)
.PHONY: up-agent
up-agent: up-prod
podman build -t $(AGENT_IMG) $(REPO_ROOT)/agent/
@tmp=$$(mktemp -t agent-XXXXXX.tar); \
podman save $(AGENT_IMG) -o $$tmp && \
kind load image-archive $$tmp --name $(CLUSTER) && \
rm -f $$tmp
cd $(REPO_ROOT)/terraform/envs/agent && \
tofu init -upgrade && \
tofu apply -auto-approve \
-var kube_context=$(CONTEXT) \
-var agent_source_path=$(AGENT_SRC)
.PHONY: ask
ask:
@if [ -z "$(Q)" ]; then echo "usage: make ask Q='what is 17*23?'"; exit 1; fi
curl -s http://agent.localtest.me:8080/ask \
-H 'Content-Type: application/json' \
-d "$(shell printf '{"question":"%s"}' "$(Q)")" | python3 -m json.tool
.PHONY: down
down:
-cd $(REPO_ROOT)/terraform/envs/agent && tofu destroy -auto-approve -var kube_context=$(CONTEXT) -var agent_source_path=$(AGENT_SRC) || true
-cd $(REPO_ROOT)/terraform/envs/prod && tofu destroy -auto-approve -var kube_context=$(CONTEXT) -var chart_path=$(CHART_PATH) || true
-cd $(REPO_ROOT)/terraform/envs/dev && tofu destroy -auto-approve -var kube_context=$(CONTEXT) -var chart_path=$(CHART_PATH) || true
-cd $(REPO_ROOT)/terraform/envs/bootstrap && tofu destroy -auto-approve -var kube_context=$(CONTEXT) || true
KIND_EXPERIMENTAL_PROVIDER=podman kind delete cluster --name $(CLUSTER)
|