- Đăng vào
Thiết lập Kubernetes NFS Subdir External Provisioner
Mở đầu
Ở bài viết trước mình đã trình bày cách Thiết lập và dụng NFS Persistent Volume trên Kubernetes, cách có nhước điểm là phải cấu hình thủ công. Với mỗi PVC bạn phải tạo trước folder riêng cho PVC đó trên NFS server, điều này chúng ta mất thời gian khi cần tạo hoặc quản lý số lượng PVC lớn.
Bài viết này sẽ trình bày cách thiết lập và sử dụng Kubernetes NFS Subdir External Provisioner, công cụ này giúp chúng ta tạo NFS PVC một cách tự động, mỗi PVC sẽ được tự động tạo folder lưu trữ riêng.
Tiến hành
Đầu tiên, chúng ta cần khởi tạo các tài nguyên:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/nfs-subdir-external-provisioner/master/deploy/rbac.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/nfs-subdir-external-provisioner/master/deploy/class.yaml
File class.yaml sau khi được triển khai sẽ tạo tài nguyên
StorageClass
với tên là managed-nfs-storage
Tiếp theo, tạo file deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nfs-client-provisioner
labels:
app: nfs-client-provisioner
# replace with namespace where provisioner is deployed
namespace: default
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: nfs-client-provisioner
template:
metadata:
labels:
app: nfs-client-provisioner
spec:
serviceAccountName: nfs-client-provisioner
containers:
- name: nfs-client-provisioner
image: k8s.gcr.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: k8s-sigs.io/nfs-subdir-external-provisioner
- name: NFS_SERVER
value: 10.10.10.101
- name: NFS_PATH
value: /nfs-data
volumes:
- name: nfs-client-root
nfs:
server: 10.10.10.101
path: /nfs-data
Trong đó:
10.10.10.101
: là ip NFS server của bạn/nfs-data
: là folder dùng để lưu dữ liệu trên NFS server. Bạn cần phải tạo sẵn folder này trên NFS server
Triển khai tài nguyên đó lên K8s:
kubectl apply -f deployment.yaml
Sử dụng
Ở bài viết trước để tạo PVC, chúng ta cần tạo file định nghĩa các tài nguyên PersistentVolume và PersistentVolumeClaim:
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'
---
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
Còn khi sử dụng NFS Subdir External Provisioner thì chỉ cần khai báo tài nguyên PersistentVolumeClaim và sử dụng storageClassName đã tạo ở trên:
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
storageClassName: managed-nfs-storage