iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0
DevOps

在open source環境,建置container環境及k8s(Minikube)的API佈署環境系列 第 15

[Day15]Kubernetes 持久化儲存:深入理解 PV 和 PVC

  • 分享至 

  • xImage
  •  

前言

在容器化應用程式中,保留數據和持久性是至關重要的,因此 Kubernetes 引入了 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 的概念。這些抽象層使得在 Kubernetes 環境中進行持久化儲存管理變得更簡單、更靈活。本文將深入介紹 PV 和 PVC,並解釋如何使用它們在 Kubernetes 中實現持久化儲存。

PersistentVolume (PV) 是什麼?

PersistentVolume (PV) 是 Kubernetes 中的一個核心概念,用於表示集群中的實際儲存資源。它允許您把物理儲存資源抽象為 Kubernetes 管理的層級,這樣應用程式可以進行持久化儲存的管理。PV 有以下特點:

  • 容量和存儲類型:PV 定義了容量(例如 5GB)和存儲類型(例如 NFS、區塊存儲等)。
  • 訪問模式:PV 規定了應用程式如何訪問這個儲存,如讀寫模式、唯讀模式等。
  • 保留策略:當 PVC 釋放後,PV 的保留策略決定了 PV 的行為,是保留數據還是刪除。

PersistentVolumeClaim (PVC) 是什麼?

PersistentVolumeClaim (PVC) 是對 PV 的請求,它定義了應用程式需要的持久化儲存資源。PVC 是應用程式和實際 PV 之間的中介層。Kubernetes 會根據 PVC 的要求來找到合適的 PV 並進行綁定。

  • 容量需求:PVC 規定了應用程式所需的容量,如 2GB。
  • 訪問模式匹配:PVC 指定了它的訪問模式,如讀寫模式。

實際應用

讓我們看一個實際的範例,如何在 Kubernetes 中使用 PV 和 PVC:

1. 創建 PV

創建一個 pv.yaml 檔案,定義一個 NFS PV:(本地儲存庫的位置會在/var/lib/docker/volumes/minikube/_data/data)

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-nfs-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  nfs:
    server: nfs-server.example.com
    path: /data/my-nfs-volume

2. 創建 PVC

創建一個 pvc.yaml 檔案,定義一個 PVC:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-nfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 2Gi

3. 在Deploy.yaml加入PVC設定

在您的應用程式的 Deployment 配置中使用 PVC:(mountPath:是pod內container要做本地永久儲存庫的位置)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-deployment
spec:
  template:
    spec:
      volumes:
        - name: my-pvc-storage
          persistentVolumeClaim:
            claimName: my-nfs-pvc
      containers:
        - name: my-app-container
          image: my-app-image:latest
          volumeMounts:
            - name: my-pvc-storage
              mountPath: /data

3. 佈署

$ kubectl apply -f pv.yaml
$ kubectl apply -f pvc.yaml
$ kubectl apply -f deploy.yaml

上一篇
[Day14]Kubernetes 中的應用部署和服務配置:deploy.yaml 和 service.yaml
下一篇
[Day16]Kubernetes 上的軟體部署更新策略:確保穩定性與新功能交付
系列文
在open source環境,建置container環境及k8s(Minikube)的API佈署環境30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言