kubernetes :创建块存储持久卷
kubernetes : create a Block storage persistent volume
我是 kubernetes 卷管理的新手。
我需要使用带有以下 pod 的块 pvc:
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
和 pv :
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>
所以,我的问题是如何创建块 PV 来使一切正常工作?
提前致谢
请记住 PersistentVolumeClaim
正在“请求”来自 PersistentVolume 的东西。
简而言之,PV
必须完成一些 PVC
请求。在您的 YAML 中 PV
满足 PVC
请求,例如:
Storage:
PV
有 10Gi,PVC
请求 5Gi。请求履行者。 (此外,一旦 PV 和 PVC 绑定,资源将仅使用请求的存储,因此在这种情况下 5Gi 将被浪费。最好在 PV
中也使用 5Gi 或在 PVC
中使用 10Gi)。
AccessMode:
两者都有ReadWriteOnce
.
storageClassName:
测试量
配置错误
您的 PVC
正在寻找 PV
和 volumeMode: Block
。因为你现在的PV
没有,所以不会被bounded.
解决方案
将 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
有用的文档
我是 kubernetes 卷管理的新手。 我需要使用带有以下 pod 的块 pvc:
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
和 pv :
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>
所以,我的问题是如何创建块 PV 来使一切正常工作?
提前致谢
请记住 PersistentVolumeClaim
正在“请求”来自 PersistentVolume 的东西。
简而言之,PV
必须完成一些 PVC
请求。在您的 YAML 中 PV
满足 PVC
请求,例如:
Storage:
PV
有 10Gi,PVC
请求 5Gi。请求履行者。 (此外,一旦 PV 和 PVC 绑定,资源将仅使用请求的存储,因此在这种情况下 5Gi 将被浪费。最好在PV
中也使用 5Gi 或在PVC
中使用 10Gi)。AccessMode:
两者都有ReadWriteOnce
.storageClassName:
测试量
配置错误
您的 PVC
正在寻找 PV
和 volumeMode: Block
。因为你现在的PV
没有,所以不会被bounded.
解决方案
将 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
有用的文档