Kubernetes(k8s)Volumes-PV&PVC

PersistentVolume(簡稱PV)是由管理員設(shè)置的存儲(chǔ),它同樣是集群中的一類資源,PV是容量插件,如Volumes(卷),但其生命周期獨(dú)立使用PV的任何Pod,PV的創(chuàng)建可使用NFS、iSCSI、GFS、CEPH等。
PersistentVolumeClaim(簡稱PVC)是用戶對(duì)存儲(chǔ)的請(qǐng)求,類似于Pod,Pod消耗節(jié)點(diǎn)資源,PVC消耗PV資源,Pod可以請(qǐng)求特定級(jí)別的資源(CPU和內(nèi)存),PVC可以請(qǐng)求特定的大小和訪問模式。例如,可以以一次讀/寫或只讀多次的模式掛載。
雖然PVC允許用戶使用抽象存儲(chǔ)資源,但是用戶可能需要具有不同性質(zhì)的PV來解決不同的問題,比如使用SSD硬盤來提高性能。所以集群管理員需要能夠提供各種PV,而不僅是大小和訪問模式,并且無須讓用戶了解這些卷的實(shí)現(xiàn)方式,對(duì)于這些需求可以使用StorageClass資源實(shí)現(xiàn)。
目前PV的提供方式有兩種:靜態(tài)或動(dòng)態(tài)。
靜態(tài)PV由管理員提前創(chuàng)建,動(dòng)態(tài)PV無需提前創(chuàng)建,只需指定PVC的StorageClasse即可。

PV的回收策略

當(dāng)用戶使用完卷時(shí),可以從API中刪除PVC對(duì)象,從而允許回收資源。回收策略會(huì)告訴PV如何處理該卷,目前卷可以保留、回收或刪除。
? Retain:保留,該策略允許手動(dòng)回收資源,當(dāng)刪除PVC時(shí),PV仍然存在,volume被視為已釋放,管理員可以手動(dòng)回收卷。
? Recycle:回收,如果volume插件支持,Recycle策略會(huì)對(duì)卷執(zhí)行rm -rf清理該P(yáng)V,并使其可用于下一個(gè)新的PVC,但是本策略已棄用,建議使用動(dòng)態(tài)配置。
? Delete:刪除,如果volume插件支持,刪除PVC時(shí)會(huì)同時(shí)刪除PV,動(dòng)態(tài)卷默認(rèn)為Delete。

PV的訪問策略

ReadWriteOnce:可以被單節(jié)點(diǎn)以讀寫模式掛載,命令行中可以被縮寫為RWO。
ReadOnlyMany:可以被多個(gè)節(jié)點(diǎn)以只讀模式掛載,命令行中可以被縮寫為ROX。
ReadWriteMany:可以被多個(gè)節(jié)點(diǎn)以讀寫模式掛載,命令行中可以被縮寫為RWX。

NFS安裝配置

NFS服務(wù)器安裝服務(wù)端: yum install nfs* rpcbind -y
所有K8s節(jié)點(diǎn)安裝NFS客戶端:yum install nfs-utils -y
NFS服務(wù)端:mkdir /data/k8s -p
NFS服務(wù)器創(chuàng)建共享目錄:vim /etc/exports
/data/k8s/ *(rw,sync,no_subtree_check,no_root_squash)
exportfs -r
systemctl restart nfs rpcbind
掛載測試:mount -t nfs nfs-serverIP:/data/k8s /mnt/

一、創(chuàng)建PV

1)基于NFS創(chuàng)建

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs
spec:
  capacity:                                                      # 容量配置
    storage: 5Gi
  volumeMode: Filesystem                            # 卷的模式,目前支持Filesystem(文件系統(tǒng)) 和 Block(塊),其中Block類型需要后端存儲(chǔ)支持,默認(rèn)為文件系統(tǒng)
  accessModes:                                             # PV的訪問模式
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle   # 回收策略
  storageClassName: nfs-slow                      # PV的類,一個(gè)特定類型的PV只能綁定到特定類別的PVC
  nfs:                                                              # NFS服務(wù)配置
    path: /data/k8s
    server: 172.17.0.2

2)基于hostPath創(chuàng)建

kind: PersistentVolume
apiVersion: v1
metadata:
  name: task-pv-volume
  labels:
    type: local
spec:
  storageClassName: hostpath
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"

3)基于CephRBD創(chuàng)建

apiVersion: v1
kind: PersistentVolume
metadata:
  name: ceph-rbd-pv
spec:
  capacity:
    storage: 1Gi
  storageClassName: ceph-fast
  accessModes:
    - ReadWriteOnce
  rbd:
    monitors:                                        # Ceph的monitor節(jié)點(diǎn)的IP
      - 192.168.1.123:6789
      - 192.168.1.124:6789
      - 192.168.1.125:6789
    pool: rbd                                         # 所用Ceph Pool的名稱,可以使用ceph osd pool ls查看
    image: ceph-rbd-pv-test                 # Ceph塊設(shè)備中的磁盤映像文件,可以使用rbd create POOL_NAME/IMAGE_NAME --size 1024創(chuàng)建,使用rbd list POOL_NAME查看
    user: admin                                    # Rados的用戶名,默認(rèn)是admin
    secretRef:                                      # 用于驗(yàn)證Ceph身份的密鑰
      name: ceph-secret
    fsType: ext4                                   # 文件類型,可以是ext4、XFS等
    readOnly: false                              # 是否是只讀掛載

二、創(chuàng)建PVC

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: task-pvc-claim
spec:
  storageClassName: nfs-slow
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

三、pod使用PVC

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx
  namespace: default
spec:
  replicas: 2
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: nginx
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx
    spec:
      volumes:
      - name: task-pv-storage
        persistentVolumeClaim:
          claimName: task-pvc-claim
      containers:
      - env:
        - name: TZ
          value: Asia/Shanghai
        - name: LANG
          value: C.UTF-8
        image: nginx
        imagePullPolicy: IfNotPresent
        name: nginx
        volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: task-pv-storage
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容