您好,登錄后才能下訂單哦!
特別說明:測試使用,不建議生產環境
1、在master節點配置(node1)
1)yum安裝nfs
# yum -y install nfs-utils
NFS的關鍵工具包括:
主要配置文件:/etc/exports;
NFS文件系統維護命令:/usr/bin/exportfs;
共享資源的日志文件: /var/lib/nfs/*tab;
客戶端查詢共享資源命令: /usr/sbin/showmount;
端口配置: /etc/sysconfig/nfs。
2)新建共享目錄
# mkdir -p /data/volunes
3)設置Nfs權限
# cat /etc/exports
權限參數說明:
ro ?只讀訪問
rw ?讀寫訪問
sync ? ?所有數據在請求時寫入共享
async ? nfs在寫入數據前可以響應請求
secure ?nfs通過1024以下的安全TCP/IP端口發送
insecure ? ?nfs通過1024以上的端口發送
wdelay ?如果多個用戶要寫入nfs目錄,則歸組寫入(默認)
no_wdelay ? 如果多個用戶要寫入nfs目錄,則立即寫入,當使用async時,無需此設置
hide ? ?在nfs共享目錄中不共享其子目錄
no_hide 共享nfs目錄的子目錄
subtree_check ? 如果共享/usr/bin之類的子目錄時,強制nfs檢查父目錄的權限(默認)
no_subtree_check ? ?不檢查父目錄權限
all_squash ?共享文件的UID和GID映射匿名用戶anonymous,適合公用目錄
no_all_squash ? 保留共享文件的UID和GID(默認)
root_squash root用戶的所有請求映射成如anonymous用戶一樣的權限(默認)
no_root_squash ?root用戶具有根目錄的完全管理訪問權限(不安全)
anonuid=xxx 指定nfs服務器/etc/passwd文件中匿名用戶的UID
anongid=xxx 指定nfs服務器/etc/passwd文件中匿名用戶的GID
4)啟動服務
# systemctl enable nfs.service
# systemctl start nfs.service
# exportfs ?-arv #不用重啟nfs服務,配置文件就會生效
2、在節點node2和node3配置Nfs
1)安裝
yum -y install nfs-utils
2)在node3和node2上掛載:
# mount -t nfs 172.160.45.160:/data/volunes/ /mnt
3、檢查
1)#查看 RPC 服務的注冊狀況
rpcinfo -p localhost
2)#showmount測試
showmount -e 172.160.45.160
4、kubernetes使用NFS共享存儲有兩種方式:
#手動方式靜態創建所需要的PV和PVC;
#通過創建PVC動態地創建對應PV,無需手動創建PV;
################靜態創建#######################
1)靜態申請PV卷
PersistentVolumes,是k8s抽象化的存儲資源,主要包括存儲能力、訪問模式、存儲類型、回收策略等關鍵信息.PV是k8s實際對接存儲后端的真正入口;
#創建pv對應目錄
# mkdir -p /data/volunes/v{1,2,3}
#配置exportrs
# cat /etc/exports
#立即生效
# exportfs ?-arv
2)創建pv文件
# vim nfs-pv1.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv1
labels:
pv: nfs-pv1
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle
storageClassName: nfs
nfs:
path: /data/volunes/v1
server: 172.160.45.160
nfs-pv2.yaml類似
配置說明:
① capacity 指定 PV 的容量為 1G。
② accessModes 指定訪問模式為 ReadWriteOnce,支持的訪問模式有:
ReadWriteOnce(RWO):讀寫權限,但是只能被單個節點掛載;
ReadOnlyMany(ROX):只讀權限,可以被多個節點掛載;
ReadWriteMany(RWX):讀寫權限,可以被多個節點掛載;
③ persistentVolumeReclaimPolicy 指定當 PV 的回收策略為 Recycle,支持的策略有:
Retain(保留)- 保留數據,不會再分配給pvc,需要管理員手工清理數據;
Recycle(回收)- 清除 PV 中的數據,保留pv資源,可以留供其他pvc使用;
Delete(刪除)- 刪除整個pv資源及內部的數據;
④ storageClassName 指定 PV 的 class 為 nfs。相當于為 PV 設置了一個分類,PVC 可以指定 class 申請相應 class 的 PV。
⑤ 指定 PV 在 NFS 服務器上對應的目錄。
#創建pv的pod
# kubectl create-f nfs-pv1.yaml
# kubectl get pv
狀態Available,表示 pv就緒,可以被 PVC 申請;
3)創建PVC
PersistentVolumeClaims,是對PV資源的一種聲明,pvc綁定實體資源pv后,pod通過綁定pvc來使用pv資源.PVC是k8s的一種抽象化的聲明式綁定存儲資源的管理模式的中間層,pod無法直接通過pv使用存儲資源,必須經過pvc,而pvc必須要綁定pv實體后,才可被pod使用;
# vim nfs-pvc2.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc2
spec:
accessModes:
- eadWriteMany
resources:
requests:
storage: 1Gi
storageClassName: nfs
selector:
matchLabels:
pv: nfs-pv2
執行yaml文件創建 pvc
# kubectl create -f nfs-pvc1.yaml
查看pv資源
備注:pv對應綁定的PVC
4)創建pod
[root@node1 yaml]# vim nfs-nginx.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx-test
labels:
name: nignx-test
spec:
replicas: 3
selector:
name: nginx-test
template:
metadata:
labels:
name: nginx-test
spec:
containers:
- name: web01
image: docker.io/nginx:1.14.2
volumeMounts:
- mountPath: "/usr/share/nginx/html/"
name: nfs-pv1
- mountPath: "/var/log/nginx/"
name: nfs-pv2
ports:
- containerPort: 80
volumes:
- name: nfs-pv1
persistentVolumeClaim:
claimName: nfs-pvc1
- name: nfs-pv2
persistentVolumeClaim:
claimName: nfs-pvc2
備注:
# nfs-pv1存儲網頁文件,nfs-pv2日志文件
#執行文件
# kubectl create -f nfs-nginx.yaml
# kubectl get pods -o wide
#創建nfs-nginx-server文件
# cat nfs-nginx-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-test
labels:
name: nginx-test
spec:
type: NodePort
ports:
- port: 80
protocol: TCP
targetPort: 80
name: http
nodePort: 30088
selector:
name: nginx-test
#執行文件
# kubectl create -f nfs-nginx-svc.yaml
# kubectl get svc
5)驗證 PV 是否可用
測試頁面:
#內部
#外網
備注說明: nfs自身沒有冗余能力,數據盤損壞易丟失數據;建議使用:glusterfs或cephfs分布式存儲;
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。