ℹ️ Góp ý cải thiện tài liệu 
Để đóng góp chỉnh sửa, nhấp vào liên kết Gửi ticket ở khung bên phải.

1. Tổng quan

Trong môi trường Kubernetes, Network File System (NFS) là một giải pháp lưu trữ phổ biến nhờ tính linh hoạt, dễ triển khai và khả năng chia sẻ dữ liệu giữa nhiều pod. Việc sử dụng NFS Server làm Storage Class trong dịch vụ VNPT K8s giúp cung cấp khả năng lưu trữ động (dynamic provisioning) và hỗ trợ các ứng dụng yêu cầu truy cập dữ liệu đồng thời từ nhiều node.

Lợi ích của việc sử dụng NFS làm Storage Class

  • Dễ triển khai & quản lý: Chỉ cần một NFS server và cấu hình StorageClass trong Kubernetes.
  • Hỗ trợ RWX (ReadWriteMany): Cho phép nhiều pod truy cập cùng một Persistent Volume (PV).
  • Tăng khả năng mở rộng: Dễ dàng mở rộng dung lượng lưu trữ mà không ảnh hưởng đến ứng dụng.

2. Cách thức triển khai NFS làm StorageClass

1. Khởi tạo NFS Server

Người dùng có thể khởi tạo NFS Server thông qua dịch vụ File Storage của VNPT Cloud, tham khảo hướng dẫn tại đây.

2. Kiểm tra kết nối

Sau khi khởi tạo thành công NFS Server, hệ thống sẽ tự động gắn một interface thuộc dải mạng của NFS Server vào router mặc định có tên “router_pub_pri_network”.

Trường hợp 1: Default Route của mạng Kubernetes chưa được sử dụng

Nếu dải mạng sử dụng để triển khai Kubernetes Cluster chưa sử dụng Default Route, người dùng cần cấu hình route để đảm bảo kết nối giữa các worker nodes và NFS Server. Thực hiện theo các bước sau:

  • Truy cập vào “Dịch vụ hạ tầng” -> “Networks” -> “Router”
  • Chọn “Tạo mới” để tạo một Router Interface
  • Trong phần “Chọn Subnet”, chọn dải mạng đã được sử dụng để triển khai Kubernetes Cluster.
  • Tại mục “Địa chỉ IP”, nhập Default Gateway của dải mạng này (ví dụ: 192.168.0.1).
  • Xác nhận và hoàn tất cấu hình.

Sau khi hoàn tất các bước trên, các worker nodes trong cụm Kubernetes sẽ có thể kết nối đến NFS Server một cách ổn định.

Trường hợp 2: Default Route của mạng Kubernetes đã được sử dụng

Nếu dải mạng sử dụng để triển khai Kubernetes Cluster đã sử dụng Default Route, người dùng có thể tự cấu hình NFS Server riêng

Yêu cầu:  

  • NFS Server phải cùng dải mạng với các worker nodes
  • Chuẩn bị một VM để cài đặt NFS Server. (Tham khảo hướng dẫn tạo VM tại đây).
  • Chuẩn bị 1 VM Bastion kết nối được tới cụm (nếu trong trường hợp cụm có enpoint là Internal)

3. Hướng dẫn cài đặt NFS Server trên CentOS và Ubuntu

1. Trên máy chủ NFS (NFS Server)

Bước 1: Cài đặt gói NFS

Trên CentOS/RHEL:

sudo yum install -y nfs-utils

Trên Ubuntu/Debian:

sudo apt update
sudo apt install -y nfs-kernel-server

Bước 2: Tạo thư mục chia sẻ

sudo mkdir -p /srv/nfs_share
sudo chown -R nobody:nogroup /srv/nfs_share
sudo chmod 777 /srv/nfs_share

Bước 3: Cấu hình file /etc/exports

Mở file cấu hình:

sudo nano /etc/exports

Thêm dòng sau:

/srv/nfs_share 192.168.0.0/24(rw,sync,no_subtree_check)

Thay 192.168.1.0/24 bằng dải IP subnet mà các máy client của bạn đang dùng.

Bước 4: Khởi động và kích hoạt dịch vụ NFS

CentOS:

sudo systemctl enable --now nfs-server
sudo systemctl restart nfs-server

Ubuntu:

sudo systemctl enable --now nfs-kernel-server 
sudo systemctl restart nfs-kernel-server

Hướng dẫn kết nối đến NFS Server trên VNPT Kubernetes Service

Dưới đây là hướng dẫn kết nối và triển khai NFS Subdir External Provisioner trên VNPT Kubernetes Service

Bước 1: Đứng từ VM Bastion đã kết nối được tới cụm VNPT Kubernetes Service và cài đặt Helm.

curl -L https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

Bước 2: Thêm Helm repo cho nfs-subdir-external-provisioner

helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/

Cài đặt NFS Provisioner

helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
  --namespace <your-namespace> \
  --create-namespace \
  --set nfs.server=192.168.0.10 \
  --set nfs.path=/vsanfs/IDG-k8sv2-HB-devtest \
  --set nfs.mountOptions[0]=nfsvers=4.1 \
  --set storageClass.name=nfs-client \
  --set storageClass.defaultClass=false \
  --set storageClass.accessModes={ReadWriteMany} \
  --set storageClass.reclaimPolicy=Delete \
  --set storageClass.volumeBindingMode=WaitForFirstConsumer

Trong đó:

  • nfs.mountOpions: Tùy chọn khi mount NFS
  • nfs.path: Folder được export từ NFS server (NFS share)
  • nfs.server: IP hoặc hostname của NFS server
  • storageClass.name: Tên StorageClass được tạo
  • storageClass.defaultClass: Tùy chọn bật/tắt StorageClass mặc định
  • storageClass.accessModes: Quyền truy cập PVC (RWX, RWO...)
  • storageClass.reclaimPolicy: Policy khi xóa PVC
  • storageClass.volumeBindingMode: Cấu hình binding mode cho storage class

Bước 3: Kiểm tra trạng thái

Kiểm tra trạng thái pod sau khi cài đặt, đảm bảo pod đã running

kubectl get pods -n <your-namespace> -l app=nfs-subdir-external-provisioner

Kiểm tra Storage Class đã được tạo

kubectl get storageclass | grep nfs-client