在k8s volume.attachments中,节点字段是什么意思?

问题描述

我有以下Volume

Name:         pvc-c8a0c1ee-b9e6-11e9-9ffa-0cc47ab04738
Namespace:    rook-ceph-system
Labels:       <none>
Annotations:  <none>
API Version:  rook.io/v1alpha2
Attachments:
  Cluster Name:   rook-ceph
  Mount Dir:      /var/lib/kubelet/pods/72fd4f89-5110-49b7-8d88-87488b58695c/volumes/ceph.rook.io~rook-ceph-system/pvc-c8a0c1ee-b9e6-11e9-9ffa-0cc47ab04738
  Node:           node-6.xyz.com
  Pod Name:       dev-cockroachdb-0
  Pod Namespace:  x-namespace
  Read Only:      false
Kind:             Volume
Metadata:
  Creation Timestamp:  2020-08-12T17:13:51Z
  Generation:          6
  Resource Version:    638003207
  Self Link:           /apis/rook.io/v1alpha2/namespaces/rook-ceph-system/volumes/pvc-c8a0c1ee-b9e6-11e9-9ffa-0cc47ab04738
  UID:                 db0a9491-95fe-49cd-8160-89031847d636
Events:                <none>

对于吊舱dev-cockroachdb-0,出现以下错误

MountVolume.SetUp Failed for volume "pvc-c8a0c1ee-b9e6-11e9-9ffa-0cc47ab04738" : mount command Failed,status: Failure,reason: Rook: Mount volume Failed: Failed to attach volume pvc-c8a0c1ee-b9e6-11e9-9ffa-0cc47ab04738 for pod x-namespace/dev-cockroachdb-0. Volume is already attached by pod x-namespace/dev-cockroachdb-0. Status Pending

吊舱x-namespace/dev-cockroachdb-0当前已安排到node-5.xyz.com

因此,您可以看到Pod本身与VolumeAttachment位于不同的节点中。 node-6.xyz.comnode-5.xyz.com

问题:

  • Node中的Volume.Attachments是否指向Pod(连接了卷)所在的节点? (因此,如果将卷附加到节点NodeA上的容器上,则该卷附件的节点字段的值为NodeA
  • 是否可能由于无法正确分离某个节点上的卷而发生此错误

解决方法

您没有提及它,但看起来您有一个Rook量。也许是pvc克隆,像这样:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: rbd-pvc-clone
spec:
  storageClassName: rook-ceph-block
  dataSource:
    name: rbd-pvc
    kind: PersistentVolumeClaim
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

Volume.Attachments中的Node是否指向吊舱(连接了该吊舱)所在的节点? (因此,如果将卷附加到节点NodeA上的Pod,则该卷附件的node字段的值将为NodeA)

并非如此,您的Pod可能正在尝试从node-5.xyz.com开始,但是在您的情况下,该卷可以连接到另一个节点node-6.xyz.com

是否可能由于无法正确分离某个节点上的卷而发生此错误?

是的,如果您有另一个在node-6.xyz.com中运行且已终止且无法分离的吊舱,则可能会发生此错误。

请记住,上述所有情况都考虑到您的卷中有accessModes: ReadWriteOnce。看起来您正在将Ceph与Rook一起使用,在这种情况下,您还可以使用accessModes: ReadWriteMany,这实际上将允许您将卷附加到Kubernetes节点。

✌️