将数据库部署到Kubernetes集群时遇PVC相关静默失败问题
问题排查与修复方案
1. 修复PVC的API版本错误
你的PVC定义里重复写了apiVersion,而且第一个apiVersion: apps/v1完全错误——PersistentVolumeClaim属于Kubernetes核心API组,正确的apiVersion只有v1,删掉第一行错误的apiVersion即可。
修正后的PVC代码:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: timescale-pvc-1 namespace: my-namespace spec: accessModes: - ReadWriteOnce resources: requests: storage: 100Gi storageClassName: standard
2. 对齐Deployment与PVC的命名空间
你的Deployment没指定namespace,默认会部署到default命名空间,但PVC在my-namespace里,Kubernetes不允许跨命名空间引用PVC。给Deployment的metadata加上命名空间配置:
metadata: name: timescale namespace: my-namespace
3. 给容器挂载存储卷
当前Deployment只定义了volume,但没把它挂载到容器内PostgreSQL的默认数据目录/var/lib/postgresql/data,就算部署成功,数据库也没法用PVC存数据。在容器配置里添加volumeMounts:
containers: - name: timescale image: timescale/timescaledb:2.3.0-pg11 imagePullPolicy: IfNotPresent ports: - containerPort: 5432 env: - name: POSTGRES_PASSWORD value: "password" - name: POSTGRES_DB value: "metrics" volumeMounts: - name: timescaledb-pv mountPath: /var/lib/postgresql/data
4. 验证部署状态
部署修正后的yaml后,用以下命令确认状态:
- 检查PVC是否绑定成功:
kubectl get pvc -n my-namespace,状态应为Bound - 检查Deployment就绪状态:
kubectl get deploy -n my-namespace,READY列需显示1/1 - 若仍有问题,查看Pod日志排查:
kubectl logs <pod-name> -n my-namespace
内容的提问来源于stack exchange,提问作者RagePwn
相关产品推荐
相关产品推荐

