共享儲存機制
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。
PVapiVersion: 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
建立後檢視:
PVCapiVersion: 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使用PVCapiVersion: 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,一個喜歡健身的程式設計師。