无法附加或安装卷:等待条件超时

msr*_*mon 13 kubernetes

我的本地集群中的 Pod 之一无法启动,因为出现Unable to attach or mount volumes: unmounted volumes=[nats-data-volume], unattached volumes=[nats-data-volume nats-initdb-volume kube-api-access-5b5cz]: timed out waiting for the condition错误。

$ kubectl get pods
NAME                                        READY   STATUS              RESTARTS   AGE
deployment-nats-db-5f5f9fd6d5-wrcpk         0/1     ContainerCreating   0          19m
deployment-nats-server-57bbc76d44-tz5zj     1/1     Running             0          19m

$ kubectl describe pods deployment-nats-db-5f5f9fd6d5-wrcpk
Name:           deployment-nats-db-5f5f9fd6d5-wrcpk
Namespace:      default
Priority:       0
Node:           docker-desktop/192.168.65.4
Start Time:     Tue, 12 Oct 2021 21:42:23 +0600
Labels:         app=nats-db
                pod-template-hash=5f5f9fd6d5
                skaffold.dev/run-id=1f5421ae-6e0a-44d6-aa09-706a1d1aa011
Annotations:    <none>
Status:         Pending
IP:
IPs:            <none>
Controlled By:  ReplicaSet/deployment-nats-db-5f5f9fd6d5
Containers:
  nats-db:
    Container ID:
    Image:          postgres:latest
    Image ID:
    Port:           <none>
    Host Port:      <none>
    State:          Waiting
      Reason:       ContainerCreating
    Ready:          False
    Restart Count:  0
    Limits:
      cpu:     1
      memory:  256Mi
    Requests:
      cpu:     250m
      memory:  128Mi
    Environment Variables from:
      nats-db-secrets  Secret  Optional: false
    Environment:       <none>
    Mounts:
      /docker-entrypoint-initdb.d from nats-initdb-volume (rw)
      /var/lib/postgresql/data from nats-data-volume (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-5b5cz (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  nats-data-volume:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  nats-pvc
    ReadOnly:   false
  nats-initdb-volume:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  nats-pvc
    ReadOnly:   false
  kube-api-access-5b5cz:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   Burstable
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason       Age                 From               Message
  ----     ------       ----                ----               -------
  Normal   Scheduled    19m                 default-scheduler  Successfully assigned default/deployment-nats-db-5f5f9fd6d5-wrcpk to docker-desktop
  Warning  FailedMount  4m9s (x2 over 17m)  kubelet            Unable to attach or mount volumes: unmounted volumes=[nats-data-volume], unattached volumes=[nats-initdb-volume kube-api-access-5b5cz nats-data-volume]: timed out waiting for the condition
  Warning  FailedMount  112s (x6 over 15m)  kubelet            Unable to attach or mount volumes: unmounted volumes=[nats-data-volume], unattached volumes=[nats-data-volume nats-initdb-volume kube-api-access-5b5cz]: timed out waiting for the condition
Run Code Online (Sandbox Code Playgroud)

我不知道问题出在哪里。PV和PVC似乎都已成功应用。

$ kubectl get pv,pvc
NAME                            CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                   STORAGECLASS             REASON   AGE
persistentvolume/nats-pv        50Mi       RWO            Retain           Bound    default/nats-pvc        local-hostpath-storage            21m

NAME                                  STATUS   VOLUME         CAPACITY   ACCESS MODES   STORAGECLASS             AGE
persistentvolumeclaim/nats-pvc        Bound    nats-pv        50Mi       RWO            local-hostpath-storage   21m
Run Code Online (Sandbox Code Playgroud)

以下是 SC、PV 和 PVC 的配置:

$ kubectl get pods
NAME                                        READY   STATUS              RESTARTS   AGE
deployment-nats-db-5f5f9fd6d5-wrcpk         0/1     ContainerCreating   0          19m
deployment-nats-server-57bbc76d44-tz5zj     1/1     Running             0          19m

$ kubectl describe pods deployment-nats-db-5f5f9fd6d5-wrcpk
Name:           deployment-nats-db-5f5f9fd6d5-wrcpk
Namespace:      default
Priority:       0
Node:           docker-desktop/192.168.65.4
Start Time:     Tue, 12 Oct 2021 21:42:23 +0600
Labels:         app=nats-db
                pod-template-hash=5f5f9fd6d5
                skaffold.dev/run-id=1f5421ae-6e0a-44d6-aa09-706a1d1aa011
Annotations:    <none>
Status:         Pending
IP:
IPs:            <none>
Controlled By:  ReplicaSet/deployment-nats-db-5f5f9fd6d5
Containers:
  nats-db:
    Container ID:
    Image:          postgres:latest
    Image ID:
    Port:           <none>
    Host Port:      <none>
    State:          Waiting
      Reason:       ContainerCreating
    Ready:          False
    Restart Count:  0
    Limits:
      cpu:     1
      memory:  256Mi
    Requests:
      cpu:     250m
      memory:  128Mi
    Environment Variables from:
      nats-db-secrets  Secret  Optional: false
    Environment:       <none>
    Mounts:
      /docker-entrypoint-initdb.d from nats-initdb-volume (rw)
      /var/lib/postgresql/data from nats-data-volume (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-5b5cz (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  nats-data-volume:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  nats-pvc
    ReadOnly:   false
  nats-initdb-volume:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  nats-pvc
    ReadOnly:   false
  kube-api-access-5b5cz:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   Burstable
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason       Age                 From               Message
  ----     ------       ----                ----               -------
  Normal   Scheduled    19m                 default-scheduler  Successfully assigned default/deployment-nats-db-5f5f9fd6d5-wrcpk to docker-desktop
  Warning  FailedMount  4m9s (x2 over 17m)  kubelet            Unable to attach or mount volumes: unmounted volumes=[nats-data-volume], unattached volumes=[nats-initdb-volume kube-api-access-5b5cz nats-data-volume]: timed out waiting for the condition
  Warning  FailedMount  112s (x6 over 15m)  kubelet            Unable to attach or mount volumes: unmounted volumes=[nats-data-volume], unattached volumes=[nats-data-volume nats-initdb-volume kube-api-access-5b5cz]: timed out waiting for the condition
Run Code Online (Sandbox Code Playgroud)

如果我注释掉volumeMountsvolumes键,这个 Pod 将成功启动。这是专门针对这条/var/lib/postgresql/data道路的。就像如果我删除nats-data-volume并保留nats-initdb-volume,它就成功启动了。

谁能帮助我到底哪里错了?预先致谢并致以最诚挚的问候。

goh*_*m'c 12

...if I remove nats-data-volume and keep nats-initdb-volume, it's started successfully.

此 PVC 不能安装两次,即无法满足条件。

看看你的规范,你似乎不介意哪个工作节点将运行你的 postgress pod。在这种情况下,您不需要PV/PVC,您可以直接挂载hostPath,如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-nats-db
spec:
  selector:
    matchLabels:
      app: nats-db
  template:
    metadata:
      labels:
        app: nats-db
    spec:
      containers:
        - name: nats-db
          image: postgres:latest
          envFrom:
            - secretRef:
                name: nats-db-secrets
          volumeMounts:
            - name: nats-data-volume
              mountPath: /var/lib/postgresql/data
            - name: nats-data-volume
              mountPath: /docker-entrypoint-initdb.d
          resources:
            requests:
              cpu: 250m
              memory: 128Mi
            limits:
              cpu: 1000m
              memory: 256Mi
      volumes:
        - name: nats-data-volume
          hostPath:
            path: /mnt/wsl/nats-pv
            type: DirectoryOrCreate
Run Code Online (Sandbox Code Playgroud)