Kubernetes 卷存儲 NFS | nfs搭建配置 原理介紹 nfs作為存儲卷使用

目錄

    • 1、NFS介紹
    • 2、NFS服務部署
      • 2.1安裝nfs服務 (服務端配置)
      • 2.2啟動NFS服務
      • 2.3 服務檢查
      • 2.4 客戶端配置
    • 3、nfs作為存儲卷使用
      • 3.1 nfs作為volume
      • 3.2 nfs存儲的缺點
      • 3.3 nfs作為PersistentVolum
    • 4、nfs作為動態存儲提供
    • 5、總結

1、NFS介紹

NFS(Network File System)是一種分布式文件系統協議,允許客戶端遠程訪問服務器上的文件,實現數據共享。它整合多個存儲設備為統一文件系統,方便數據存儲和管理,支持負載均衡和故障轉移,確保服務高可用和可擴展。但需注意,NFS依賴網絡環境,網絡狀況影響其性能,且配置管理需技術經驗。
nfs端口:2049
RPC端口:111w

nfs原理
工作原理主要基于客戶端-服務器架構。在NFS環境中,服務器端運行NFS服務,將本地文件系統中的文件共享給網絡上的其他計算機。客戶端通過掛載遠程NFS共享,可以像訪問本地文件系統一樣訪問這些共享文件。
NFS 使用RPC(Remote Procedure Call)的機制進行實現,RPC使得客戶端可以調用服務端的函數。同時,由于有 VFS 的存在,客戶端可以像使用其它普通文件系統一樣使用 NFS 文件系統。經由操作系統的內核,將 NFS 文件系統的調用請求通過 TCP/IP 發送至服務端的 NFS 服務。NFS服務器執行相關的操作,并將操作結果返回給客戶端。
在這里插入圖片描述
1.首先服務器端啟動RPC服務,并開啟111端口

2.服務器端啟動NFS服務,并向RPC注冊端口信息

3.客戶端啟動RPC(portmap服務),向服務端的RPC(portmap)服務請求服務端的NFS端口

4.服務端的RPC(portmap)服務反饋NFS端口信息給客戶端。

5.客戶端通過獲取的NFS端口來建立和服務端的NFS連接并進行數據的傳輸。

NFS服務主要進程包括:

  • rpc.nfsd:最主要的NFS進程,管理客戶端是否可登錄
  • rpc.mountd:掛載和卸載NFS文件系統,包括權限管理
  • rpc.lockd:非必要,管理文件鎖,避免同時寫出錯
  • rpc.statd:非必要,檢查文件一致性,可修復文件

nfs的關鍵工具包括:

  • 主要配置文件:/etc/exports
  • NFS文件系統維護命令:/usr/bin/exportfs;
  • 共享資源的日志文件: /var/lib/nfs/*tab;
  • 客戶端查詢共享資源命令: /usr/sbin/showmount;
  • 端口配置: /etc/sysconfig/nfs。

2、NFS服務部署

在NFS服務器端的主要配置文件為/etc/exports時,通過此配置文件可以設置共享文件目錄。每條配置記錄由NFS共享目錄、NFS客戶端地址和參數這3部分組成,格式如下:

[NFS共享目錄] [NFS客戶端地址1(參數1,參數2,參數3……)]

NFS共享目錄:服務器上共享出去的文件目錄;
NFS客戶端地址:允許其訪問的NFS服務器的客戶端地址,可以是客戶端IP地址,也可以是一個網段(192.168.64.0/24);
訪問參數:括號中逗號分隔項,主要是一些權限選項。
訪問權限參數

選項描述
ro客戶端對于共享文件目錄為只讀權限。(默認設置)
rw客戶端對共享文件目錄具有讀寫權限。

Kubernetes的NFS存儲用于將某事先存在的NFS服務器導出export的存儲空間掛載到Pod中來供Pod容器使用。與emptyDir不同的是,NFS存儲在Pod對象終止后僅是被卸載而非刪除。另外,NFS是文件系統及共享服務,它支持同時存在多路掛載請求。定義NFS存儲時,常用到以下字段。

2.1安裝nfs服務 (服務端配置)

#ubuntu部署
sudo apt install nfs-kernel-server#centos部署
yum -y install rpcbind nfs-util#創建要共享的目錄
mkdir /data/redis -p    #/data/redis:NFS服務要共享的目錄#編輯NFS配置并加入以下內容
vim /etc/exports        #NFS的配置文件,默認文件內容為空(無任何共享)
/data/redis 192.168.31.0/24(rw,sync,no_all_squash,no_subtree_check,no_root_squash)
#載入配置
exportfs -rv

在這里插入圖片描述

/data/redis 192.168.31.0/24(rw,sync,no_all_squash,no_subtree_check,no_root_squash)
/data/redis 192.168.31.0/24(rw,no_root_squash) #兩者效果一樣
#設置/redis為共享目錄,允許192.168.31.0/24網段的IP地址主機訪問,也可以寫 * ,表示所有地址都可以訪問NFS服務
#rw:訪問到此目錄的服務器都具備讀寫權限
#sync:數據同步寫入內存和硬盤 默認同步,可不寫入
#no_all_squash:所有用戶對根目錄具備完全管理訪問權限 默認禁用all_squash,可不寫入
#no_subtree_check:不檢查父目錄的權限 默認禁用subtree_check,可不寫入
#root_squash選項會將這個root用戶映射成一個非特權用戶,此處禁用 no_root_squash

2.2啟動NFS服務

#ubuntu啟動
systemctl start nfs-kernel-server#centos啟動
systemctl start rpcbind //一定要先開啟rpcbind服務
systemctl start nfs //如服務已啟動,更改完配置信息后需要重啟服務

設置開機自啟

systemctl enable rpcbindsystemctl enable nfs-server

2.3 服務檢查

showmount -e localhost
exportfs -v

可以看到redis共享目錄信息
在這里插入圖片描述

2.4 客戶端配置

1.1.檢查并安裝軟件

rpm -q rpcbind nfs-utils
yum install -y rpcbind nfs-utils
systemctl start rpcbind && systemctl start nfs
systemctl enable rpcbind && systemctl enable nfs-server

2.將共享目錄掛載到本地

mount -t nfs 服務端地址:/共享目錄  /mnt
showmount -e  服務端地址

在這里插入圖片描述

2.5 服務測試
在服務端共享目錄創建文件,在客戶端掛載目錄可以看到

cd /data/redis
echo "hello world" >>hello.txt

在這里插入圖片描述

cd /mnt/  && cat hello.txt 

在這里插入圖片描述
注:也可以客戶端寫入,服務端查看 (客戶端需要有權限)

3、nfs作為存儲卷使用

3.1 nfs作為volume

nfs可以直接作為存儲卷使用
下面是一個redis部署的YAML配置文件。在此示例中,redis在容器中的持久化數據保存在/data目錄下;存儲卷使用nfs,nfs的服務地址為:192.168.8.150,存儲路徑為:/k8s-nfs/redis/data。容器通過volumeMounts.name的值確定所使用的存儲卷。

vi redis.yaml
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:name: redis
spec:selector:matchLabels:app: redisrevisionHistoryLimit: 2template:metadata:labels:app: redisspec:containers:# 應用的鏡像- image: redisname: redisimagePullPolicy: IfNotPresent# 應用的內部端口ports:- containerPort: 6379name: redis6379env:- name: ALLOW_EMPTY_PASSWORDvalue: "yes"- name: REDIS_PASSWORDvalue: "redis"   # 持久化掛接位置,在docker中 volumeMounts:- name: redis-persistent-storagemountPath: /datavolumes:# 宿主機上的目錄- name: redis-persistent-storagenfs:path: /data/redisserver: 192.168.200/30
 kubectl apply -f redis.yaml

3.2 nfs存儲的缺點

基于上述過程可以發現用戶在使用nfs或者其他類似的存儲時,要求較高:

1、需要了解底層存儲用的是什么

2、需要存儲服務器的地址,以及因此帶來的安全問題

3、在存儲服務器創建相應的存儲目錄
在這里插入圖片描述
因此,為了能夠屏蔽底層存儲實現的細節,方便用戶使用, kubernetes引入PV和PVC兩種資源對象。

3.3 nfs作為PersistentVolum

在Kubernetes當前版本的中,可以創建類型為nfs的持久化存儲卷,用于為PersistentVolumClaim提供存儲卷。在下面的PersistenVolume YAML配置文件中,定義了一個名為nfs-pv的持久化存儲卷,此存儲卷提供了5G的存儲空間,只能由一個PersistentVolumClaim進行可讀可寫操作。此持久化存儲卷使用的nfs服務器地址為192.168.5.150,存儲的路徑為/tmp。

vi nfs-pv.yaml
apiVersion: v1 
kind: PersistentVolume 
metadata: name: nfs-pv 
spec: capacity: storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Recycle storageClassName: slow mountOptions: - hard - nfsvers=4.1# 此持久化存儲卷使用nfs插件 nfs:# nfs共享目錄為/data/redis path: /data/redis# nfs服務器的地址server: 192.168.200.30

通過執行如下的命令可以創建上述持久化存儲卷:

kubectl create -f nfs-pv.yaml

存儲卷創建成功后將處于可用狀態,等待PersistentVolumClaim使用。PersistentVolumClaim會通過訪問模式和存儲空間自動選擇合適存儲卷,并與其進行綁定。

4、nfs作為動態存儲提供

部署nfs-provisioner 實現PV 動態供給(StorageClass)直通車

5、總結

1.NFS服務多用于局域網內
2.共享目錄權限要適應實際生產環境
3.搭建服務時一定要先啟動rpc后啟動nfs
4.配置文件中的信息格式一定要對,否則報錯

參考資料
1.《Persistent Volumes》地址:https://kubernetes.io/docs/concepts/storage/persistent-volumes/
2.《Storage Classes》地址:https://kubernetes.io/docs/concepts/storage/storage-classes/
3.《Dynamic Volume Provisioning》地址:https://kubernetes.io/docs/concepts/storage/dynamic-provisioning/
4.《Volums》地址:
https://kubernetes.io/docs/concepts/storage/volumes/
5.《nfs》地址:
https://github.com/kubernetes-incubator/external-storage/tree/master/nfs

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/696863.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/696863.shtml
英文地址,請注明出處:http://en.pswp.cn/news/696863.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

4.pom文件介紹Maven常用命令

1.pom.xml文件介紹. 1.1project標簽和modelVersion標簽介紹. pom.xml文件是maven的核心文件,POM(Project Object Model,項目對象模型)定義了項目的基本信息,用于描述如何構建,聲明項目依賴;; 1.2依賴坐標介紹. 依賴的…

得物面試:Kafka消息0丟失,如何實現?

得物面試:Kafka消息0丟失,如何實現? 尼恩說在前面 在40歲老架構師 尼恩的讀者交流群(50)中,最近有小伙伴拿到了一線互聯網企業如得物、阿里、滴滴、極兔、有贊、希音、百度、網易、美團的面試資格,遇到很多很重要的面…

新版Java面試專題視頻教程——多線程篇②

新版Java面試專題視頻教程——多線程篇② 0. 問題匯總0.1 線程的基礎知識0.2 線程中并發安全0.3 線程池0.4 使用場景 1.線程的基礎知識2.線程中并發鎖3.線程池3.1 說一下線程池的核心參數(線程池的執行原理知道嘛)3.2 線程池中有哪些常見的阻塞隊列Array…

高級語言期末2014級A卷

1.編寫函數 int delarr(int a[] ,int n),刪除有n個元素的正整型數組a中所有素數,要求: 1)數組a中剩余元素保持原來次序; 2)將處理后的數組輸出; 3)函數值返回剩余元素個數&#xff1…

MySQL索引面試題(高頻)

文章目錄 前言什么時候需要(不需要))使用索引?有哪些優化索引的方法前綴索引優化索引覆蓋優化索引失效場景 總結 前言 今天來講一講 MySQL 索引的高頻面試題。主要是針對前一篇文章 MySQL索引入門(一文搞定)進行查漏補…

虛擬機的內存結構

一、摘要 熟悉 Java 語言特性的同學都知道,相比 C、C 等編程語言,Java 無需通過手動方式回收內存,內存中所有的對象都可以交給 Java 虛擬機來幫助自動回收;而像 C、C 等編程語言,需要開發者通過代碼手動釋放內存資源&…

MedicalGPT 訓練醫療大模型,實現了包括增量預訓練、有監督微調、RLHF(獎勵建模、強化學習訓練)和DPO(直接偏好優化)

MedicalGPT 訓練醫療大模型,實現了包括增量預訓練、有監督微調、RLHF(獎勵建模、強化學習訓練)和DPO(直接偏好優化)。 MedicalGPT: Training Your Own Medical GPT Model with ChatGPT Training Pipeline. 訓練醫療大模型,實現了包括增量預訓練、有監督微…

Linux第63步_為新創建的虛擬機添加必要的目錄和安裝支持linux系統移植的軟件

1、創建必要的目錄 1)、創建“/home/zgq/linux/”目錄 打開終端,進入“/home/zgq/”目錄 輸入“mkdir linux回車”,創建“/home/zgq/linux/”目錄 輸入“ls回車”,列舉“/home/zgq/”目錄的所有文件和文件夾 創建好“/home/zgq/linux/”…

EIS(防抖):meshflow算法 C++實現

視頻防抖的應用 對視頻防抖的需求在許多領域都有。 這在消費者和專業攝像中是極其重要的。因此,存在許多不同的機械、光學和算法解決方案。即使在靜態圖像拍攝中,防抖技術也可以幫助拍攝長時間曝光的手持照片。 在內窺鏡和結腸鏡等醫療診斷應用中&…

Go 中的 init 如何用?它的常見應用場景有哪些呢?

嗨,大家好!我是波羅學。本文是系列文章 Go 技巧第十六篇,系列文章查看:Go 語言技巧。 Go 中有一個特別的 init() 函數,它主要用于包的初始化。init() 函數在包被引入后會被自動執行。如果在 main 包中,它也…

QT基本組件

四、基本組件 Designer 設計師(重點) Qt包含了一個Designer程序,用于通過可視化界面設計開發界面,保存文件格式為.ui(界面文件)。界面文件內部使用xml語法的標簽式語言。 在Qt Creator中創建文件時&#xf…

滾雪球學Java(67):深入理解 TreeMap:Java 中的有序鍵值映射表

咦咦咦,各位小可愛,我是你們的好伙伴——bug菌,今天又來給大家普及Java SE相關知識點了,別躲起來啊,聽我講干貨還不快點贊,贊多了我就有動力講得更嗨啦!所以呀,養成先點贊后閱讀的好…

機器人內部傳感器閱讀筆記及心得-位置傳感器-旋轉變壓器、激光干涉式編碼器

旋轉變壓器 旋轉變壓器是一種輸出電壓隨轉角變化的檢測裝置,是用來檢測角位移的,其基本結構與交流繞線式異步電動機相似,由定子和轉子組成。 旋轉變壓器的原理如圖1所示,定子相當于變壓器的一次側,有兩組在空間位置上…

MyBatis-Plus 優雅實現數據加密存儲

文章目錄 前言一、數據庫字段加解密實現1. 定義加密類型枚舉2. 定義AES密鑰和偏移量3. 配置定義使用的加密類型4. 加密解密接口5. 解密解密異常類6. 加密解密實現類6.1 AES加密解密實現類6.2 Base64加密解密實現類 7. 實現數據庫的字段保存加密與查詢解密處理類8. MybatisPlus配…

使用python進行量化交易

yfinance yfinance國內不能使用,可以使用tushare、akshare代替 import yfinance as yf# 輸入股票代碼 stock_symbol AAPL # 替換為你想要查詢的股票代碼# 獲取股票數據 data yf.download(stock_symbol)# 打印實時數據 print(data)pip install akshare import …

Selenium安裝與配置

文章目錄 一、selenium安裝1. Python環境準備:2. 安裝Selenium:3. 瀏覽器驅動安裝:4. 驗證安裝: 二、常見問題1. Selenium版本與瀏覽器驅動程序不兼容:2. 瀏覽器驅動程序路徑未正確設置: Selenium是一個用于…

2024年1月手機市場行業分析:蘋果手機份額驟降,國產高端手機成功逆襲!

小米Ultra發布。 一方面,我們有望看到國產手機再一次超越自己的決心,繼續創新追逐高端;另一方面,我們也不得不正視目前手機市場所面臨的危機狀態。 2024年1月的線上手機市場遠不如去年。根據鯨參謀數據顯示,今年1月京…

Qt(C++)面試題 | 精選25項常問

面試是每個求職者都必須經歷的一關,而QT面試更是需要面試者有深厚的編程基礎和豐富的實戰經驗。下面我們為大家整理了25道QT面試題,希望能夠幫助大家在求職路上獲得成功。 ?Qt 中常用的五大模塊是哪些? Qt 中常用的五大模塊包括: QtCore:提供了 Qt 的核心功能,例如基本的…

Java面試題之分布式/微服務篇

經濟依舊不景氣啊,如此大環境下Java還是這么卷,又是一年一次的金三銀四。 兄弟們,你準備好了嗎?沖沖沖!歐里給! 分布式/微服務相關面試題解 題一:CAP理論,BASE理論題二:…

深度神經網絡

包括:深度前饋神經網絡、深度卷積神經網絡、深度循環神經網絡 深度神經網絡全面概述:從基本概念到實際模型和硬件基礎-騰訊云開發者社區-騰訊云