Salta ai contenuti

Cluster kind + monitoring

Settings → Resources: almeno 4 CPU e 6 GB di RAM. L’LLM gira fuori dalla VM Docker, quindi non va conteggiato qui.

Finestra del terminale
docker desktop status
Finestra del terminale
docker info --format '{{.NCPU}} CPU, {{.MemTotal}} bytes'
Finestra del terminale
mkdir -p ~/Downloads/K8S-AI/lab && cd ~/Downloads/K8S-AI/lab
Finestra del terminale
cat > kind-ai-mon.yaml <<'EOF2'
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: ai-mon
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 30090
hostPort: 9090
- containerPort: 30093
hostPort: 9093
EOF2
Finestra del terminale
kind create cluster --config kind-ai-mon.yaml
Finestra del terminale
kubectl cluster-info --context kind-ai-mon
Finestra del terminale
kubectl get nodes -o wide
Finestra del terminale
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
Finestra del terminale
helm repo update

Values per un lab leggero, con Prometheus e Alertmanager esposti su NodePort (mappati su localhost:9090 e localhost:9093 dal config kind):

Finestra del terminale
cat > kps-values.yaml <<'EOF2'
grafana:
enabled: false
kubeEtcd:
enabled: false
kubeControllerManager:
enabled: false
kubeScheduler:
enabled: false
kubeProxy:
enabled: false
prometheus:
service:
type: NodePort
nodePort: 30090
prometheusSpec:
retention: 12h
scrapeInterval: 30s
resources:
requests: { cpu: 200m, memory: 512Mi }
limits: { memory: 1Gi }
serviceMonitorSelectorNilUsesHelmValues: false
podMonitorSelectorNilUsesHelmValues: false
ruleSelectorNilUsesHelmValues: false
alertmanager:
service:
type: NodePort
nodePort: 30093
alertmanagerSpec:
resources:
requests: { cpu: 20m, memory: 64Mi }
EOF2
Finestra del terminale
helm upgrade --install kps prometheus-community/kube-prometheus-stack -n monitoring --create-namespace -f kps-values.yaml
Finestra del terminale
kubectl -n monitoring rollout status sts/prometheus-kps-kube-prometheus-stack-prometheus --timeout=5m
Finestra del terminale
kubectl -n monitoring get pods

Verifica dal Mac:

Finestra del terminale
curl -s localhost:9090/-/ready
Finestra del terminale
curl -s localhost:9093/-/ready
Finestra del terminale
curl -s 'localhost:9090/api/v1/query?query=up' | jq '.data.result | length'

Se le NodePort non rispondono, usa i port-forward (terminali separati):

Finestra del terminale
kubectl -n monitoring port-forward svc/kps-kube-prometheus-stack-prometheus 9090
Finestra del terminale
kubectl -n monitoring port-forward svc/kps-kube-prometheus-stack-alertmanager 9093
Finestra del terminale
helm upgrade kps prometheus-community/kube-prometheus-stack -n monitoring -f kps-values.yaml --set grafana.enabled=true --set grafana.adminPassword=admin
Finestra del terminale
kubectl -n monitoring port-forward svc/kps-grafana 3000:80
Finestra del terminale
kubectl run curl --rm -it --restart=Never --image=curlimages/curl -- curl -s http://host.docker.internal:11434/api/version

Se fallisce, vedi Esporre Ollama ai pod di kind.

Finestra del terminale
docker stop ai-mon-control-plane
Finestra del terminale
docker start ai-mon-control-plane
Finestra del terminale
kind delete cluster --name ai-mon