通过kubectl的持久卷创建停留在Pending状态

Pau*_*aul 8 kubernetes

我试图创建pv和pvc资源,kuberctl create -f pv-definition.json但k8s没有取得任何进展,它只是Pending为它们报告状态.

查看kubectl get events并记录apicontroller,但我没有看到与pv或pvc创建消息相关的任何内容.我预先在gcloud上创建了磁盘,并且我已经验证了名称和磁盘大小是否匹配.

pv定义非常基础:

{
  "apiVersion": "v1",
  "kind": "PersistentVolume",
  "metadata": {
    "name": "test-0b-pv"
  },
  "spec": {
    "accessModes": [
      "ReadWriteOnce"
    ],
    "capacity": {
      "storage": "50Gi"
    },
    "gcePersistentDisk": {
      "fsType": "ext4",
      "pdName": "test-0b"
    },
    "persistentVolumeReclaimPolicy": "Retain"
  }
}
Run Code Online (Sandbox Code Playgroud)

有没有人有任何调试建议?我重新启动了k8s-master服务无济于事.

hyp*_*low 5

我有同样的问题,并通过storageClassName: value明确添加到PV和PVC来解决它.对于价值,我用过standard.

在这种情况下,问题可能是由DefaultStorageClass配置引起的.有关详细信息,请参阅:https://kubernetes.io/docs/concepts/storage/persistent-volumes/#class-1


Muh*_*man 5

上面的大多数答案从inconsistent or incorrect存储类的角度写了一个解决方案,特别是在没有提供的情况下,PersistentVolumeClaims但是我们在这里可能有不同的原因(如下所述)

问题陈述:

如果你已经删除PersistentVolumeClaim然后用相同的定义重新创建它,它将Pending永远存在,为什么?

解释:

  • 我们"persistentVolumeReclaimPolicy": "Retain"PersistentVolume(默认为保留策略)
  • 如果我们已删除PersistentVolumeClaim,则PersistentVolume仍然存在并考虑该卷released。但它尚不能用于其他人,claim因为前一个索赔人的数据仍保留在卷上。
  • 因此您需要通过以下步骤手动回收卷:

解决方案:

  1. 删除PersistentVolume(相关的底层存储资产/资源,如 EBS、GCE PD、Azure 磁盘等将不会被删除,仍然存在)
  2. 可选)相应地手动清理关联存储资产上的数据
  3. 可选)手动删除关联的存储资产(EBS、GCE PD、Azure 磁盘等)

注意,如果您仍然需要相同的数据,只需创建一个PersistentVolume具有相同存储资产定义的新数据,那么您应该可以PersistentVolumeClaim再次创建。

最后要提及Retain的不是 的唯一选项persistentVolumeReclaimPolicy,以下是您可能需要根据用例场景使用或尝试的其他一些选项:

回收:对卷执行基本清理(例如,rm -rf //*) - 使其再次可用于新的声明。只有NFSHostPath支持回收。

删除AWS EBS, GCE PD, Azure Disk, or OpenStack Cinder...etc删除卷等关联的存储资产

更多信息请查看kubernetes 文档