Henry
发布于 2025-03-09 / 10 阅读
0
0

PostgreSQL - Kubernetes 部署 pgvector 向量数据库

背景简介

部署携带pgvector向量数据库插件的PostgreSQL数据库,增添向量相似度搜索能力,实现高效的数据检索和分析。通过扩展数据库功能,pgvector助力构建智能推荐系统、文本搜索等应用,提升数据处理性能,适用于机器学习和数据科学领域。

环境信息

  1. Kubernetes 已安装 【Kubernetes - 安装

详细步骤

第一步: 准备 PostgreSQL 密码 pgvector-secret.yaml 配置文件

  • 获取 base64 加密后的密码
$ echo -n 'postgres' | base64
cG9zdGdyZXM=
  • 配置 secret
# postgres-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: postgres-secret
type: Opaque
data:
  # 使用base64编码存储用户名和密码
  POSTGRES_USER: cG9zdGdyZXM= # base64编码的"postgres"
  POSTGRES_PASSWORD: cHJvZ3Jlc3N1c2Vy # base64编码的"password"
  • 创建 secret
# kubectl apply -f postgres-secret.yaml -n demo
secret/postgres-secret created

第二步: 创建一个ConfigMap来存储环境变量

  • 创建 postgres-configmap.yaml 配置文件
apiVersion: v1
kind: ConfigMap
metadata:
  name: postgres-configmap
data:
  POSTGRES_DB: postgres
  • 创建 ConfigMap
# kubectl apply -f postgres-configmap.yaml  -n demo
configmap/postgres-configmap created

第三步: 配置数据持久化 【Kubernetes - 配置 NFS 数据持久化

第四步: 部署 postgres

  • 创建 postgres-deployment.yaml 配置文件
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
      - name: postgres
        image: postgres:latest
        env:
          # 从ConfigMap和Secret中获取环境变量
          - name: POSTGRES_USER
            valueFrom:
              secretKeyRef:
                name: postgres-secret
                key: POSTGRES_USER
          - name: POSTGRES_PASSWORD
            valueFrom:
              secretKeyRef:
                name: postgres-secret
                key: POSTGRES_PASSWORD
          - name: POSTGRES_DB
            valueFrom:
              configMapKeyRef:
                name: postgres-configmap
                key: POSTGRES_DB
        ports:
        - containerPort: 5432
        volumeMounts:
        - name: postgres-storage
          mountPath: /var/lib/postgresql/data
      volumes:
      - name: postgres-storage
        persistentVolumeClaim:
          claimName: postgres-pvc
  • 创建 deployment
# kubectl apply -f postgres-deployment.yaml -n demo
deployment.apps/postgres-deployment created

第五步: 部署 Service 【Kubernetes - Service

  • 创建 postgres-service.yaml 配置文件
apiVersion: v1
kind: Service
metadata:
  name: postgres-svc
  labels:
    app: postgres
spec:
  type: NodePort
  ports:
    - port: 5432
      nodePort: 31925  # 可选,如果不指定,Kubernetes会随机选择一个可用端口
  selector:
    app: postgres
  • 创建 svc
# kubectl apply -f postgres-svc.yaml -n demo
service/postgres-svc created

第六步: 查看完整部署

# kubectl get pod,pv,pvc,svc -n demo
NAME                                       READY   STATUS    RESTARTS   AGE
pod/postgres-deployment-5bf5898dcd-cdk5z   1/1     Running   0          76m

NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                                        STORAGECLASS                 VOLUMEATTRIBUTESCLASS   REASON   AGE
persistentvolume/demo-postgres-data-pv                      100Gi      RWO            Retain           Bound    demo/demo-postgres-data-pvc                                  sdd-k8snfs                   <unset>                          82m

NAME                                           STATUS   VOLUME                  CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
persistentvolumeclaim/demo-postgres-data-pvc   Bound    demo-postgres-data-pv   100Gi      RWO            sdd-k8snfs     <unset>                 81m

NAME                   TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)          AGE
service/postgres-svc   NodePort   10.97.13.60   <none>        5432:31925/TCP   43s
  • 查看数据库log
# kubectl logs -f postgres-deployment-5bf5898dcd-cdk5z -n demo --tail 10
PostgreSQL init process complete; ready for start up.

2025-03-06 07:16:28.485 UTC [1] LOG:  starting PostgreSQL 17.0 (Debian 17.0-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
2025-03-06 07:16:28.485 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2025-03-06 07:16:28.485 UTC [1] LOG:  listening on IPv6 address "::", port 5432
2025-03-06 07:16:28.530 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2025-03-06 07:16:28.743 UTC [63] LOG:  database system was shut down at 2025-03-06 07:16:28 UTC
2025-03-06 07:16:28.882 UTC [1] LOG:  database system is ready to accept connections

以上便是本文的全部内容,感谢您的阅读,如遇到任何问题,欢迎在评论区留言讨论。



评论