【问题标题】:pod has unbound immediate persistentvolumeclaims after deleting namespace删除命名空间后,pod 具有未绑定的立即持久性卷声明
【发布时间】:2019-11-01 11:57:54
【问题描述】:

我已在本地环境中为 Postgres pod 配置了持久性卷的静态配置。它第一次工作正常但是当我删除命名空间和 重新运行 pod,然后它的状态为挂起并给我错误 pod 有未绑定的立即持久性卷声明

我尝试从 Persistance Volume 声明中删除 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 能够运行

【问题讨论】:

  • 您使用的是哪个Cloud Provider
  • 我现在在本地运行
  • 您希望删除或保留 pv 中的数据?
  • 我想在集群中保留持久化卷。我希望我新创建的命名空间仍然指向以前的持久性卷
  • @UDITJOSHI 如果你想再次绑定你的 pv 你需要添加 persistentVolumeReclaimPolicy: Recycle 因为在默认开启 Retain 的情况下,不可能有另一个声明,查看更多关于 Reclaiming here

标签: kubernetes postgresql-9.3 persistent-storage


【解决方案1】:

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

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

【讨论】:

  • 你确定当我删除命名空间时我还需要重新创建 pv
  • 因为删除命名空间后 PV 仍然在我的系统中,所以当我再次使用相同名称重新创建命名空间时?为什么它不指向 pv 并进入挂起状态
【解决方案2】:

我通过使用 persistentVolumeReclaimPolicyrecycle 解决了这个问题。现在,即使在删除命名空间并重新创建后,我也可以反弹持久化卷

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"

【讨论】:

  • 你应该让社区成员为他们的答案赢得荣誉,这看起来与 cmets 中建议的解决方案相同。
猜你喜欢
  • 1970-01-01
  • 2018-07-02
  • 1970-01-01
  • 2016-10-10
  • 2019-11-12
  • 2020-11-08
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多