删除命名空间后,pod具有未绑定的立即持久卷声明

时间:2019-11-01 11:57:54

标签: kubernetes postgresql-9.3 persistent-storage

我已在本地环境中为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能够运行

2 个答案:

答案 0 :(得分:0)

数据将保留在kubernetes节点中,因为hostpath使用节点文件系统来存储数据。问题是,如果您有多个节点,那么您的Pod可以在任何其他节点上启动。为了解决这个问题,您可以指定想要Pod启动的节点,也可以在kubernetes节点中实现nfsglusterfs。这可能是导致您出现问题的原因。

我还能想到的另一件事是您的问题。当您删除namespace时,其中的所有kubernetes资源也将被删除。没有简单的方法来恢复这些。这意味着您必须在新的命名空间中创建pvpvcpod

答案 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"