Kubernetes-pod已解除立即PersistentVolumeClaims的绑定
我使用的是mysql Kubernetes statefulset,我将PVs映射到主机目录(CentOS 8 VM),但得到的结果是“pod已解除立即PersistentVolumeClaims的绑定” 存储类为defaulr,PV中无事件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
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