前言
本文為「Kubernetes 實作手冊:基礎入門篇」課程的學習筆記。
簡介
NFS(Network File System)即網路檔案系統,是一種分散式檔案系統,使客戶端主機可以存取伺服器端的檔案,並且其過程與存取本地儲存時一樣。
使用 NFS 伺服器,可以讓 Pod 被重新部署到任一節點時,仍然能夠與其他 Pod 共享相同的儲存資源。
實作
以下使用 kind 的環境。
1 | cd vagrant/kind |
安裝 NFS 伺服器
安裝 nfs-kernel-server
套件。
1 | sudo apt-get -y install nfs-kernel-server |
在根目錄建立 nfsshare
資料夾。
1 | sudo mkdir /nfsshare |
將相關權限寫入 /etc/exports
設定中。
1 | echo "/nfsshare *(rw,sync,no_root_squash)" | sudo tee /etc/exports |
- 權限
rw
代表可讀寫。 - 權限
sync
代表可同步寫入記憶體和硬碟。 - 權限
no_root_squash
代表用戶進入後即變為 root 角色。
載入 /etc/exports
設定。
1 | sudo exportfs -r |
列出 NFS 伺服器所分享出來的資料夾。
1 | sudo showmount -e |
存取 NFS 伺服器
查看範例資料夾中的 Deployment 配置檔。
1 | cat introduction/storage/nfs/deploy.yaml |
使用 ifconfig
指令查詢虛擬機的 IP 位址。
1 | ifconfig |
配置檔如下,將 NFS Server 的 IP 位址修改為虛擬機的 IP 位址:
1 | apiVersion: apps/v1 |
使用配置檔創建 Deployment 資源。
1 | kubectl apply -f introduction/storage/nfs/deploy.yaml |
查看 Pod 列表。
1 | kubectl get pods |
檢查其中一個 Pod 資源。
1 | kubectl describe pod nfs-dir-65f48c4f84-2ttnj |
由於 Pod 之中沒有 NFS 的客戶端套件,因次無法成功部署。
1 | Events: |
先更新各個節點上的儲存褲列表。
1 | docker exec kind-control-plane sed -i -re 's/([a-z]{2}.)?archive.ubuntu.com|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list |
先更新各個節點上的套件。
1 | docker exec kind-control-plane apt-get -y update |
在各個節點上安裝 NFS 的客戶端套件
1 | docker exec kind-control-plane apt-get -y install nfs-common |
進到其中一個 Pod 資源,在共享的資料夾新增一個檔案。
1 | cd /test |
使用另一個終端機視窗進入虛擬機,查看共享的資料夾,會新增一個檔案。
1 | ls /nfsshare |
同時讀寫
查看範例資料夾中的 Deployment 配置檔。
1 | cat introduction/storage/nfs/write.yaml |
配置檔如下,將 NFS Server 的 IP 位址修改為虛擬機的 IP 位址:
1 | apiVersion: apps/v1 |
使用配置檔創建 Deployment 資源。
1 | kubectl apply -f introduction/storage/nfs/write.yaml |
使用 tail
指令監聽 data
檔案,可以看到檔案被不停地讀寫。
1 | tail -f data |
存取模式
NFS 支援以下存取模式:
- ReadWriteOnce
- ReadOnlyMany
- ReadWriteMany