![](/img/trans.png)
[英]Kubernetes: What is the significance of "storage" field in a block Persistent Volume?
[英]kubernetes : create a Block storage persistent volume
我是 kubernetes 卷管理的新手。 我需要將塊 pvc 與以下 pod 一起使用:
apiVersion: v1
kind: Pod
metadata:
name: buggypod
spec:
containers:
- name: container
image: ubuntu
command: [ "bash" ]
volumeDevices:
- devicePath: /tmp
name: podpvc
################
restartPolicy: Never
terminationGracePeriodSeconds: 0
volumes:
- name: podpvc
persistentVolumeClaim:
claimName: kubepvc
我創建以下 pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: kubepvc
spec:
storageClassName: testvolume
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
volumeMode: Block
和光伏:
apiVersion: v1
kind: PersistentVolume
metadata:
name: kubepv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
storageClassName: testvolume
hostPath:
path: "/pvdata"
在我部署所有 pvc 待處理后:
$ kubectl describe pvc kubepvc
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning ProvisioningFailed 6s persistentvolume-controller storageclass.storage.k8s.io "testvolume" not found
當然 testvolume pv 存在:
kubectl get pods,pv,pvc -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/buggypod 0/1 Pending 0 30m <none> <none> <none> <none>
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE VOLUMEMODE
persistentvolume/kubepv 10Gi RWO Retain Available testvolume 3m57s Filesystem
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE VOLUMEMODE
persistentvolumeclaim/kubepvc Pending testvolume 90s Block
但我猜這個錯誤是因為pv類型是fileSystem:
$ kubectl describe pv kubepv
Name: kubepv
Labels: <none>
Annotations: <none>
Finalizers: [kubernetes.io/pv-protection]
StorageClass: testvolume
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: /pvdata
HostPathType:
Events:
<none>
所以,我的問題是如何創建一個 Block PV 來讓一切正常工作?
提前謝謝
請記住, PersistentVolumeClaim
是從PersistentVolume “請求”某些東西。
簡而言之, PV
必須滿足一些PVC
請求。 在您的 YAML 中, PV
滿足PVC
請求,例如:
Storage:
PV
有 10Gi, PVC
請求 5Gi。 請求履行者。 (另外,一旦 PV 和 PVC 有界,資源將只使用請求的存儲,所以在這種情況下 5Gi 將是浪費。最好在PV
中也使用 5Gi 或在PVC
中使用 10Gi )。AccessMode:
兩者都有ReadWriteOnce
。storageClassName:
測試卷配置錯誤
您的PVC
正在尋找具有volumeMode: Block
的PV
。 由於您當前的PV
沒有它,它不會被限制。
解決方案
將volumeMode: Block
添加到您的PV
配置中, PVC
將綁定PV
。
測試
正如您描述的PV
,您可以找到以下信息:
VolumeMode: Filesystem
而$ kubectl describe pvc kubepvc
有:
VolumeMode: Block
當您將VolumeMode: Block
添加到您的PV
清單時,如下所示,它將起作用。
apiVersion: v1
kind: PersistentVolume
metadata:
name: kubepv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
volumeMode: Block
storageClassName: testvolume
hostPath:
path: "/pvdata"
筆記
請記住, volumeMode
是immutable
字段,因此您需要重新創建此資源,它無法編輯。
The PersistentVolume "kubepv" is invalid: volumeMode: Invalid value: "Block": field is immutable
關於storageClass ,主題相當廣泛,但簡而言之,因為storageClassName
在PV
和PVC
中是相同的,所以它可以工作(至少在Kubeadm
上)。
$ kubectl get storageclass -A
No resources found
user@kubeadm:~$ kubectl get pv,pvc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/kubepv 10Gi RWO Retain Bound default/kubepvc testvolume 38s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/kubepvc Bound kubepv 10Gi RWO testvolume 45s
有用的文檔
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.