Kubernetes-pod已解除立即PersistentVolumeClaims的绑定

Kubernetes-pod已解除立即PersistentVolumeClaims的绑定,kubernetes,kubernetes-pod,kubernetes-statefulset,Kubernetes,Kubernetes Pod,Kubernetes Statefulset,我使用的是mysql Kubernetes statefulset,我将PVs映射到主机目录(CentOS 8 VM),但得到的结果是“pod已解除立即PersistentVolumeClaims的绑定” 存储类为defaulr,PV中无事件 apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: localstorage provisioner: kubernetes.io/no-provisioner volu

我使用的是mysql Kubernetes statefulset,我将PVs映射到主机目录(CentOS 8 VM),但得到的结果是“pod已解除立即PersistentVolumeClaims的绑定”

存储类为defaulr,PV中无事件

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:

  name: localstorage

provisioner: kubernetes.io/no-provisioner
volumeBindingMode: Immediate
reclaimPolicy: Delete
allowVolumeExpansion: True


kind: PersistentVolume
apiVersion: v1
metadata:
  name: mysql-01
  labels:
    type: local
spec:
  storageClassName: localstorage
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/mysql01"

---
kind: PersistentVolume
apiVersion: v1
metadata:
  name: mysql-02
  labels:
    type: local
spec:
  storageClassName: localstorage
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/mysql02"
存储类是默认的

get sc
NAME                     PROVISIONER                    RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
localstorage (default)   kubernetes.io/no-provisioner   Delete          Immediate           true                   35m
PVC也不显示任何事件:

    Name:          data-mysql-0
    Namespace:     default
    StorageClass:  localstorage
    Status:        Pending
    Volume:        mysql-storage
    Labels:        app=mysql
    Annotations:   <none>
    Finalizers:    [kubernetes.io/pvc-protection]
    Capacity:      0
    Access Modes:
    VolumeMode:    Filesystem
    Mounted By:    mysql-0
    Events:        <none>


Name:            mysql-01
Labels:          type=local
Annotations:     kubectl.kubernetes.io/last-applied-configuration:
                   {"apiVersion":"v1","kind":"PersistentVolume","metadata":{"annotations":{},"labels":{"type":"local"},"name":"mysql-01"},"spec":{"accessMode...
Finalizers:      [kubernetes.io/pv-protection]
StorageClass:    localstorage
Status:          Available
Claim:
Reclaim Policy:  Retain
Access Modes:    RWO
VolumeMode:      Filesystem
Capacity:        10Gi
Node Affinity:   <none>
Message:
Source:
    Type:          HostPath (bare host directory volume)
    Path:          /mnt/mysql01
    HostPathType:
Events:            <none>


Name:            mysql-02
Labels:          type=local
Annotations:     kubectl.kubernetes.io/last-applied-configuration:
                   {"apiVersion":"v1","kind":"PersistentVolume","metadata":{"annotations":{},"labels":{"type":"local"},"name":"mysql-02"},"spec":{"accessMode...
Finalizers:      [kubernetes.io/pv-protection]
StorageClass:    localstorage
Status:          Available
Claim:
Reclaim Policy:  Retain
Access Modes:    RWO
VolumeMode:      Filesystem
Capacity:        10Gi
Node Affinity:   <none>
Message:
Source:
    Type:          HostPath (bare host directory volume)
    Path:          /mnt/mysql02
    HostPathType:
Events:            <none>
有人能指出这里还应该做些什么吗,谢谢


如果不存在匹配的
PersistentVolume
将无限期地解除绑定。
PersistentVolume
accessModes
capacity
匹配。在这种情况下,
容量
PV为
10Gi
,而PVC的
容量
3Gi


PV中的
容量
需要与索赔中的相同,即
3Gi
来修复
未绑定立即持久卷目标
问题。

所述错误可能是由于多种原因造成的-下面是我遇到的几个选项


示例1

persistentvolume controller
未能找到容量大小等于或大于
PVC
中指定值的
PV

因此,如果我们举这个例子:

  # PVC
  resources:
     requests:
       storage: 3Gi


  # PV
  capacity:
    storage: 10Gi 
所以:
如果
PV容量>=PVC容量
则PVC应绑定到PV

如果没有,那么在描述PVC时,我们将在pod级别得到
未绑定立即PersistentVolumeClaims
错误和
没有卷插件匹配名称


示例2

PVC的数量高于PV。

例如,如果只创建了一个PV(或删除了其他PV):

我们可以看到一些工作负载(POD或有状态集)将被挂起:

$ kubectl get pods
NAME      READY   STATUS    RESTARTS   AGE
mongo-0   2/2     Running   0          3m38s
mongo-1   0/2     Pending   0          3m23s

$ kubectl get pvc
NAME                               STATUS    VOLUME           CAPACITY   ACCESS MODES   STORAGECLASS    AGE
mongo-persistent-storage-mongo-0   Bound     mongo-local-pv   50Gi       RWO            local-storage   80m
mongo-persistent-storage-mongo-1   Pending                                              local-storage   45m
我们将获得挂起资源上提到的错误


示例3

如果计划程序无法将节点与PV匹配

使用本地卷时需要PV
nodeAffinity
,并且应该是群集中现有节点的值:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-mongo-pv
  .
  .
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - node-which-doesnt-exists  # <----- Will lead to the error
apiVersion:v1 种类:PersistentVolume 元数据: 名称:本地mongo光伏 . . 节点相关性: 必修的: nodeSelectorTerms: -匹配表达式: -关键字:kubernetes.io/hostname 接线员:在 价值观: -不存在的节点#
$ kubectl get pv
NAME             CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                      STORAGECLASS    REASON   AGE
mongo-local-pv   50Gi       RWO            Retain           Bound    default/mongo-persistent-storage-mongo-0   local-storage            106m
$ kubectl get pods
NAME      READY   STATUS    RESTARTS   AGE
mongo-0   2/2     Running   0          3m38s
mongo-1   0/2     Pending   0          3m23s

$ kubectl get pvc
NAME                               STATUS    VOLUME           CAPACITY   ACCESS MODES   STORAGECLASS    AGE
mongo-persistent-storage-mongo-0   Bound     mongo-local-pv   50Gi       RWO            local-storage   80m
mongo-persistent-storage-mongo-1   Pending                                              local-storage   45m
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-mongo-pv
  .
  .
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - node-which-doesnt-exists  # <----- Will lead to the error