广告网站建设实训报告,网站开发建设需多少钱,国外做名片网站,广州网站建设企业除了《研发工程师玩转Kubernetes——PVC使用Label和storage选择PV》中介绍的使用Label做选择因子外#xff0c;PVC还可以通过storageClassName选择符合条件的PV。 StorageClass的设计是用于描述如何动态创建PV。最开始时#xff0c;管理员需要一次性申请好所有的PV#xff0…除了《研发工程师玩转Kubernetes——PVC使用Label和storage选择PV》中介绍的使用Label做选择因子外PVC还可以通过storageClassName选择符合条件的PV。 StorageClass的设计是用于描述如何动态创建PV。最开始时管理员需要一次性申请好所有的PV使用者只要设计PVC申请PV绑定即可。但是如果一旦PV不够用了管理员又要手工去申请PV来满足需求。为了降低管理员的工作StorageClass可以动态去创建PV即PVC发现PV不够后直接通过其指定的storageClassName来动态创建PV。 本文只介绍PVC如何使用storageClassName选择已经创建好的PV。
StorageClass清单
# local_storage_class_immediate.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: local-storage-class-immediate
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: Immediate我们创建了一个名字叫local-storage-class使用本地存储的StorageClass。它的绑定类型是Immediate立即。Immediate 模式表示一旦创建了 PersistentVolumeClaim 也就完成了卷绑定。
PV清单
这次我们创建的PV没有设置Label而是设置了storageClassName字段为上述StorageClass的名字。
# local_storage_class_immediate_pv_512k.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: local-storage-class-immediate-pv-512k
spec:capacity:storage: 512KivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: DeletestorageClassName: local-storage-class-immediatelocal:path: /tmpnodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- ubuntud# local_storage_class_immediate_pv_1024k.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: local-storage-class-immediate-pv-1024k
spec:capacity:storage: 1024KivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: DeletestorageClassName: local-storage-class-immediatelocal:path: /tmpnodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- ubuntudPVC清单
这个清单也没使用spec.selector对PV的Label做选择而是使用了storageClassName。
# local_storage_class_immediate_pvc_600k.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: local-storage-class-immediate-pvc-600k
spec:resources:requests:storage: 600KiaccessModes:- ReadWriteOncestorageClassName: local-storage-class-immediate测试
为了验证测试我们同时创建下面这个PV它只是在storage上满足上述PVC申请。
# default_storage_class_pv_1024k.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: default-storage-class-pv-1024klabels:volume: lb-default-storage-class-pv
spec:capacity:storage: 1MivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retainlocal:path: /tmpnodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- ubuntud
使用下面指令创建上述资源
kubectl create -f local_storage_class_immediate.yaml -f default_storage_class_pv_1024k.yaml -f local_storage_class_immediate_pv_1024k.yaml -f local_storage_class_immediate_pv_512k.yaml -f local_storage_class_immediate_pvc_600k.yaml 查看PVC的状态可以发现系统让storageClassName名相同的PV和PVC进行了绑定。
kubectl describe persistentvolumeclaims local-storage-class-immediate-pvc-600k Name: local-storage-class-immediate-pvc-600k
Namespace: default
StorageClass: local-storage-class-immediate
Status: Bound
Volume: local-storage-class-immediate-pv-1024k
Labels: none
Annotations: pv.kubernetes.io/bind-completed: yespv.kubernetes.io/bound-by-controller: yes
Finalizers: [kubernetes.io/pvc-protection]
Capacity: 1Mi
Access Modes: RWO
VolumeMode: Filesystem
Used By: none
Events: none为了进一步测试我们再创建相同配置但是名字不同的PVC看它是否会选择没有设置相同storageClassName的PV。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: local-storage-class-immediate-pvc-600k-1
spec:resources:requests:storage: 600KiaccessModes:- ReadWriteOncestorageClassName: local-storage-class-immediatekubectl describe persistentvolumeclaims local-storage-class-immediate-pvc-600k-1Name: local-storage-class-immediate-pvc-600k-1
Namespace: default
StorageClass: local-storage-class-immediate
Status: Pending
Volume:
Labels: none
Annotations: none
Finalizers: [kubernetes.io/pvc-protection]
Capacity:
Access Modes:
VolumeMode: Filesystem
Used By: none
Events:Type Reason Age From Message---- ------ ---- ---- -------Warning ProvisioningFailed 6s persistentvolume-controller no volume plugin matched name: kubernetes.io/no-provisioner可以看到即使storage满足PVC申请的大小但是由于storageClassName不同它还是没有选择default-storage-class-pv-1024k这个PV。
kubectl describe persistentvolume default-storage-class-pv-1024k Name: default-storage-class-pv-1024k
Labels: volumelb-default-storage-class-pv
Annotations: none
Finalizers: [kubernetes.io/pv-protection]
StorageClass:
Status: Available
Claim:
Reclaim Policy: Retain
Access Modes: RWO
VolumeMode: Filesystem
Capacity: 1Mi
Node Affinity: Required Terms: Term 0: kubernetes.io/hostname in [ubuntud]
Message:
Source:Type: LocalVolume (a persistent volume backed by local storage on a node)Path: /tmp
Events: none