2.4 KiB
2.4 KiB
PostgreSQL 16 K3s 部署配置
文件说明
namespace.yaml- 创建 infrastructure 命名空间secret.yaml- 存储 PostgreSQL 密码等敏感信息configmap.yaml- 存储初始化脚本(创建用户和 300 个数据库)pvc.yaml- 持久化存储声明(20Gi)deployment.yaml- PostgreSQL 16 部署配置service.yaml- 服务暴露(ClusterIP + NodePort)
部署步骤
1. 部署所有资源
kubectl apply -f namespace.yaml
kubectl apply -f secret.yaml
kubectl apply -f configmap.yaml
kubectl apply -f pvc.yaml
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
或者一次性部署:
kubectl apply -f .
2. 查看部署状态
# 查看 Pod 状态
kubectl get pods -n infrastructure
# 查看 Pod 日志
kubectl logs -n infrastructure -l app=pg16 -f
# 查看服务
kubectl get svc -n infrastructure
3. 访问数据库
集群内访问:
# 使用 ClusterIP 服务
psql -h pg16.infrastructure.svc.cluster.local -U postgres -p 5432
集群外访问:
# 使用 NodePort(端口 30432)
psql -h <节点IP> -U postgres -p 30432
使用 kubectl port-forward:
kubectl port-forward -n infrastructure svc/pg16 5432:5432
psql -h localhost -U postgres -p 5432
配置说明
存储
- 使用 k3s 默认的
local-pathStorageClass - 默认申请 20Gi 存储空间
- 数据存储在
/var/lib/postgresql/data/pgdata
资源限制
- 请求:512Mi 内存,0.5 核 CPU
- 限制:2Gi 内存,2 核 CPU
初始化
- 自动创建超级用户
fei - 自动创建 300 个数据库(pg001 到 pg300)
服务暴露
- ClusterIP 服务:集群内部访问,服务名
pg16 - NodePort 服务:集群外部访问,端口
30432
数据迁移
从现有 Docker 数据迁移
如果你有现有的 pgdata 数据,可以:
- 先部署不带数据的 PostgreSQL
- 停止 Pod
- 将数据复制到 PVC 对应的主机路径
- 重启 Pod
# 查找 PVC 对应的主机路径
kubectl get pv
# 停止 Pod
kubectl scale deployment pg16 -n infrastructure --replicas=0
# 复制数据到主机路径(通常在 /var/lib/rancher/k3s/storage/)
# 然后重启
kubectl scale deployment pg16 -n infrastructure --replicas=1
卸载
kubectl delete -f .
注意:删除 PVC 会删除所有数据,请谨慎操作。