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