diff --git a/README.md b/README.md index bc6cdc2..1cced60 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ * [Настройка доступа к панелям управления](kubernetes/k3s-setting-up-web-access-to-dashboard.md) Longhorn и Traefik * [Под с SmokePing](kubernetes/k3s_smokeping.md) для мониторинга доступности хостов * [PostgeSQL в K3s](kubernetes/k3s-postresql.md) +* [ChartDB в K3s](kubernetes/k3s-chartdb.md) — графический редактор схем баз данных ## Python * [Устранение проблем при установке Python-коннектора mysqlclient (MySQL/MariaDB)](python/python-mysql.md) diff --git a/images/k3s--chartdb-ui.png b/images/k3s--chartdb-ui.png new file mode 100644 index 0000000..f5ad2b2 Binary files /dev/null and b/images/k3s--chartdb-ui.png differ diff --git a/kubernetes/k3s-chartdb.md b/kubernetes/k3s-chartdb.md new file mode 100644 index 0000000..2b09dc1 --- /dev/null +++ b/kubernetes/k3s-chartdb.md @@ -0,0 +1,125 @@ +# Под с ChartDB + +ChatBD ([chartdb.io](https://chartdb.io/)) - это визуальный редактор структуры базы данных и инструмент проектирования +схем (ER-диаграмм), мини-конструктор для работы с локальной псевдо-БД. Все это доступно в веб-интерфейсе. Пока ChatBD +не позволяет подключаться к реальным базам данных, но в будущем планируется поддержка. Зато в нее можно импортировать +схемы рабочих баз данных из PostgreSQL, MySQL, MariaDB, SQLite, MSSQL, ClickHouse и CockroachDB. Так же поддерживается +экспорт из JSON и DBML. Импорт готовых схем возможен в любую из поддерживаемых СУБД (плюс JSON и DBML). + +Можно работать с таблицами, колонками, индексами, ключами... и здесь нет аутентификации, но при этом нельзя +одновременно работать нескольким пользователем в режиме "живой доски" (live board). Но самое печальное, в нем нет +никаких инструментов для создания запросов. + +_Из интересных фишек ChatDB -- к нему можно подключить LLM (через API OpenAI или локальный Ollama) и тогда он, +похоже, сможет генерировать SQL-запросы по текстовым описаниям. Но это я пока пока не проверил (ждите обновления этой +инструкции)._ + +Манифест для развертывания пода с ChartDB в k3s, который предоставляет веб-интерфейс по адресу `http://chartdb.local`: +```yaml +# ~/k3s/chartdb/chartdb.yaml +# Все манифесты для ChartDB + +# 1. Манифест создания пространства имён `chartdb`. Если оно уже есть — kubectl apply ничего не изменит +apiVersion: v1 +kind: Namespace +metadata: + name: chartdb + +--- +# 2. Манифест PVC (Longhorn) -- том в блочном хранилище, в котором будут храниться данные ChartDB. +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: chartdb-data + namespace: chartdb +spec: + accessModes: + - ReadWriteOnce + storageClassName: longhorn + resources: + requests: + storage: 720Mi + +--- +# 3. Deployment: развёртывание ChartDB +apiVersion: apps/v1 +kind: Deployment +metadata: + name: chartdb + namespace: chartdb +spec: + replicas: 1 + selector: + matchLabels: + app: chartdb + template: + metadata: + labels: + app: chartdb + spec: + containers: + - name: chartdb + image: ghcr.io/chartdb/chartdb:latest + ports: + - containerPort: 80 + env: + - name: TZ # Часовой пояс, который будет в поде + value: Europe/Moscow + resources: + requests: + memory: "128Mi" + cpu: "100m" + limits: + memory: "512Mi" + cpu: "500m" + volumeMounts: # Монтируем том: + - name: chartdb-storage # ... имя PVC-тома + mountPath: /data # ...путь внутри контейнера, куда будет смонтирован PVC-том + volumes: # Используемые том: + - name: chartdb-storage # ... c именем + persistentVolumeClaim: # ... PVC (Longhorn) + claimName: chartdb-data + +--- +# 4. Service: внутренний доступ к контейнеру ChartDB +apiVersion: v1 +kind: Service +metadata: + name: chartdb + namespace: chartdb +spec: + selector: + app: chartdb + ports: + - port: 80 + targetPort: 80 + type: ClusterIP + +--- +# 5. IngressRoute для Traefik (под твою конфигурацию) +# Это публикует ChartDB по адресу http://chartdb.local (заменить на свой домен) +apiVersion: traefik.io/v1alpha1 +kind: IngressRoute +metadata: + name: chartdb + namespace: chartdb +spec: + entryPoints: + - web # это должен быть один из entrypoints в Traefik (обычно "web" = порт 80) + routes: + - match: Host("chartdb.local") # доменное имя, по которому будет доступен сервис + kind: Rule + services: + - name: chartdb + port: 80 +``` + +Применим манифесты командой: +```shell +kubectl apply -f ~/k3s/chartdb/chartdb.yaml +``` + +После этого ChartDB будет доступен по адресу `http://chartdb.local`. и в нем можно будет создавать и редактировать +схемы, например: + +![k3s--chartdb-ui.png](../images/k3s--chartdb-ui.png)