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ữ:
-
Volume: Ổ cứng trên Bizfly Cloud
-
PersistentVolumes (PV) & PersistentVolumeClaim (PVC): https://kubernetes.io/docs/concepts/storage/persistent-volumes/#introduction
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à 0
và 1
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_0
và PV_NAME_1
Đặt tên cho chúng
VOLUME_SIZE
là dung lượng của 2 Volume có sẵn
PV_CLAIM_NAME_0
và PV_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