Skip to main content

Manage volume

under construction

The English version of this document is under construction and will be available soon.

本文提供虛擬 K8s 服務的進階使用範例,包含 Volume 的建立/掛載/刪除以及 Service type 為 LoadBalancer 的相關使用說明。


Volume 管理

檢視 Volume

  • 檢查系統可使用的 storage class
kubectl get storageclass
  • 可以看到系統目前提供了 vds-hdd-sg 及 vds-ssd-sg storage class 使用

建立/掛載 Volume

以下範例將使用 storage class vds-hdd-sg 建立 PVC,建立 PVC 時會自動建立一個 PV,Kubernetes 會將新的 PV 繫結到該 PVC,讓其可以使用。

Step 1. 建立 PVC

  • 編輯 pvc-hdd.yaml (若想要 ssd 儲存,就用將 hdd 改為 ssd : pvc-ssd.yaml)
vi pvc-hdd.yaml
  • 寫入 pvc-hdd.yaml 內容:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csi-pvc-cinder-hdd # csi-pvc-cinder-ssd
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: vds-hdd-sg
  • 將此配置套用 kubernetes
kubectl apply -f pvc-hdd.yaml

  • 查看 PVC 與 PV,可以看到已經建立 PVC,狀態為 Pending,且尚未建立 PV
kubectl get pvc
kubectl get pv

Step 2. 建立 Pod,並且綁定 PVC

  • 編輯 nginx.yaml,建立 Nginx Pod 並且建立綁定
vi nginx.yaml
  • 寫入 nginx.yaml內容:
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: nginx
ports:
- containerPort: 80
protocol: TCP
volumeMounts:
- mountPath: /var/lib/www/html
name: csi-data-cinderplugin
volumes:
- name: csi-data-cinderplugin
persistentVolumeClaim:
claimName: csi-pvc-cinder-hdd
readOnly: false
  • nginx.yaml 配置套用到 K8s cluster
kubectl create -f nginx.yaml

  • 確認 PVC 狀態。可以看到 PVC 已經配置,且狀態為 Bound
kubectl get pvc

  • 確認 PV 狀態。可以看到 Pod 已啟動,狀態為 running
kubectl get pod

  • 檢視 Pod 狀態,可以看到 Event 中有掛載 PVC 的訊息
kubectl describe pod nginx

  • 使用 df 指令檢視儲存空間使用狀況
kubectl exec -it nginx -- df -h | grep /var/lib/www/html

  • 連入 Pod 檢視 Volume 掛載資訊
kubectl exec -it nginx bash
mount | grep vdb

  • 可使用以下指令確認可在檔案系統進行讀寫
kubectl exec -it nginx bash

Step 3. 刪除 Pod、PVC

  • 測試完畢,將 Pod 刪除
kubectl delete -f nginx.yaml

  • 可以看到 PVC、PV 仍然存在
kubectl get pvc
kubectl get pv

  • 需要再將 PVC 刪除,PV 才會被刪除
kubectl delete -f pvc-hdd.yaml

調整 Volume size

使用者可以透過編輯 PersistentVolumeClaim(PVC)對象,調整已存在 PV 的大小。使用者不需要手動與儲存後端互動,或者刪除再重建 PV 和 PVC 對象來增加 Volume 的大小。更多關於調整 PV 大小的說明,請參考 K8S Documentation-Expanding Persistent Volumes Claims

調整 Volume 的大小,需要 PVC 在未掛載的情況下再進行 extend,之後再啟動 Pod,才可以看到 Pod ,詳細步驟如下:

Step 1. 刪除 Pod

因為 Pod 與 PVC 連動,無法直接將 PVC 自 Pod 卸載,因此變更 Volume 大小前需先將所有關連的 Pod 刪除,讓 PVC 為未掛載的狀態。

kubectl delete -f nginx.yaml

Step 2. 編輯 Volume size

kubectl edit pvc csi-pvc-cinder-hdd
  • 修改 Volume size (此處將原本的 1Gi 改為 2Gi)

  • 可以看到 PV 大小已由 1 轉為 2
kubectl get pv

Step 3. 重新建立 Pod,並掛載 PVC

kubectl exec nginx -- df -h /var/lib/www/html