kubernetes之配置Pod的PersistentVolume存儲


簡介

此文講解如何使用PersistentVolumeClaim配置Pod存儲,步驟如下:

  • 作為群集管理員,創建一個由物理存儲支持的PersistentVolume。沒有將卷與任何Pod相關聯。
  • 以開發人員/集群用戶的身份創建一個PersistentVolumeClaim,它自動綁定到合適的PersistentVolume
  • 創建一個使用上述PersistentVolumeClaim進行存儲的Pod。

備注:此文檔參考官方文檔,並加以自己的理解。如有誤導性的內容,請批評指正。

開始前的准備工作

選擇集群中的一個node節點,進入shell,創建/mnt/data目錄

# mkdir /mnt/data

進入/mnt/data目錄,創建一個index.html的文件

# sudo sh -c "echo 'Hello from Kubernetes storage' > /mnt/data/index.html"

查看文件是否是否創建成功

cat /mnt/data/index.html

輸出內容如下

Hello from Kubernetes storage

創建PersistentVolume

創建一個hostPath類型的創建PersistentVolume。Kubernetes支持在集群一個node節點上使用hostPath開發和測試。hostPath類型的PersistentVolume使用node節點上的文件或目錄來模擬網絡附加存儲。

在生產環境中,不要使用hostPath。集群管理員可以用Google Compute Engine persistent diskNFSAmazon Elastic Block Store volume提供的網絡存儲來代替。集群管理員可以可使用StorageClasses設置dynamic provisioning

創建hostPath類型的PersistentVolume對象,文件問:pv-volume.yaml

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

配置文件定義的volumes是集群node節點上的/mnt/data。配置中指定了存儲大小為10 gibibytesReadWriteOnce模式,也就意味着在被掛載的單一節點上可讀可寫。配置中定義的StorageClass namemanual,綁定PersistentVolumeClaim請求到PersistentVolume

# kubectl apply -f /root/k8s-example/volume/pv-volume.yaml

查看PersistentVolume資源詳情

# kubectl get pv task-pv-volume -o wide

結果顯示PersistentVolumeSTATUSAvailable。說明該PersistentVolume還沒有綁定PersistentVolumeClaim

NAME             CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE   VOLUMEMODE
task-pv-volume   10Gi       RWO            Retain           Available           manual                  9s    Filesystem

創建PersistentVolumeClaim

接下來創建PersistentVolumeClaim。Pod使用PersistentVolumeClaim請求物理存儲。

創建一個PersistentVolumeClaim,該請求的卷至少為3 gibibytes,可以為至少一個節點提供讀寫訪問權限。文件名:pv-claim.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: task-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi
# kubectl apply -f /root/k8s-example/volume/pv-claim.yaml

查看PersistentVolume的資源詳情,

# kubectl get pv task-pv-volume
NAME             CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                   STORAGECLASS   REASON   AGE
task-pv-volume   10Gi       RWO            Retain           Bound    default/task-pv-claim   manual                  28m

查看PersistentVolumeClaim資源狀態

# kubectl get pvc task-pv-claim

輸出結果顯示PersistentVolumeClaim已綁定PersistentVolumetask-pv-volume

NAME            STATUS   VOLUME           CAPACITY   ACCESS MODES   STORAGECLASS   AGE
task-pv-claim   Bound    task-pv-volume   10Gi       RWO            manual

創建Pod

創建Pod,使用PersistentVolumeClaim作為volume。文件名:pv-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: task-pv-pod
spec:
  volumes:
    - name: task-pv-storage
      persistentVolumeClaim:
        claimName: task-pv-claim
  containers:
    - name: task-pv-container
      image: nginx
      ports:
        - containerPort: 80
          name: "http-server"
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: task-pv-storage
# kubectl apply -f /root/k8s-example/volume/pv-pod.yaml
# kubectl get pod task-pv-pod
NAME          READY   STATUS    RESTARTS   AGE
task-pv-pod   1/1     Running   0          14s

進入task-pv-pod的shell中

kubectl exec -it task-pv-pod -- /bin/bash

在shell中,驗證nginx是否正在從hostPath卷提供index.html文件

apt update
apt install curl
curl http://localhost/

輸出結果如下:

Hello from Kubernetes storage

如果看到該消息,則說明您已成功將Pod配置為使用來自PersistentVolumeClaim的存儲。

清理資源

kubectl delete pod task-pv-pod
kubectl delete pvc task-pv-claim
kubectl delete pv task-pv-volume

在創建/mnt/data目錄的node節點上,刪除目錄

sudo rm /mnt/data/index.html
sudo rmdir /mnt/data


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM