簡體   English   中英

kubernetes:創建塊存儲持久卷

[英]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 storageClassName:測試卷

配置錯誤

您的PVC正在尋找具有volumeMode: BlockPV 由於您當前的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"

筆記

請記住, volumeModeimmutable字段,因此您需要重新創建此資源,它無法編輯。

The PersistentVolume "kubepv" is invalid: volumeMode: Invalid value: "Block": field is immutable

關於storageClass ,主題相當廣泛,但簡而言之,因為storageClassNamePVPVC中是相同的,所以它可以工作(至少在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM