透過 K8S 建立 NFS 服務

黃馨平
Jackycsie
Published in
5 min readSep 25, 2020

本文將介紹,透過 kubernetes 建立 NFS 服務,而 Storage class 我們將會使用 CEPH RBD 做儲存空間。

下圖是建立在 kubernetes 建立一個 NFS 服務時,所使用的流程圖。

參考資料

行前注意

  1. 建立好 kubernetes 集群(建立集群文章)。
  2. 在 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.yaml
Line: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/

參考資料

--

--

黃馨平
Jackycsie

閱讀本是尋常事,繁華靜處遇知音