Task #1081
Cập nhật bởi Tùng Nguyễn cách đây 3 tháng
Mục tiêu: xây dựng giải pháp lưu trữ trên môi trường k8s, phù hợp cho các service có tính năng replica mức app như (MongoDB, Elasticsearch ...)
Phương án: Sử dụng local static persistenc volume
https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/tree/master/docs
Mô hình: https://app.diagrams.net/#G17w3CX-PqybY296zzIbChAMFhfhoe9JYI#%7B%22pageId%22%3A%22Z6QLZEgZqsh7oY3-1fRi%22%7D
=====
Thực hiện test với 2 VM cài microk8s
B1: Thực hiện tạo folder /mnt/fast-disks trên các node
B2: Format và mount local disk vào folder
``` c
mkdir -p /mnt/fast-disks
mkfs.ext4 /dev/sdb
DISK_UUID=$(sudo blkid -s UUID -o value /dev/sdb)
mkdir /mnt/fast-disks/$DISK_UUID
--- Auto mount when boot ---
nano /etc/fstab
/dev/disk/by-uuid/<UUID> /mnt/fast-disks/<UUID> ext4 defaults 0 1
```
B3: Cài đặt local-provisioning
``` c
--- Install Helm ---
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
--- Install ---
git clone https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner.git
helm repo add sig-storage-local-static-provisioner https://kubernetes-sigs.github.io/sig-storage-local-static-provisioner
cp sig-storage-local-static-provisioner/helm/provisioner/values.yaml /root/values.yaml
--- Tạo storage class ---
nano local-provisioner.yaml
# Only create this for K8s 1.9+
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-disks
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
# Supported policies: Delete, Retain
reclaimPolicy: Delete
--- Create Provisioner ---
helm install -f values.yaml -n kube-system local-provisioner ./sig-storage-local-static-provisioner/helm/provisioner/
```
Sau khi tạo provisioner, nếu có bất kì folder nào trong folder /mnt/fast-disks thì provisoner sẽ tạo pv
![](clipboard-202408190950-sq2id.png)
===
Thử tạo service mongodb với repica=2
![](clipboard-202408190950-7f9zy.png)
===
Sau khi reboot lại node K8s thì pod trên node tự start lại
===
Nhược điểm: khi 1 pvc được tạo, mặc dù cho manual size của pvc nhỏ hơn capacity của pv nhưng pvc vẫn chiếm toàn bộ capacity của pv đó.