背景简介
部署携带pgvector向量数据库插件的PostgreSQL数据库,增添向量相似度搜索能力,实现高效的数据检索和分析。通过扩展数据库功能,pgvector助力构建智能推荐系统、文本搜索等应用,提升数据处理性能,适用于机器学习和数据科学领域。
环境信息
- 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
以上便是本文的全部内容,感谢您的阅读,如遇到任何问题,欢迎在评论区留言讨论。