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
我的案例属于边缘案例,我怀疑您是否能达到。但是,我会描述它,因为它让我白发很多 - 也许它会拯救你。
尽管 PV 和 PVC 被合并,但我还是发生了同样的错误。 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 物理内存已损坏。卸下内存解决了这个问题。
我正在尝试设置一个卷以在 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
我的案例属于边缘案例,我怀疑您是否能达到。但是,我会描述它,因为它让我白发很多 - 也许它会拯救你。
尽管 PV 和 PVC 被合并,但我还是发生了同样的错误。 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 物理内存已损坏。卸下内存解决了这个问题。