首頁>技術>

共享儲存機制

k8s對有狀態的容器應用或者需要對資料進行持久化的應用,在之前的篇章說過,可以將容器內的目錄掛載到宿主機的容器目錄或者emptyDir臨時儲存卷。另外,k8s還開放了兩個資源,分別是PersistentVolume(PV)和PersistentVolumeClaim(PVC),這兩個資源物件可允許k8s使用外部的儲存裝置。比如在生產環境中有一個專門的檔案伺服器,那麼就可以使用PV對檔案伺服器的資源進行定義,比如總共有多少容量等,然後用PVC對PV資源進行申請,申請多少容量,然後再容器裡引用PVC即可。

PV是對底層網路共享儲存的抽象,將共享儲存定義為一種“資源”,比如Node也是容器應用可以消費的資源。PV由管理員建立和配置,與共享儲存的具體實現直接相關。

PVC則是使用者對儲存資源的一個“申請”,就像Pod消費Node資源一樣,PVC能夠消費PV資源。PVC可以申請特定的儲存空間和訪問模式。

StorageClass,用於標記儲存資源的特性和效能,管理員可以將儲存資源定義為某種類別,正如儲存裝置對於自身的配置描述(Profile)。根據StorageClass的描述可以直觀的得知各種儲存資源的特性,就可以根據應用對儲存資源的需求去申請儲存資源了。儲存卷可以按需建立。

容器儲存介面Container Storage Interface(CSI)機制,目標是在kubernetes與外部儲存系統之前建立一套標準的儲存管理介面,透過該介面為容器提供儲存服務。

使用案例

在案例中,定義一個PV,申請對宿主機的資源使用,定義一個PVC,申請對PV資源的使用。然後再Pod中掛載PVC。

PV
apiVersion: v1kind: PersistentVolumemetadata:  name: pv  namespace: pv  labels:    name: pvspec:  capacity:    storage: 2Gi  accessModes:  - ReadWriteOnce  persistentVolumeReclaimPolicy: Recycle  hostPath:    path: /usr/soft/k8s/yaml/pv/storage

申請宿主機2G的儲存。

建立:

kubectl create -f pv.yaml

建立後檢視:

PVC
apiVersion: v1kind: PersistentVolumeClaimmetadata:  name: pvc  namespace: pv  labels:    name: pvcspec:  accessModes:  - ReadWriteOnce  resources:    requests:      storage: 1Gi  selector:    matchLabels:      name: pv

此PVC申請對上述PV的使用,申請1G儲存。建立:

kubectl create -f pvc.yaml

建立後檢視:

建立Pod使用PVC
apiVersion: v1kind: Podmetadata:  name: nginx  namespace: pv  labels:    name: nginxspec:  containers:  - name: nginx    image: nginx    imagePullPolicy: IfNotPresent    volumeMounts:    - name: pv      mountPath: /pvc      readOnly: false    ports:    - containerPort: 80  volumes:  - name: pv    persistentVolumeClaim:      claimName: pvc

使用volumes掛載pvc,掛載到容器的pvc目錄。

驗證

建立容器後,進入容器,在容器目錄pvc新增檔案,看對應的PersistemVolume中的路徑是否有相應的檔案。

在pvc目錄建立test.txt檔案

獲取pod執行在哪個節點

去節點相應目錄檢視

可以看到,相應的節點目錄是存在容器中建立的檔案的。同理,如果在節點目錄新增檔案,那麼容器中的掛載目錄也會有相應的檔案。

結尾

上述就是PV和PVC的簡單使用,更詳細的介紹在下一篇文章中。

===============================

我是Liusy,一個喜歡健身的程式設計師。

9
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 學習哪種開發語言好