本文將介紹,透過 kubernetes 建立 NFS 服務,而 Storage class 我們將會使用 CEPH RBD 做儲存空間。
下圖是建立在 kubernetes 建立一個 NFS 服務時,所使用的流程圖。
行前注意
- 建立好 kubernetes 集群(建立集群文章)。
- 在 kubernetes 已擁有 CEPH 服務(使用 Rook 建立 CEPH 儲存架構)。
Outline
- Step 1: 建立 StorageClass
- Step 2: 建立 PVC 與 StorageClass 連接
- Step 3: Deploy NFS Operator
- Step 4: 建立 Pod 與 PVC 連接
- Step 5: 讓外部機器可以連接到 nfs server
Step 1: 建立 StorageClass
透過 yaml 檔建立 CEPH RBD StorageClass。
$ kubectl create -f rook/cluster/examples/kubernetes/ceph/csi/rbd/storageclass.yaml$ kubectl get storageclass
Step 2: 建立 PVC 與 StorageClass 連接
$ kubectl create -f ceph-nfs-pvc.yaml
Step 3: Deploy NFS Operator
$ git clone https://github.com/rook/rook.git
$ cd rook/cluster/examples/kubernetes/nfs
$ kubectl create -f common.yaml
$ kubectl create -f provisioner.yaml
$ kubectl create -f operator.yaml
Step 4: 建立 Pod 與 PVC 連接
先加入 ServiceAccount,這部分蠻重要的,因為官網是沒有提到需要加入 Service Account 的,但是若是沒有設定的話,就會沒有權限建立 POD。
$ kubectl create -f nfs-ceph-pod.yaml
Step 5: 讓外部機器可以連接到 NFS server
當我們 NFS 建立完成後,我們已經擁有對內部的分享資料的功能了,但我們時常需要讓外部不屬於 Cluster 的機器連到 container 做事情,這時候就必須透過 NodePort 開啟 Port ,讓外部的機器可以連進 NFS service 中。
$ kubectl -n rook-nfs get svc -o yaml >> rook-nfs-svc-backup.yaml
$ cp rook-nfs-svc-backup.yaml rook-nfs-svc.yaml
$ vim rook-nfs-svc.yamlLine:76
type: ClusterIP --> type: NodePort
$ kubectl apply -f rook-nfs-svc.yaml
$ kubectl -n rook-nfs get all -o wide
外部 Port 就開好了,分別是 30377, 31431。
換到其他想連接到 nfs 的機器上。
$ apt-get install nfs-common
$ mkdir -p /mnt/nfs/var/nfsshare
$ mount -t nfs -o port=30377 master_node_IP:/ /mnt/nfs/var/nfsshare/