Оригинал: CNPG Recipe 18 — Getting Started with pgvector on Kubernetes Using CloudNativePG — 5 июня 2025.
pgvector — одно из самых популярных расширений PostgreSQL последних лет, особенно в контексте AI/ML. Оно добавляет нативный тип данных «вектор» для similarity search и хранения эмбеддингов. В этом рецепте — деплой PostgreSQL с pgvector на Kubernetes полностью декларативно через CloudNativePG.
Предусловия
- Локальный Kubernetes на kind (см. Рецепт 1).
- Свежая версия CloudNativePG.
Шаг 1. Описать кластер PostgreSQL
pgvector.yaml:
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: pgvector
spec:
instances: 1
storage:
size: 1GiПрименяем:
kubectl apply -f pgvector.yamlШаг 2. Проверить статус
kubectl cnpg status pgvectorШаг 3. Установить расширение pgvector
CloudNativePG поддерживает декларативное описание баз данных через ресурс Database, в котором можно указать список расширений. pgvector-db.yaml:
apiVersion: postgresql.cnpg.io/v1
kind: Database
metadata:
name: pgvector-app
spec:
name: app
owner: app
cluster:
name: pgvector
extensions:
- name: vectorПрименяем:
kubectl apply -f pgvector-db.yamlСмотрим:
kubectl get database pgvector-app
kubectl describe database pgvector-appКонтроллер сам прозрачно выполнит CREATE EXTENSION — а при изменении / удалении ресурса дёргает соответствующие ALTER EXTENSION / DROP EXTENSION.
Шаг 4. Проверить установку
kubectl cnpg psql pgvector -- app -c '\dx'Ожидаемый вывод:
List of installed extensions
Name | Version | Schema | Description
---------+---------+------------+------------------------------------------------------
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
vector | 0.8.0 | public | vector data type and ivfflat and hnsw access methods
(2 rows)Итог
pgvector установлен и готов к использованию в БД app под управлением CloudNativePG. Это базовая основа для AI-нагрузок на Postgres в cloud-native окружении. Дальше — стандартный материал из официального “Getting Started”
самого pgvector.
💡 Параллельно идёт работа над тем, чтобы расширения подгружались отдельными OCI-образами через Kubernetes
ImageVolume, без необходимости пересобирать operand-образ Postgres. Подробнее — в статье «Иммутабельное будущее расширений».