# Argo CD: `test-contour` и `promtail-test`

На Edge-кластере (`vm-k8s-edge`) в UI Argo CD часто видны два приложения с похожими именами. Это **не два «контура» окружения**, а **зонтик** и один из его **дочерних** релизов.

## Схема (локальная 4-VM ферма)

```mermaid
flowchart TB
  subgraph edge [Edge — Argo CD]
    TC[test-contour<br/>App-of-Apps]
    PT[promtail-test<br/>Application]
    BE[backend-test]
    DO[docs-test]
    TC --> PT
    TC --> BE
    TC --> DO
  end
  subgraph apptest [app-test — VM App]
    PR[Promtail DaemonSet]
    API[backend / cabinet / …]
    PT -.->|sync| PR
    BE -.->|sync| API
  end
  subgraph mgmt [Mgmt — Loki]
    LOKI[Loki]
  end
  PR -->|логи| LOKI
```

| Уровень | Где крутится | Что делает |
|---------|--------------|------------|
| **Argo CD** | Edge | Читает Git `sova/sova-deploy`, ветка **`test`** |
| **test-contour** | Edge, NS `argocd` | Создаёт дочерние `Application` из `argocd/child-apps/test/` |
| **promtail-test**, **backend-test**, … | CR на Edge | Каждый указывает **куда** деплоить workload |
| **Поды приложений** | **app-test** | Реальные сервисы в `sova-test`, `monitoring`, … |

---

## `test-contour` — зонтик (App-of-Apps)

**Назначение:** одна точка входа GitOps для всего test-контура. Синхронизирует папку:

`sova-deploy/argocd/child-apps/test/`

**Откуда в UI:**

| Поле | Значение (локально) |
|------|---------------------|
| Path | `argocd/child-apps/test` |
| Destination | **in-cluster** (сам Edge) |
| Namespace | **`argocd`** (только CR приложений, не поды API) |
| Ветка | **`test`** |
| Repo URL (локально) | `http://<IP Git VM>:30300/sova/sova-deploy.git` — **не** `git.sova.local` (из pod ArgoCD DNS не видит hosts Mac) |

**Дочерние Application (примеры):** `backend-test`, `adminpanel-test`, `cabinet-test`, `docs-test`, `mocks-test`, `data-test`, **`promtail-test`**.

**Типичная ошибка (исправлена):** `InvalidSpecError` — проект `sova` не разрешал destination `argocd` на Edge. В `argocd/projects/sova-project.yaml` добавлено разрешение namespace `argocd`.

**Локальный bootstrap:** при `LOCAL_NONPROD=1` скрипт `bootstrap-argocd-multicluster.sh` ставит **только** `test-contour`, без ручного `kubectl apply` каждого child-app (иначе дубли в UI).

---

## `promtail-test` — агент логов

**Назначение:** Helm-релиз **Promtail** на кластере **`app-test`**, namespace **`monitoring`**.

**Зачем отдельно виден в UI:** это **дочерний** Application из той же папки, что подхватывает `test-contour`. В списке Argo CD он на одном уровне с зонтиком — так устроен App-of-Apps.

**Что делает Promtail:**

- читает логи подов (в т.ч. `sova-test`);
- отправляет в **Loki** на Mgmt (`LOKI_PUSH_URL`, порт 3100);
- смотреть в **Grafana → Explore → Loki**, запрос `{namespace="sova-test"}`.

**Почему часто Healthy, когда `test-contour` был красным:** `promtail-test` деплоится на **`app-test`**, что разрешено в проекте `sova` с самого начала. Ошибка была только у **родителя** (`test-contour`), а не у Promtail.

---

## Как обновить / починить

```bash
cd k8s

# 1. Залить sova-deploy (ветка test) в Gitea
cd sova-deploy && git checkout test
git add argocd/
git commit -m "fix(argocd): test-contour — project argocd NS, repoURL Git VM IP"
# push в Gitea (см. scripts в k8s/)

# 2. Применить проект и test-contour на Edge
export KUBECONFIG=~/.kube/config-k8s-edge
LOCAL_NONPROD=1 GITEA_REPO_URL=http://192.168.252.4:30300 \
  LOKI_PUSH_URL=http://<MGMT_IP>:3100/loki/api/v1/push \
  ./scripts/bootstrap-argocd-multicluster.sh ~/.kube/config-k8s-app-test

# 3. Синхронизация
argocd app sync test-contour --force
```

---


## Связанные документы

- [Запуск 4 VM](./local-nonprod)
- [Доступы](./access)
- [ArgoCD в test-контуре (k3s)](../test-contour/guides/argocd)
- [ArgoCD: sova-root и data-test](../test-contour/argocd-apps)
