OpenShift中如何將PV與PVC綁定

PV/PVC是什么?

PV(Persistent Volume):描述的是持久化的Volume實體概念,生命周期與Pod創(chuàng)建和銷毀事件無關(guān)。要么運行事先準(zhǔn)備好,要么通過動態(tài)創(chuàng)建。
PVC(PersistentVolumeClaim):PVC是對PV的請求,申明Pod所希望使用的持久化存儲的屬性,例如容量,讀寫權(quán)限。

Kubernete Volumes能夠幫忙應(yīng)用持久化數(shù)據(jù),PV/PVC是Kubernetes Volumes存儲類型的一種,其它類型還有:
本地存儲:emptyDir / hostPath
網(wǎng)絡(luò)存儲:
in-tree: aws ElasticBlockStore / gcePersistentDisk / nfs
out-of-tree:csi等網(wǎng)絡(luò)存儲插件
Project Volume:secret / configmap / downwardAPI / serviceAccountToken

PV/PVC的意義

  1. 使用不同的控制器來管理計算與存儲資源,解耦POD與Volume的生命周期,實現(xiàn)計算與存儲分離。
  2. PVC只需要關(guān)注應(yīng)用需要知道的配置,如存儲大小、訪問模式,讀寫模式等,而不需要知道存儲的細(xì)節(jié),實現(xiàn)開發(fā)與運維職責(zé)分離。開發(fā)只需要提需求,知道自己需要的存儲容量,模式就夠了,他并不關(guān)心存儲是由什么設(shè)備提供的,資源池的夠不夠,而運維人員則相反,他更關(guān)心的底層的存儲狀態(tài)。

PV創(chuàng)建的兩種方式:靜態(tài)與動態(tài)

靜態(tài)創(chuàng)建方式,下圖為靜態(tài)創(chuàng)建的示意圖。

靜態(tài)創(chuàng)建方式
  1. 研發(fā)用戶需要創(chuàng)建存儲資源,于是創(chuàng)建了PVC(持久化存儲卷請求),申明需要的存儲資源大小以及訪問模式
  2. 集群管理人員(運維人員)根據(jù)需求配置手動創(chuàng)建對應(yīng)的PV(持久化存儲卷)
  3. OpenShift/K8S會根據(jù)配置將PV/PVC進(jìn)行綁定,讓PVC與真實的存儲資源關(guān)聯(lián)。

這種方式有幾個問題:

  1. 需要手動創(chuàng)建PV,增加了運維管理的復(fù)雜度。
  2. 如果有大量配置一樣的PVC需求時,PVC與設(shè)定的PV需要單獨的設(shè)置進(jìn)行綁定。

動態(tài)創(chuàng)建方式,下圖為動態(tài)創(chuàng)建的示意圖。


動態(tài)創(chuàng)建方式
  1. 集群管理人員(運維人員)提前部署好存儲的provisioner,并創(chuàng)建好對應(yīng)storageclass
  2. 研發(fā)用戶需要創(chuàng)建存儲資源,于是創(chuàng)建了PVC(持久化存儲卷請求),申明需要的存儲的provisioner以及存儲大小
  3. provisioner監(jiān)聽到PVC資源的創(chuàng)建,自動創(chuàng)建PV,并與PVC進(jìn)行綁定,讓PVC與真實的存儲資源關(guān)聯(lián)。

一旦準(zhǔn)備好動態(tài)創(chuàng)建存儲環(huán)境,存儲資源便以服務(wù)的方式提供給研發(fā)人員,實現(xiàn)存儲資源自服務(wù)。

如何將PV與PVC綁定

在上一部分介紹了靜態(tài)創(chuàng)建存儲資源與動態(tài)創(chuàng)建存儲資源的過程與特點,很明顯動態(tài)創(chuàng)建存儲資源使用更方便,但是在生產(chǎn)中,受到環(huán)境的限制,靜態(tài)創(chuàng)建存儲資源的方式仍然很常見。這時,如何準(zhǔn)確地綁定PVC與對應(yīng)的PV就是需要注意的問題了。下面列出了解決這個問題的三種方法。

第一種,在PV中添加label,在PVC中添加matchLabels進(jìn)行關(guān)聯(lián)

創(chuàng)建PV

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv1
  labels:
    pv: nfs-pv1
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 10.2.1.2
    path: "/exports/pv1"
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc1
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
  selector:
    matchLabels:
      pv: "nfs-pv1"
    matchExpressions:
      - {key: environment, operator: In, values: [dev]}
# 本地盤PV
kind: PersistentVolume
apiVersion: v1
metadata:
  name: test2-pv
  namespace: kubeflow
  labels:
    pv: test2
spec:
  capacity:
    storage: 100Mi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/data/test2"

第二種,PV配置中指定關(guān)聯(lián)的PVC

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv1
  labels:
    pv: nfs-pv1
spec:
  capacity:
    storage: 1Gi
  claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: openldap-volume-1
    namespace: openldap
  accessModes:
    - ReadWriteMany
  nfs:
    server: 10.2.1.2
    path: "/exports/pv1"

第三種,PVC中設(shè)置volumeName

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc1
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
  volumeName: nfs-pv1
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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