【问题标题】:Local persistent Volume 1 node(s) didn't find available persistent volumes to bind本地持久卷 1 节点未找到要绑定的可用持久卷
【发布时间】:2022-04-28 16:27:56
【问题描述】:

我开始使用持久卷和 k8s。我试图在安装了 minikube 的 RH7 盒子上使用本地文件夹。我得到了错误:

0/1 nodes are available: 1 node(s) didn't find available persistent volumes to bind.

StorageClass.yaml

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

PersistentVolume.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: example-local-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage
  local:
    path: /usr/local/docker/vol1
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - my-node

PersistentVolumeClaim.yaml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: example-local-claim
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 1Gi

Nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
    name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
      name: nginx-deployment
  template:
    metadata:
      labels:
        app: nginx
        name: nginx-deployment
    spec:
      containers:
      - name: nginx-deployment
        image: nginx
        ports:
        - containerPort: 80
        volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: storage
      volumes:
        - name: storage
          persistentVolumeClaim:
            claimName: example-local-claim

[root@localhost docker]# kubectl get pv

NAME               CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS    REASON   AGE
example-local-pv   1Gi        RWO            Retain           Available           local-storage            76s

[root@localhost docker]# kubectl get pvc

NAME                  STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS    AGE
example-local-claim   Pending                                      local-storage   75s

【问题讨论】:

    标签: kubernetes persistent-volumes


    【解决方案1】:

    问题在于您的持久卷,您的持久卷具有以下节点选择器:

    nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - my-node
    

    您的 PV 试图在名称为 my-node 的节点上绑定的位置,由于没有具有该名称的节点,因此无法找到该节点。请使用以下命令检查您的节点名称:

    kubectl get nodes

    并将节点名称放在my-node的位置,它会起作用。希望这会有所帮助。

    【讨论】:

    • 太糟糕了,持久卷处于“可用”状态,而其配置不正确
    【解决方案2】:

    如果您在 Windows 上使用 docker-desktop,请尝试以下操作:

    1. 在wsl中创建目录:
    docker run --rm -it -v /:/k8s alpine mkdir /k8s/mnt/k8s
    
    1. 创建 storageclass、vol、vol 声明、pod:
    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: local-storage
    provisioner: kubernetes.io/no-provisioner
    volumeBindingMode: WaitForFirstConsumer
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: local-storage
    spec:
      capacity:
        storage: 50000Gi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      storageClassName: local-storage
      local:
        path: /mnt/k8s
      nodeAffinity:
        required:
          nodeSelectorTerms:
            - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                    - docker-desktop
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: postgredb
      namespace: xxx
    spec:
      storageClassName: local-storage
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 100Gi
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      labels:
        app: postgres
      name: postgres
      namespace: xxx
    spec:
      serviceName: postgres
      selector:
        matchLabels:
          app: postgres
      template:
        metadata:
          labels:
            app: postgres
        spec:
          containers:
            - name: postgres
              image: postgres:14-alpine
              volumeMounts:
                - mountPath: /var/lib/postgresql/data
                  name: postgredb
          volumes:
            - name: postgredb
              persistentVolumeClaim:
                claimName: postgredb
    

    【讨论】:

      猜你喜欢
      • 2019-05-26
      • 1970-01-01
      • 2017-06-05
      • 1970-01-01
      • 2020-11-08
      • 1970-01-01
      • 2021-05-08
      • 2016-08-06
      • 1970-01-01
      相关资源
      最近更新 更多