我已在本地环境中为Postgres Pod配置了持久性卷的静态配置。第一次工作正常,但是当我删除名称空间和 重新运行pod,然后其状态为待定,并给我错误 吊舱具有未绑定的即时持久卷声明
我试图从“持久性卷”声明中删除storageClassName,但不起作用 我还尝试将storeageclass从手动更改为块存储,但存在相同的问题
我的Yaml文件
apiVersion: v1
kind: PersistentVolume
metadata:
name: task-pv-volume
namespace: manhattan
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/opt/manhattan/current/pgdata"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: task-pv-claim
namespace: manhattan
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Pod
metadata:
name: postgres
namespace: manhattan
spec:
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: task-pv-claim
containers:
- name: dbr-postgres
image: postgres-custome
tty: true
volumeMounts:
- mountPath: "/var/lib/pgsql/9.3/data"
name: task-pv-storage
nodeSelector:
kubernetes.io/hostname: k8s-master
即使我删除命名空间并重新运行pod.yaml文件,我也希望pod能够运行
答案 0 :(得分:0)
数据将保留在kubernetes节点中,因为hostpath
使用节点文件系统来存储数据。问题是,如果您有多个节点,那么您的Pod可以在任何其他节点上启动。为了解决这个问题,您可以指定想要Pod启动的节点,也可以在kubernetes节点中实现nfs
或glusterfs
。这可能是导致您出现问题的原因。
我还能想到的另一件事是您的问题。当您删除namespace
时,其中的所有kubernetes资源也将被删除。没有简单的方法来恢复这些。这意味着您必须在新的命名空间中创建pv
,pvc
和pod
。
答案 1 :(得分:-1)
我通过使用 persistentVolumeReclaimPolicy 来回收解决了这个问题。现在,即使删除命名空间并重新创建持久性卷,我也可以反弹它
apiVersion: v1
kind: PersistentVolume
metadata:
name: task-pv-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
hostPath:
path: "/opt/manhattan/current/pgdata"