Kubernetes 无法为 pod 挂载卷

Kubernetes Unable to mount volumes for pod

我正在尝试设置一个卷以在 k8s 上与 Mongo 一起使用。

我使用 kubectl create -f pv.yaml 创建卷。

pv.yaml:

kind: PersistentVolume
apiVersion: v1
metadata:
  name: pvvolume
  labels:
    type: local
spec:
  storageClassName: standard
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/nfs"
  claimRef:
    kind: PersistentVolumeClaim
    namespace: default
    name: pvvolume

然后我将 this StatefulSet 部署到此卷 pods 制作 PVC。

我的卷似乎已成功创建,我希望它只使用主机节点的存储。

当我尝试部署时出现以下错误:

Unable to mount volumes for pod "mongo-0_default(2735bc71-5201-11e8-804f-02dffec55fd2)": timeout expired waiting for volumes to attach/mount for pod "default"/"mongo-0". list of unattached/unmounted volumes=[mongo-persistent-storage]

在设置持久卷时是否遗漏了一个步骤?

持久卷只是 kubernetes 集群中某些存储可用性的声明。在此阶段没有与您的 pod 绑定。

由于您的 pod 是通过 StatefulSet 部署的,因此您的集群中应该有一个或多个 PersistentVolumeClaims,它们是将 pod 与 PersistentVolume 连接起来的对象。

为了手动将 PV 与 PVC 绑定,您需要通过在其规范部分添加以下内容来编辑 PVC:

volumeName: "<your persistent volume name>"

这里解释了这个过程是如何工作的:https://docs.openshift.org/latest/dev_guide/persistent_volumes.html#persistent-volumes-volumes-and-claim-prebinding

我的案例属于边缘案例,我怀疑您是否能达到。但是,我会描述它,因为它让我白发很多 - 也许它会拯救你。

尽管 PVPVC 被合并,但我还是发生了同样的错误。 Pod 一直处于 ContainerCreating 凝视中,但 kubectl get events 抛出此问题中提出的错误。

$ kubectl get pv
NAME        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                     STORAGECLASS   REASON   AGE
sewage-db   5Ti        RWO            Retain           Bound    global-sewage/sewage-db   nfs                     3h40m

$kubectl get pvc -n global-sewage 
NAME        STATUS   VOLUME      CAPACITY   ACCESS MODES   STORAGECLASS   AGE
sewage-db   Bound    sewage-db   5Ti        RWO            nfs            3h39m

重启服务器后发现,其中一个 32GiB RAM 物理内存已损坏。卸下内存解决了这个问题。