Hướng dẫn sử dụng NFS làm Persistent Storage cho cluster VKS
Do Persistent Volume hiện tại trên chỉ hỗ trợ mode ReadWriteOnce(RWO), không hỗ trợ ReadWriteMany(RWX) nên trong bài viết này VNG Cloud hướng dẫn Quý Khách sử dụng NFS Server hoặc vStorage Filestore làm Persistent Storage cho cluster VKS
*Yêu cầu: Server cùng subnet với các worker node
Trong bài viết thì NFS server có thông tin như sau:
IP: 10.30.15.3
Data path: /mnt/NFS
Worker node cùng range 10.30.15.0/24
Cài đặt NFS Server:
sudo su
apt update && sudo apt -y upgrade
apt install -y nfs-server
mkdir /mnt/NFS
cat <<EOF >> /etc/exports
/mnt/NFS 10.30.15.0/24(rw,no_subtree_check,no_root_squash)
EOF
systemctl enable --now nfs-server
exportfs -ar
Đầu tiên ta cần tạo Storage Class để các hệ thống CI/CD có thể chủ động request Persistent Storage thay vì phải request thủ công:
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner
helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--create-namespace \
--namespace nfs-provisioner \
--set nfs.server=10.30.15.3 \
--set nfs.path=/mnt/NFS
Tiếp theo ta có thể tạo PersistentVolumeClaim(PVC) bằng Storage Class trên bằng manifest sau:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: demo-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: nfs-client
resources:
requests:
storage: "2Gi"
Sau đó ta tạo app, mount pvc và expose Nodeport để kiểm tra:
Tạo file deployment.yml và apply:
apiVersion: apps/v1
kind: Deployment
metadata:
name: demoapp
labels:
app.kubernetes.io/name: pv-demo
spec:
selector:
matchLabels:
app: demoapp
template:
metadata:
labels:
app: demoapp
spec:
containers:
- name: demoapp
image: vcr.vngcloud.vn/107444-khaivt/vks-pv-demo:latest
ports:
- containerPort: 3000
name: http
resources:
requests:
memory: "128Mi"
cpu: "64m"
limits:
memory: "750Mi"
cpu: "500m"
volumeMounts:
- name: data
mountPath: /app/storage
volumes:
- name: data
persistentVolumeClaim:
claimName: demo-pvc
Tạo file svc.yml để expose app bằng NodePort:
apiVersion: v1
kind: Service
metadata:
name: demoapp
spec:
type: NodePort
ports:
- name: http # tên port của service
protocol: TCP
port: 3001
targetPort: http # tên port của container bên file deployment
nodePort: 30090
selector:
app: demoapp
Truy cập app bằng url: http://IP-Node:NodePort (ở đây là http://61.28.229.74:30090/) và upload 1 file
Kiểm tra lại data trên NFS server:
Vậy là ta đã hoàn thành việc cấu hình NFS server làm Persistent Storage cho cluster VKS.
Trong phần tiếp theo ta sẽ dùng dịch vụ vStorage FileStore để làm NFS storage cho VKS mà không cần phải cấu hình NFS server
helm install second-nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--namespace nfs-provisioner \
--set nfs.server=hcm04.efs.vngcloud.vn \
--set nfs.path=/NFS-filestore \
--set storageClass.name=second-nfs-client \
--set storageClass.provisionerName=k8s-sigs.io/second-nfs-subdir-external-provisioner
Tương tự ta cũng tạo 1 pvc bằng Storage Class second-nfs-client bằng manifest sau:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: demo-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: second-nfs-client
resources:
requests:
storage: "20Gi"
Cuối cùng ta cũng thực hiện deploy app, service(tương tự như trên) và test thử:
Do không trực tiếp kiểm tra data trên vStorage Filestore được nên ta thử mount filestore vào server để kiểm tra data (https://docs.vngcloud.vn/vng-cloud-document/vn/vstorage/filestorage/cac-tinh-nang-cua-filestorage/mount-filestorage-toi-server)
sudo mount -t nfs -o vers=4,hard,timeo=600,retrans=3,rsize=1048576,wsize=1048576,resvport,async hcm04.efs.vngcloud.vn:/NFS-filestore /mnt/filestore
Vậy là ta đã hoàn thành việc sử dụng NFS làm Persisten Storage cho cluster VKS bằng 2 cách là sử dụng NFS server và vStorage Filestore.