pv與pvc 與動態存儲storageclass

1、基本知識概念 

基礎概念 含義
p v 是持久化存儲數據卷。這個 API 對象主要定義的是一個持久化存儲在宿主機上的目錄,比如一個 NFS 的掛載目錄。
PVC 則是po d所希望使用的持久化存儲的屬性。比如,volume存儲的大小、可讀寫權限等等
容器的volume 是將一個宿主機上的目錄,跟一個容器的目錄綁定掛載在一起
持久化的volume 是這個宿主機上的目錄,具備‘持久性’
storageclass 是創建p v的模板,動態創建pv

2、用戶創建的pvc要真正被容器使用起來,就必須先和某個符合條件的pv進行綁定。

包括兩部分:

pv與PVC 的spec字段;比如,PV 的存儲(storage)大小,就必須滿足 PVC 的要求。
而第二個條件,則是 PV 和 PVC 的 storageClassName 字段必須一樣
 

3、創建掛載了PVC的pod


apiVersion: v1
kind: Pod
metadata:
  labels:
    role: web-frontend
spec:
  containers:
  - name: web
    image: nginx
    ports:
      - name: web
        containerPort: 80
    volumeMounts:
        - name: nfs
          mountPath: "/usr/share/nginx/html"
  volumes:
  - name: nfs
    persistentVolumeClaim:
      claimName: nfs

可以看到,Pod 需要做的,就是在 volumes 字段裏聲明自己要使用的 PVC 名字。接下來,等這個 Pod 創建之後,kubelet 就會把這個 PVC 所對應的 PV,也就是一個 NFS 類型的 Volume,掛載在這個 Pod 容器內的目錄上

 

4、storeageclass

k8s爲我們提供了一套可以自動創建pv的機制:動態存儲

動態存儲機制工作的核心:在於一個名叫sc的api對象

s c對像的作用 就是創建p v的模版

具體地說,StorageClass 對象會定義如下兩個部分內容:

第一,PV 的屬性。比如,存儲類型、Volume 的大小等等。

第二,創建這種 PV 需要用到的存儲插件。比如,Ceph 等等。

使用sc的創建pod服務的過程:

1)創建一個 由volume的類型爲rook的s c
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: block-service
provisioner: ceph.rook.io/block
parameters:
  pool: replicapool
  #The value of "clusterNamespace" MUST be the same as the one in which your rook cluster exist
  clusterNamespace: rook-ceph

2)在pvc裏指定要使用的SC名字即可:


apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: claim1
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: block-service
  resources:
    requests:
      storage: 30Gi

 

可以看到,我們創建的PVC會綁定一個kubernetes自動創建的PV


$ kubectl describe pvc claim1
Name:           claim1
Namespace:      default
StorageClass:   block-service
Status:         Bound
Volume:         pvc-e5578707-c626-11e6-baf6-08002729a32b
Labels:         <none>
Capacity:       30Gi
Access Modes:   RWO
No Events.

 

通過查看這個自動創建的pv的屬性,你就可以看到它跟我們在PVC裏聲明的存儲的屬性也是一致的。


$ kubectl describe pv pvc-e5578707-c626-11e6-baf6-08002729a32b
Name:            pvc-e5578707-c626-11e6-baf6-08002729a32b
Labels:          <none>
StorageClass:    block-service
Status:          Bound
Claim:           default/claim1
Reclaim Policy:  Delete
Access Modes:    RWO
Capacity:        30Gi
...
No events.

可查看這個自動創建的PV的sc字段的值,也是 block-service。這是因爲,Kubernetes 只會將 StorageClass 相同的 PVC 和 PV 綁定起來。

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章