- Đăng vào
Thiết lập và dụng NFS Persistent Volume trên Kubernetes
Mở đầu
Bài viết này sẽ hướng dẫn các bạn cấu hình và sử dụng bộ nhớ NFS (Network Files System) trên Kubernetes cluster.
Hãy cùng đọc 1 chút về 2 khái niệm Persistent Volume và Persistent Volume Claim mà mình đã góp nhặt trên Internet.
Persistent Volumes
PersistentVolume (PV) là một phần không gian lưu trữ dữ liệu trong cụm được cấp phát bởi Cluster Admin hoặc được cấp phát linh hoạt. Nó là một loại tài nguyên của của cụm cũng giống như 1 node là tài nguyên của cụm. Các PV này cũng giống như các Volume thuần khác, tuy nhiên nó tồn tại hoàn toàn độc lập với bất kỳ pod nào sử dụng PV. Hiện tại, Kubernetes hỗ trợ rất nhiều các loại PersistentVolume khác nhau được cài đặt dưới dạng plugin như glusterfs, nfs, csi, ...
Persistent Volume Claim
Một người dùng muốn sử dụng không gian lưu trữ (PV) thì cần tạo một PersistentVolumeClaim (PVC). Nó chính là một yêu cầu sử dụng không gian lưu trữ (yêu cầu sử dụng PV). Thông thường người dùng sẽ tạo một manifest PersistentVolumeClaim, chỉ định số lượng, loại lớp lưu trữ (storage class), yêu cầu các mức tài nguyên CPU, bộ nhớ,... Ngoài ra, PVC còn có thể xác định các chế độ quyền truy cập cụ thể vào vùng lưu trữ (ví dụ như: ReadWriteOnce, ReadOnlyMany or ReadWriteMany - bạn có thể xem thêm chi tiết về các quyền này tại đây). Kubernetes sau đó sẽ dựa vào các thông tin này để tìm và dự trữ dung lượng lưu trữ cần thiết.
Bộ nhớ NFS
Để có thể sử dụng được NFS Persitent Volume thì ngoài có 1 K8s cluster thì bạn cần phải có 1 NFS server. Bạn có thể xem các bài viết Microsoft Hyper-V Server - Cài đặt NFS server
Triển khai NFS PVC
File nfs-pv.yaml dùng để tạo tài nguyên PersistentVolume trên K8s:
kind: PersistentVolume
apiVersion: v1
metadata:
name: nfs-pv
labels:
app: your-app-name
spec:
capacity:
storage: 5Gi # Dung lượng bộ nhớ
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
server: 10.10.10.101
path: '/data-1'
Trong đó:
10.10.10.101
: là IP của NFS server. Bạn cần thiết lập NFS server cho phép K8s cluster có quền truy cập vào mà không cần xác thực (không đòi user + pass)./data-1
: là thư mục trên NFS server mà PersistentVolume sẽ sử dụng. (Bạn phải tạo sẵn thư mục này trên NFS server)
File nfs-pvc.yaml dùng để tạo tài nguyên PersistentVolumeClaim trên K8s:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nfs-pvc
labels:
app: your-app-name
spec:
selector:
matchLabels:
app: your-app-name
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
volumeName: nfs-pv
Lưu ý:
- Tên của PersistentVolume ( Trong ví dụ này:
nfs-pv
) phải không bị trùng lăp với các PersistentVolume khác trên cluster.- Tên của PersistentVolumeClaim ( Trong ví dụ này:
nfs-pvc
) phải không bị trùng lăp với các PersistentVolumeClaim khác trên cùng namespace.
Bây giờ hãy khởi tạo các tài nguyên đó trên K8s cluster:
kubectl apply -f nfs-pv.yaml
kubectl apply -f nfs-pvc.yaml
Ví dụ Deployment sử dụng NFS PVC
File nfs-deployment.yaml dùng để tạo tài nguyên Deployment trên K8s:
apiVersion: apps/v1
kind: Deployment
metadata:
name: assets-cdn
labels:
app: your-app-name
spec:
replicas: 1
selector:
matchLabels:
app: your-app-name
template:
metadata:
labels:
app: your-app-name
spec:
containers:
- name: assets-cdn
image: nginx:alpine
imagePullPolicy: Always
ports:
- containerPort: 80
volumeMounts:
- name: assets
mountPath: '/usr/share/nginx/html'
volumes:
- name: assets
persistentVolumeClaim:
claimName: nfs-pvc
Trong ví dụ này, tài nguyên Deployment sẽ tạo 1 Pod có sử dụng NFS PVC nfs-pvc
mà chúng ta đã tạo ở trên. Hãy thử khởi tạo tài nguyên này trên K8s:
kubectl apply -f nfs-deployment.yaml