Kubernetes CEPFS无法附加或装载卷:已卸载的卷=[映像存储]

Kubernetes CEPFS无法附加或装载卷:已卸载的卷=[映像存储],kubernetes,ceph,cephfs,rook-storage,kubernetes-rook,Kubernetes,Ceph,Cephfs,Rook Storage,Kubernetes Rook,我在CEPFS上设置Kube注册表并运行时遇到问题。我正在使用rook来设置这个集群。如您所见,我在连接卷时遇到问题。知道是什么导致了这个问题吗?感谢您的帮助 kube registry.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: cephfs-pvc namespace: kube-system spec: accessModes:

我在CEPFS上设置Kube注册表并运行时遇到问题。我正在使用rook来设置这个集群。如您所见,我在连接卷时遇到问题。知道是什么导致了这个问题吗?感谢您的帮助

kube registry.yaml

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: cephfs-pvc
      namespace: kube-system
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 1Gi
      storageClassName: rook-cephfs
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: kube-registry
      namespace: kube-system
      labels:
        k8s-app: kube-registry
        kubernetes.io/cluster-service: "true"
    spec:
      replicas: 3
      selector:
        matchLabels:
          k8s-app: kube-registry
      template:
        metadata:
          labels:
            k8s-app: kube-registry
            kubernetes.io/cluster-service: "true"
        spec:
          containers:
          - name: registry
            image: registry:2
            imagePullPolicy: Always
            resources:
              limits:
                cpu: 100m
                memory: 100Mi
            env:
            # Configuration reference: https://docs.docker.com/registry/configuration/
            - name: REGISTRY_HTTP_ADDR
              value: :5000
            - name: REGISTRY_HTTP_SECRET
              value: "Ple4seCh4ngeThisN0tAVerySecretV4lue"
            - name: REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY
              value: /var/lib/registry
            volumeMounts:
            - name: image-store
              mountPath: /var/lib/registry
            ports:
            - containerPort: 5000
              name: registry
              protocol: TCP
            livenessProbe:
              httpGet:
                path: /
                port: registry
            readinessProbe:
              httpGet:
                path: /
                port: registry
          volumes:
          - name: image-store
            persistentVolumeClaim:
              claimName: cephfs-pvc
              readOnly: false
        apiVersion: storage.k8s.io/v1
        kind: StorageClass
        metadata:
          name: rook-cephfs
        # Change "rook-ceph" provisioner prefix to match the operator namespace if needed
        provisioner: rook-ceph.cephfs.csi.ceph.com
        parameters:
          # clusterID is the namespace where operator is deployed.
          clusterID: rook-ceph
          # CephFS filesystem name into which the volume shall be created
          fsName: myfs
          # Ceph pool into which the volume shall be created
          # Required for provisionVolume: "true"
          pool: myfs-data0
          # Root path of an existing CephFS volume
          # Required for provisionVolume: "false"
          # rootPath: /absolute/path
          # The secrets contain Ceph admin credentials. These are generated automatically by the operator
          # in the same namespace as the cluster.
          csi.storage.k8s.io/provisioner-secret-name: rook-csi-cephfs-provisioner
          csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph
          csi.storage.k8s.io/node-stage-secret-name: rook-csi-cephfs-node
          csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph
        reclaimPolicy: Deletea
Storagelass.yaml

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: cephfs-pvc
      namespace: kube-system
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 1Gi
      storageClassName: rook-cephfs
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: kube-registry
      namespace: kube-system
      labels:
        k8s-app: kube-registry
        kubernetes.io/cluster-service: "true"
    spec:
      replicas: 3
      selector:
        matchLabels:
          k8s-app: kube-registry
      template:
        metadata:
          labels:
            k8s-app: kube-registry
            kubernetes.io/cluster-service: "true"
        spec:
          containers:
          - name: registry
            image: registry:2
            imagePullPolicy: Always
            resources:
              limits:
                cpu: 100m
                memory: 100Mi
            env:
            # Configuration reference: https://docs.docker.com/registry/configuration/
            - name: REGISTRY_HTTP_ADDR
              value: :5000
            - name: REGISTRY_HTTP_SECRET
              value: "Ple4seCh4ngeThisN0tAVerySecretV4lue"
            - name: REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY
              value: /var/lib/registry
            volumeMounts:
            - name: image-store
              mountPath: /var/lib/registry
            ports:
            - containerPort: 5000
              name: registry
              protocol: TCP
            livenessProbe:
              httpGet:
                path: /
                port: registry
            readinessProbe:
              httpGet:
                path: /
                port: registry
          volumes:
          - name: image-store
            persistentVolumeClaim:
              claimName: cephfs-pvc
              readOnly: false
        apiVersion: storage.k8s.io/v1
        kind: StorageClass
        metadata:
          name: rook-cephfs
        # Change "rook-ceph" provisioner prefix to match the operator namespace if needed
        provisioner: rook-ceph.cephfs.csi.ceph.com
        parameters:
          # clusterID is the namespace where operator is deployed.
          clusterID: rook-ceph
          # CephFS filesystem name into which the volume shall be created
          fsName: myfs
          # Ceph pool into which the volume shall be created
          # Required for provisionVolume: "true"
          pool: myfs-data0
          # Root path of an existing CephFS volume
          # Required for provisionVolume: "false"
          # rootPath: /absolute/path
          # The secrets contain Ceph admin credentials. These are generated automatically by the operator
          # in the same namespace as the cluster.
          csi.storage.k8s.io/provisioner-secret-name: rook-csi-cephfs-provisioner
          csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph
          csi.storage.k8s.io/node-stage-secret-name: rook-csi-cephfs-node
          csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph
        reclaimPolicy: Deletea
kubectl description pods--namespace=kube系统kube-registry-58659ff99b-j2b4d

        Name:           kube-registry-58659ff99b-j2b4d
        Namespace:      kube-system
        Priority:       0
        Node:           minikube/192.168.99.212
        Start Time:     Wed, 25 Nov 2020 13:19:35 -0500
        Labels:         k8s-app=kube-registry
                        kubernetes.io/cluster-service=true
                        pod-template-hash=58659ff99b
        Annotations:    <none>
        Status:         Pending
        IP:
        IPs:            <none>
        Controlled By:  ReplicaSet/kube-registry-58659ff99b
        Containers:
          registry:
            Container ID:
            Image:          registry:2
            Image ID:
            Port:           5000/TCP
            Host Port:      0/TCP
            State:          Waiting
              Reason:       ContainerCreating
            Ready:          False
            Restart Count:  0
            Limits:
              cpu:     100m
              memory:  100Mi
            Requests:
              cpu:      100m
              memory:   100Mi
            Liveness:   http-get http://:registry/ delay=0s timeout=1s period=10s #success=1 #failure=3
            Readiness:  http-get http://:registry/ delay=0s timeout=1s period=10s #success=1 #failure=3
            Environment:
              REGISTRY_HTTP_ADDR:                         :5000
              REGISTRY_HTTP_SECRET:                       Ple4seCh4ngeThisN0tAVerySecretV4lue
              REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY:  /var/lib/registry
            Mounts:
              /var/lib/registry from image-store (rw)
              /var/run/secrets/kubernetes.io/serviceaccount from default-token-nw4th (ro)
        Conditions:
          Type              Status
          Initialized       True
          Ready             False
          ContainersReady   False
          PodScheduled      True
        Volumes:
          image-store:
            Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
            ClaimName:  cephfs-pvc
            ReadOnly:   false
          default-token-nw4th:
            Type:        Secret (a volume populated by a Secret)
            SecretName:  default-token-nw4th
            Optional:    false
        QoS Class:       Guaranteed
        Node-Selectors:  <none>
        Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                         node.kubernetes.io/unreachable:NoExecute for 300s
        Events:
          Type     Reason              Age                 From                     Message
          ----     ------              ----                ----                     -------
          Warning  FailedScheduling    13m (x3 over 13m)   default-scheduler        running "VolumeBinding" filter plugin for pod "kube-registry-58659ff99b-j2b4d": pod has unbound immediate PersistentVolumeClaims
          Normal   Scheduled           13m                 default-scheduler        Successfully assigned kube-system/kube-registry-58659ff99b-j2b4d to minikube
          Warning  FailedMount         2m6s (x5 over 11m)  kubelet, minikube        Unable to attach or mount volumes: unmounted volumes=[image-store], unattached volumes=[image-store default-token-nw4th]: timed out waiting for the condition
          Warning  FailedAttachVolume  59s (x6 over 11m)   attachdetach-controller  AttachVolume.Attach failed for volume "pvc-6eeff481-eb0a-4269-84c7-e744c9d639d9" : attachdetachment timeout for volume 0001-0009-rook-c

在StorageClass的粘贴YAML中,您有:

reclaimPolicy: Deletea
这是一个粘贴问题吗?不管怎样,这很可能是导致您出现问题的原因

我的一些Ceph RBD卷正好遇到了这个问题,原因是我使用的StorageClass

reclaimPolicy: Delete
但是,
cephcsi
驱动程序没有配置为支持它(我认为它实际上也不支持它)

StorageClass

reclaimPolicy: Retain
修正了这个问题

要在群集上检查此问题,请运行以下操作:

$ kubectl get sc rook-cephfs -o yaml
并查找以
回收策略:

然后,查看StorageClass正在使用的
csidriver
。在您的例子中,它是
rookceph.cepfs.csi.ceph.com

$ kubectl get csidriver rook-ceph.cephfs.csi.ceph.com -o yaml
并在
volumeLifecycleModes

apiVersion: storage.k8s.io/v1beta1
kind: CSIDriver
metadata:
  creationTimestamp: "2020-11-16T22:18:55Z"
  name: rook-ceph.cephfs.csi.ceph.com
  resourceVersion: "29863971"
  selfLink: /apis/storage.k8s.io/v1beta1/csidrivers/rook-ceph.cephfs.csi.ceph.com
  uid: a9651d30-935d-4a7d-a7c9-53d5bc90c28c
spec:
  attachRequired: true
  podInfoOnMount: false
  volumeLifecycleModes:
  - Persistent
如果
volumeLifecycleModes
下的唯一条目是
Persistent
,则您的驱动程序未配置为支持
回收策略:删除

如果你看到

volumeLifecycleModes:
    - Persistent
    - Ephemeral

那么您的驱动程序应该支持回收策略:删除PVC的状态是什么?
ceph provisioner
ceph operator
pods中是否有日志?@MariuszK。PVC的状态是有界的,是的,ceph运算符中有日志,csi-CEPFSPlugin-provisioner-797b67c54b-tjnnp有日志。我运行了命令“kubectl logs-n rook ceph csi-cephsplugin-provisioner-797b67c54b-tjnnp csi provisioner”,以防您需要知道。您可以共享csi provisioner的日志吗?@MariuszK。我编辑了我的原始帖子,以获得日志。