Ctrl K
ComunidadGuías…

docs/LOCAL-SETUP.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# Local development environment

A three-node kind cluster with the full observability stack, so alerts can be
fired at `ingest-api` the same way they will be in production.

The quickstart in the root README does not need any of this: the chart runs on
a bare kind cluster with `k8s-events` as the only collector. This page is for
the full loop (Prometheus rule → Alertmanager → webhook) and the Loki and
Prometheus collectors. See also `deploy/README.md` for the agent and MCP.

## Prerequisites

| Tool | Check | Install (Windows) |
|------|-------|-------------------|
| Docker Desktop | `docker info` | must be **running** — WSL2 backend |
| kind | `kind --version` | `winget install Kubernetes.kind` |
| kubectl | `kubectl version --client` | `winget install Kubernetes.kubectl` |
| helm | `helm version` | `winget install Helm.Helm` |

## 1. Create the cluster

```bash
kind create cluster --config kind/cluster.yaml
```

Three nodes on purpose: a single-node cluster hides scheduling behaviour, and
several fault-injection scenarios (node pressure, eviction, anti-affinity) only
reproduce with real workers.

Verify:

```bash
kubectl get nodes -o wide
```

Expect one `control-plane` and two `worker` nodes in `Ready`.

## 2. Install the monitoring stack

```bash
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
```

```bash
helm install monitoring prometheus-community/kube-prometheus-stack \
  --namespace monitoring --create-namespace \
  --values kind/values-monitoring.yaml
```

Grafana lands on <http://localhost:3000>, Prometheus on <http://localhost:9090>,
Alertmanager on <http://localhost:9093> (port mappings come from the kind config).

## 3. Point Alertmanager at Minus20

Alertmanager reaches the ingest service through a webhook receiver — that single
config block is the entire integration surface:

```yaml
receivers:
  - name: minus20
    webhook_configs:
      - url: http://ingest-api.minus20.svc.cluster.local:8080/webhook/alertmanager
        send_resolved: true
```

## 4. Tear down

```bash
kind delete cluster --name minus20
```

The cluster is disposable — everything above is reproducible from this file.