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/ ``` template --debug sig-storage-local-static-provisioner/local-static-provisioner > template.yaml 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