Add self-contained API simulators lab with Compose and Helm.
Ship Proxmox, oVirt, VMware, and OpenStack behind one Postgres stack, Makefile helpers (up/clean/helm up|down/push), and a Helm chart with namespace, Let's Encrypt ingresses, migrate inits, and skip-if-seeded jobs.
This commit is contained in:
+163
@@ -0,0 +1,163 @@
|
||||
**Language / Язык:** [English](README.md) | [Русский](README.ru.md)
|
||||
|
||||
# Лаборатория API-симуляторов (автономная)
|
||||
|
||||
Четыре опубликованных симулятора и один PostgreSQL. Исходники репозиториев не нужны.
|
||||
Локально — Docker Compose; в Kubernetes — Helm-чарт.
|
||||
|
||||
## Структура
|
||||
|
||||
```
|
||||
simulators/
|
||||
Makefile
|
||||
docker-compose.yml
|
||||
docker/
|
||||
postgres-init/01-simulators.sql
|
||||
tls/server.{crt,key} # общие lab TLS для Compose gateway
|
||||
ovirt/ovirt-engine.conf
|
||||
vmware/vmware-ports.conf
|
||||
openstack/openstack-ports.conf
|
||||
charts/api-simulators-lab/ # Helm: все четыре симулятора + Ingress
|
||||
```
|
||||
|
||||
Образы: `inecs/proxmox-api-simulator`, `inecs/ovirt-api-simulator`,
|
||||
`inecs/vmware-api-simulator`, `inecs/openstack-api-simulator`.
|
||||
|
||||
---
|
||||
|
||||
## Docker Compose
|
||||
|
||||
Данные Postgres — в Compose volume `postgres-data`.
|
||||
|
||||
```bash
|
||||
cd /Users/inecs/Разработка/simulators
|
||||
make help
|
||||
make up # pull → migrate → apps → seed; печатает URL
|
||||
make urls # снова вывести Compose-эндпоинты
|
||||
make logs # или: make logs SERVICE=proxmox
|
||||
make restart
|
||||
make down # остановить контейнеры, volume БД сохранить
|
||||
make clean # остановить + удалить volumes, мусор и сети проекта
|
||||
make shell # или: make shell SERVICE=ovirt
|
||||
make push # git add . → многострочный commit (Ctrl-D) → push origin
|
||||
```
|
||||
|
||||
`make up` гоняет migrate/seed через `docker compose run --rm` (profile `init`),
|
||||
поэтому эти контейнеры не остаются в статусе `Exited`.
|
||||
|
||||
Эквивалент через Compose:
|
||||
|
||||
```bash
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
При первом старте БД создаются из `docker/postgres-init` (только на пустом
|
||||
volume `postgres-data`). Seed выполняется один раз после готовности каждого симулятора.
|
||||
|
||||
Закрепить тег образа:
|
||||
|
||||
```bash
|
||||
IMAGE_TAG=0.1.0 docker compose up -d
|
||||
# или: IMAGE_TAG=0.1.0 make up
|
||||
```
|
||||
|
||||
### Compose-эндпоинты
|
||||
|
||||
| Симулятор | URL |
|
||||
|---|---|
|
||||
| Proxmox | http://localhost:8006/ |
|
||||
| oVirt Engine | https://localhost:7443/ |
|
||||
| oVirt Web UI | http://localhost:7500/ |
|
||||
| VMware (HTTPS) | https://localhost:8443/ |
|
||||
| VMware (HTTP) | http://localhost:8081/ |
|
||||
| OpenStack Keystone | http://localhost:9500/ |
|
||||
| OpenStack Nova | http://localhost:8774/ |
|
||||
| OpenStack HTTPS | https://localhost:9443/ |
|
||||
| PostgreSQL | `127.0.0.1:5432` (пользователь `lab` / `lab`) |
|
||||
|
||||
### Сброс БД Compose
|
||||
|
||||
```bash
|
||||
make clean
|
||||
make up
|
||||
# или: docker compose down -v && docker compose up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Kubernetes (Helm)
|
||||
|
||||
Чарт: `charts/api-simulators-lab`.
|
||||
|
||||
Перед деплоем настройте: `charts/api-simulators-lab/values.yaml`
|
||||
|
||||
| Ключ | Назначение |
|
||||
|---|---|
|
||||
| `namespace` | Целевой namespace (`simulators` по умолчанию; `namespaceCreate: true`) |
|
||||
| `ingresses` | Хосты, TLS secrets, annotations (по одному Ingress на запись) |
|
||||
| `certManager` | Let's Encrypt через cert-manager (`letsencrypt-prod`) |
|
||||
| `imageTag` / секреты / `postgres.persistence` | Образы, ключи, PVC |
|
||||
|
||||
Хосты Ingress по умолчанию (для Let's Encrypt замените на публичный DNS):
|
||||
|
||||
| Симулятор | Host |
|
||||
|---|---|
|
||||
| Proxmox | https://proxmox.lab.local/ |
|
||||
| oVirt | https://ovirt.lab.local/ |
|
||||
| VMware | https://vmware.lab.local/ |
|
||||
| OpenStack | https://openstack.lab.local/ |
|
||||
|
||||
```bash
|
||||
make helm up # предупреждение → подтверждение [y/N] → helm upgrade --install
|
||||
make helm down # uninstall релиза
|
||||
make helm-urls # хосты Ingress из values
|
||||
make helm-template
|
||||
make helm-lint
|
||||
```
|
||||
|
||||
Без подтверждения (CI): `make helm-up HELM_YES=1`
|
||||
|
||||
Сменить namespace без правки файла: `HELM_NAMESPACE=other make helm-up`
|
||||
|
||||
Эквивалент Helm:
|
||||
|
||||
```bash
|
||||
helm upgrade --install simulators charts/api-simulators-lab \
|
||||
--namespace simulators --create-namespace --wait
|
||||
```
|
||||
|
||||
### Как стартует чарт
|
||||
|
||||
1. **Namespace** — создаётся из `values.namespace`, если `namespaceCreate: true`.
|
||||
2. **PostgreSQL** — StatefulSet + init SQL на четыре БД симуляторов.
|
||||
3. **Симуляторы** — Deployments с init-контейнерами:
|
||||
- `wait-postgres` → `migrate` (идемпотентно; ничего не делает, если схема уже актуальна).
|
||||
4. **Seed** — Jobs post-install / post-upgrade на каждый симулятор.
|
||||
- Job ждёт ready приложения, затем сидирует.
|
||||
- `seed.skipIfSql` пропускает seed, если в БД уже есть лабораторные данные.
|
||||
5. **Ingress** — TLS через аннотацию cert-manager `cert-manager.io/cluster-issuer`.
|
||||
- `certManager.createClusterIssuer: true` и `certManager.email` — создать
|
||||
ClusterIssuer из чарта; иначе ожидается уже существующий `letsencrypt-prod`.
|
||||
- Let's Encrypt HTTP-01 требует **публичный DNS** на Ingress-контроллер
|
||||
(не `*.lab.local`).
|
||||
|
||||
---
|
||||
|
||||
## Git
|
||||
|
||||
`origin` пушит в оба remote (как у остальных симуляторов):
|
||||
|
||||
- `git@github.com:sergeyantropoff/simulators.git`
|
||||
- `ssh://git@git.antropoff.ru:30022/DevOpsTools/Simulators.git`
|
||||
|
||||
```bash
|
||||
make push # stage all → многострочное сообщение (конец — Ctrl-D) → push origin
|
||||
```
|
||||
|
||||
Тот же UX, что в `proxmox_api_simulator`.
|
||||
|
||||
---
|
||||
|
||||
Только лабораторные defaults — не выставляйте стек в публичный Интернет без смены
|
||||
секретов (`ticketSigningKey`, пароли БД, хосты Ingress).
|
||||
Reference in New Issue
Block a user