7

我正在尝试设置一个卷以在 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

然后我部署这个有 pod 的 StatefulSet,它为这个卷制作 PVC。

我的卷似乎已经创建没有问题,我希望它只使用主机节点的存储。

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

无法为 pod“mongo-0_default(2735bc71-5201-11e8-804f-02dffec55fd2)”挂载卷:超时已过期,等待卷为 pod“default”/“mongo-0”附加/挂载。未附加/卸载卷列表=[mongo-persistent-storage]

是否错过了设置持久音量的步骤?

4

2 回答 2

7

持久卷只是 Kubernetes 集群内某些存储可用的声明。在这个阶段,你的 pod 没有绑定。

由于您的 pod 是通过 a 部署的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

于 2018-05-07T19:44:50.740 回答
3

我的案例是一个边缘案例,我怀疑你会达到它。但是,我会描述它,因为它花了我很多白发 - 也许它会拯救你的。

尽管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 物理内存之一已损坏。删除内存解决了这个问题。

于 2020-05-04T12:32:19.467 回答