Sử dụng volume có sẵn làm PersistentVolume

Hướng dẫn này giúp bạn thực hiện tạo PersistentVolume từ một volume có sẵn trên Bizfly Cloud cùng với dữ liệu của nó, từ đó có thể gắn nó vào Pod.

Thuật ngữ:

Theo 2 cách phổ biến sau:

  • Tạo thủ công PV và PVC, sau đó khai báo trong Pod manifest để sử dụng

  • Tạo thủ công một danh sách các PV sau đó để cho Statefulset tự động tạo các PVC tham chiếu đến

Sử dụng PersistentVolume cho một Pod

Tạo thủ công PV & PVC

Tạo file YAML với nội dung như sau:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: PV_NAME
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: VOLUME_SIZE
  claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: PV_CLAIM_NAME
    namespace: default
  csi:
    driver: volume.csi.bizflycloud.vn
    fsType: ext4
    volumeHandle: PV_ID
  storageClassName: STORAGE_CLASS_NAME
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: PV_CLAIM_NAME
  namespace: default
spec:
  storageClassName: STORAGE_CLASS_NAME
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: VOLUME_SIZE

Thay thế các tham số:

PV_NAME Đặt tên cho PersistentVolume

PV_CLAIM_NAME Đặt tên cho PersistentVolumeClaim

STORAGE_CLASS_NAME Tên StorageClass, ví dụ: “premium-hdd”

PV_ID ID của Volume

VOLUME_SIZE Dung lượng của Volume, ví dụ: 20Gi

Sau đó apply vào cluster

kubectl apply -f <đường dẫn đến file YAML>

Khai báo volumes và volumeMounts trong Pod manifest, ví dụ như sau:

kind: Pod
apiVersion: v1
metadata:
  name: POD_NAME
spec:
  volumes:
    - name: data
      persistentVolumeClaim:
        claimName: PV_CLAIM_NAME
  containers:
    - name: default
      image: nginx:latest
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: data

thay thế PV_CLAIM_NAME thành tên của PVC đã tạo ở bước trên

Sử dụng PersistentVolume trong một Statefulset

Statefulset sẽ tự động tạo các PVC có tên theo quy ước:

<CLAIM_TEMPLATE_NAME>-<STATEFULSET_NAME>-<REPLICA_INDEX>

trong đó:

CLAIM_TEMPLATE_NAME tên của template được khai báo trong Statefulset manifest, ví dụ: data

STATEFULSET_NAME tên của Statefulset, ví dụ: upload

REPLICA_INDEX số thứ tự của replica, ví dụ với replicas=2 sẽ có 2 replica có thứ tự là 01

Ta tạo thủ công các PV và bind chúng vào các PVC có tên theo quy ước đó:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: PV_NAME_0
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: VOLUME_SIZE
  claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: PV_CLAIM_NAME_0
    namespace: default
  csi:
    driver: volume.csi.bizflycloud.vn
    fsType: ext4
    volumeHandle: PV_ID_0
  storageClassName: STORAGE_CLASS_NAME
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: PV_NAME_1
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: VOLUME_SIZE
  claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: PV_CLAIM_NAME_1
    namespace: default
  csi:
    driver: volume.csi.bizflycloud.vn
    fsType: ext4
    volumeHandle: PV_ID_1
  storageClassName: STORAGE_CLASS_NAME

thay thế các giá trị:

PV_NAME_0PV_NAME_1 Đặt tên cho chúng

VOLUME_SIZE là dung lượng của 2 Volume có sẵn

PV_CLAIM_NAME_0PV_CLAIM_NAME_1 là tên của PVC theo quy ước ở trên

Apply chúng vào cluster

kubectl apply -f <đường dẫn đến file YAML>

Tạo Statefulset

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: STATEFULSET_NAME
spec:
  selector:
    matchLabels:
      app: upload
  serviceName: upload
  replicas: 2
  template:
    metadata:
      labels:
        app: upload
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: default
        image: my-registry/upload:latest
        volumeMounts:
        - name: CLAIM_TEMPLATE_NAME
          mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: CLAIM_TEMPLATE_NAME
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: VOLUME_SIZE