在k8s中部署nfs-client-provisioner

1、部署過程

1.1、環境依賴

在部署nfs-client-provisioner之前,需要先部署nfs服務。

因為,nfs-client-provisioner創建的pv都是要在nfs服務器中搭建的。

本示例中的nfs server的地址如下:

[root@node1 /]# showmount -e
Export list for node1:
/data/nfs/rw 192.168.20.0/24

1.2、在集群的每個節點部署nfs工具

執行以下的命令,在每個節點部署nfs工具,后面pod啟動,掛載nfs的存儲會使用

yum install nfs-utils -y

1.3、 創建授權賬戶信息

通過以下yaml文件,創建需要的service account

創建 rbac.yaml

apiVersion: v1
kind: ServiceAccount
metadata:name: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: default
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: nfs-client-provisioner-runner
rules:- apiGroups: [""]resources: ["persistentvolumes"]verbs: ["get", "list", "watch", "create", "delete"]- apiGroups: [""]resources: ["persistentvolumeclaims"]verbs: ["get", "list", "watch", "update"]- apiGroups: ["storage.k8s.io"]resources: ["storageclasses"]verbs: ["get", "list", "watch"]- apiGroups: [""]resources: ["events"]verbs: ["create", "update", "patch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: run-nfs-client-provisioner
subjects:- kind: ServiceAccountname: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: default
roleRef:kind: ClusterRolename: nfs-client-provisioner-runnerapiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: leader-locking-nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: default
rules:- apiGroups: [""]resources: ["endpoints"]verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: leader-locking-nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: default
subjects:- kind: ServiceAccountname: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: default
roleRef:kind: Rolename: leader-locking-nfs-client-provisionerapiGroup: rbac.authorization.k8s.io
kubectl apply -f rbac.yaml 

1.4、部署nfs-client-provisioner服務

創建nfs_client_provisioner.yaml

kind: Deployment
apiVersion: apps/v1
metadata:name: nfs-client-provisioner
spec:replicas: 1selector:matchLabels:app: nfs-client-provisionerstrategy:type: Recreatetemplate:metadata:labels:app: nfs-client-provisionerspec:serviceAccountName: nfs-client-provisionercontainers:- name: nfs-client-provisionerimage: quay.io/vbouchaud/nfs-client-provisioner:latestvolumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesenv:- name: PROVISIONER_NAMEvalue: fuseim.pri/ifs- name: NFS_SERVERvalue: 192.168.20.11- name: NFS_PATHvalue: /data/nfs/rwvolumes:- name: nfs-client-rootnfs:server: 192.168.20.11path: /data/nfs/rw
創建: kubectl apply -f nfs_client_provisioner.yaml 
查看nfs-client pod的狀態:kubectl get pod | grep nfs

1.5創建storageclass

動態存儲的關聯關系,都是通過stroageclass來完成的。通過下面的yaml文件,創建storageclass

創建nfs-storage-class.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: managed-nfs-storage
provisioner: fuseim.pri/ifs
parameters:archiveOnDelete: "false" 

創建: kubectl apply -f nfs-storage-class.yaml

查詢: kubectl get sc

1.6、創建pvc

創建nfs-pvc.yaml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: test-claimannotations:volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"
spec:accessModes:- ReadWriteManyresources:requests:storage: 10Mi

執行:?kubectl apply -f nfs-pvc.yaml

查詢:kubectl get pvc

這個時候會在nfs的目錄創建出一個目錄。這個目錄就是pv的目錄

1.7、創建pod使用pvc

pvc已經創建好了,創建測試pod,使用pvc

創建test-pod.yaml 文件

kind: Pod
apiVersion: v1
metadata:name: test-pod
spec:containers:- name: test-podimage: busybox:1.36command:- "/bin/sh"args:- "-c"- "touch /mnt/SUCCESS && exit 0 || exit 1"volumeMounts:- name: nfs-pvcmountPath: "/mnt"restartPolicy: "Never"volumes:- name: nfs-pvcpersistentVolumeClaim:claimName: test-claim

kubectl apply -f? ?test-pod.yaml

進入nfs server的目錄里,已經創建好了SUCCESS文件

OK,到這里nfs-client-provisioner工具部署成功。

部署完成nfs-client-provisioner之后,創建好pvc,就可以動態的創建nfs的pv了,不需要手動的進行創建。

2、工作原理簡要說明

基本的工作原理就是,nfs-client-provisioner持續的監控api server,查看創建pvc的請求,如果發現請求的pvc的存儲類stroageclass,存儲類的提供者和自己的是一致的就會根據創建的pvc,動態的在nfs中創建pv。

關于nfs-client-provisioner工作流程的描述:

  • 部署 nfs-client-provisioner: 首先,您需要在 Kubernetes 集群中部署 nfs-client-provisioner。您可以通過使用 Kubernetes 配置文件或 Helm Chart 進行部署。這將創建一個運行在集群中的容器,用于監聽 PVC 的創建。
  • 創建 StorageClass:?您需要創建一個?StorageClass,其中定義了與?nfs-client-provisioner?通信所需的配置信息,如 NFS 服務器地址、共享路徑等。
  • 創建 PersistentVolumeClaim(PVC):?當您在集群中創建一個 PVC 并引用了之前定義的?StorageClass,nfs-client-provisioner?將監聽 PVC 的創建。
  • nfs-client-provisioner 的處理:?一旦 PVC 創建,nfs-client-provisioner?會檢測到 PVC 的存在。它會解析 PVC 中定義的存儲需求和?StorageClass?的配置,然后使用這些信息來與 NFS 服務器交互。
  • 創建 PersistentVolume(PV):nfs-client-provisioner?會使用 PVC 請求中的信息,以及?StorageClass?的配置,通過 NFS 協議與 NFS 服務器進行通信,并在 NFS 服務器上創建一個目錄以供存儲。
  • 綁定 PV 和 PVC:?一旦 NFS 服務器上的目錄創建成功,nfs-client-provisioner?將創建一個 PV,并將其與創建 PVC 綁定起來,從而使 PVC 獲得一個可用的 PV。
  • PVC 使用: 現在,PVC 已經與一個動態創建的 PV 綁定。您可以在 Pod 中使用這個 PVC,使 Pod 能夠掛載 NFS 存儲并訪問其中的數據。

通過這個流程,nfs-client-provisioner 實現了動態創建和管理基于 NFS 的 PV,減輕了管理員的工作負擔,同時使開發人員能夠更輕松地使用動態的存儲資源。需要注意的是,確保您在 PVC 和 StorageClass 的定義中提供正確的配置信息,以確保 nfs-client-provisioner 能夠與 NFS 服務器正確交互。

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

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

相關文章

pinia 持久化插件使用

官方文檔 本文主要介紹 vue3組合式 api 使用持久化插件的寫法。 選項式 寫法官方已給出 安裝依賴 pnpm i pinia-plugin-persistedstate插件的使用 import { createPinia } from pinia import piniaPluginPersistedstate from pinia-plugin-persistedstateconst pinia creat…

JavaMap工具類(MapUtils)

1、Object轉Map 2、將 map 中的 value 為null的的元素轉成空字符串"" 3、map轉Object 4、MAP 判空 5、Map 排序 按key值長度進行排序 6、兩個MAP對比,在oldMap中移除remMap中所有的key值 備注:排序的話(TreeMap)是可以直接實現簡單排序的…

VR轉接線方案/VR Link串流數據線方案/VR眼鏡PD快充方案

虛擬現實技術(英文名稱:Virtual Reality,縮寫為VR),又稱虛擬實境或靈境技術,是20世紀發展起來的一項全新的實用技術。虛擬現實技術囊括計算機、電子信息、仿真技術,其基本實現方式是以計算機技術為主,利用并…

Java:commons-lang3中的StringUtils.strip實現移除字符串首尾字符

依賴 <dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version> </dependency>示例 // 包名 import org.apache.commons.lang3.StringUtils;// 處理字符串&…

kafka支持外網訪問

kafka支持外網訪問 1.kafka正常部署之后如果不修改&#xff0c;外網是無法訪問的&#xff0c;具體如下&#xff08;這里是單節點&#xff09; 2.這個時候需要修改kafka的config中的server.properties中的 listeners 修改為0.0.0.0 監控所有網卡&#xff0c;advertised.listene…

管理空閑存儲空間

位示圖是操作系統中一種管理空閑存儲空間的方法。管理空閑除使用位示圖法還可用&#xff1a;空閑區表法&#xff0c;空閑鏈表法&#xff0c;成組鏈接法 1.空閑區表法 空閑表法屬于連續分配方法。它與內存管理中的動態分區分配方法雷同。 將外存空間上一個連續未分配區域稱為“…

[三次反轉法]循環移動數組元素

循環移動 題目描述 給定一組整數&#xff0c;要求利用數組把這組數保存起來&#xff0c;然后實現對數組的循環移動。假定供有n個整數&#xff0c;則要使前面各數順序向后移m個位置&#xff0c;并使最后m個數變為最前面的m個數(m<n)。 注意&#xff0c;不要用先輸出后m個數…

口袋參謀:如何對訂單實現一鍵批量插旗?

?在淘寶店鋪運營中&#xff0c;對寶貝訂單標注插旗&#xff0c;也算是常態了&#xff0c;至少90%的商家都不陌生&#xff0c;剩下的10%是剛入行的新手&#xff0c;正如我剛入行一樣。 01 首先我們要了解什么是插旗&#xff1f; 其實就是淘寶店鋪利用各種顏色的旗子來代表訂單…

A-23 P離子交換樹脂:高效去除無機有機污染物的新選擇

在當今水處理行業中&#xff0c;高效、環保的離子交換樹脂備受關注。本文將為您介紹一款具有卓越性能的堿性季胺基陰離子交換樹脂——Tulsion A-23 P。通過分析其特性和應用&#xff0c;展示其在水處理領域的優勢。 一、Tulsion A-23 P離子交換樹脂的特性 物理化學穩定性&#…

Vue生命周期函數執行順序(使用注意事項)

文章目錄 beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestroydestroyed Vue.js 是一個基于 MVVM 模式的前端框架&#xff0c;它的核心是一個響應式的數據綁定系統。在 Vue.js 中&#xff0c;組件是一個可復用的 Vue 實例&#xff0c;它擁有自己的生命周期…

input聚焦,失去焦點的那些事

需求&#xff1a; 1&#xff1a;搜索輸入時顯示清空按鈕和搜索按鈕&#xff1b; 2&#xff1a;點擊搜索按鈕失去焦點&#xff0c;并查詢&#xff1b; 3&#xff1a;點擊清空按鈕后重新聚焦&#xff1b; 需要解決的問題&#xff1a; 1&#xff1a;失去焦點需要別的處理的話要加…

Linux命令——nc

Linux命令——nc 文章目錄 Linux命令——nc例子客戶端/服務端模型數據傳輸與服務端交互端口掃描使用代理發送文件聊天工具一次性 Web Server文件夾傳輸遠程克隆磁盤shell反向 shell 參考 netcat&#xff0c;簡寫為 nc&#xff0c;是 unix 系統下一個強大的命令行網絡通信工具&a…

JS手寫Promise.all方法

測試例子 var f11 Promise.resolve("111");var f22 Promise.resolve("222");var f33 Promise.resolve("333");// var f33 Promise.reject("333");1、用原生 Promise 實現 邏輯說明&#xff1a;接收一個由多個promise方法組成的數組…

uniapp開發小程序-pc端小程序下載后端接口的二進制流文件

fileName包含文件名后綴名&#xff0c;比如test.png這種格式 api.DownloadTmtFile后端接口返回的是文件的二進制流 值得注意的是&#xff0c;微信開發者工具中是測試不了wx.saveFileToDisk的&#xff0c;需要真機或者體驗版測試 handleDownload(fileName) {if (!fileName) retu…

mysql表的字段建議加上NOT NULL約束

mysql的列加上NOT NULL約束&#xff0c;這是一個好的實踐&#xff08;但不是一個強制要求&#xff09;&#xff0c;因為它能帶來一些好處&#xff0c;例如&#xff1a; 設置為NOT NULL&#xff0c;可以確保該列沒有NULL值&#xff0c;對該列的數據的規范性進行約束。加上NOT N…

大文件傳輸軟件和傳統軟件的優缺點

在當前信息時代&#xff0c;文件和數據的傳輸已成為我們工作和生活中不可或缺的一環。無論是向同事發送報告還是與朋友分享電影&#xff0c;我們都需要依賴軟件完成這些操作。然而&#xff0c;隨著文件和數據容量的增大&#xff0c;傳統的文件傳輸軟件如FTP、HTTP、SMB、NFS等已…

pycharm中py文件設置參數

在py文件中右鍵 直接對應復制進去即可

sql35(Leetcode1204最后一個能進入巴士的人)

代碼&#xff1a; from t1,t2 自連接 兩兩組合 group by having 求和 選出<1000的項 # Write your MySQL query statement below select a.person_name from Queue a, Queue b where a.turn>b.turn group by a.person_id having sum(b.weight)<1000 order by a.t…

Android:The emulator process for AVD Pixel_2_API_29 was killed

The emulator process for AVD Pixel_2_API_29 was killed 報錯描述&#xff1a; 第一次安裝Android studio好不容易解決gradle啟動模擬器又出現了以下錯誤 The emulator process for AVD Pixel_2_API_29 was killed原因一&#xff1a; 需要安裝Intel x86 Emulator Acceleer…

開啟AI時代產品管理新篇章——寫給產品經理的一本跨界書

在數字化時代&#xff0c;產品經理的角色和能力要求不斷演變。徐修建所著的《搜廣推策略產品經理——互聯網大廠搜索廣告推薦案例》恰逢其時&#xff0c;為新時代的產品經理提供了寶貴的指南。 首先&#xff0c;它通過通俗易懂的語言和生動案例&#xff0c;成功揭示了互聯網大廠…