K8S 部署 NFS Dynamic Provisioning(動態存儲供應)

K8S 部署 NFS Dynamic Provisioning(動態存儲供應)

本文檔提供完整的 K8s NFS 動態存儲部署流程,包含命名空間創建、RBAC 權限配置、Provisioner 部署、StorageClass 創建及驗證步驟。

2. 部署步驟

2.1 創建命名空間

首先創建獨立的命名空間 nfs-storageclass,用于隔離 NFS 相關資源:

kubectl create namespace nfs-storageclass

2.2 創建 ServiceAccount 和 RBAC 權限

NFS Provisioner 需要特定權限才能管理 PV/PVC 資源,通過 nfs-rbac.yaml 配置權限:

apiVersion: v1
kind: ServiceAccount
metadata:name: nfs-client-provisioner# 與命名空間保持一致namespace: nfs-storageclass
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: nfs-client-provisioner-runner
rules:# 權限1:獲取節點信息- apiGroups: [""]resources: ["nodes"]verbs: ["get", "list", "watch"]# 權限2:管理 PV(創建/刪除/查看)- apiGroups: [""]resources: ["persistentvolumes"]verbs: ["get", "list", "watch", "create", "delete"]# 權限3:管理 PVC(查看/更新)- apiGroups: [""]resources: ["persistentvolumeclaims"]verbs: ["get", "list", "watch", "update"]# 權限4:查看 StorageClass- apiGroups: ["storage.k8s.io"]resources: ["storageclasses"]verbs: ["get", "list", "watch"]# 權限5:創建事件(用于狀態通知)- 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-provisionernamespace: nfs-storageclass
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-provisionernamespace: nfs-storageclass
rules:# 權限:管理 endpoints(用于 Provisioner  leader 選舉)- apiGroups: [""]resources: ["endpoints"]verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: leader-locking-nfs-client-provisionernamespace: nfs-storageclass
subjects:- kind: ServiceAccountname: nfs-client-provisionernamespace: nfs-storageclass
roleRef:kind: Rolename: leader-locking-nfs-client-provisionerapiGroup: rbac.authorization.k8s.io

2.3 部署 NFS Provisioner

NFS Provisioner 是動態生成 PV 的核心組件,需先拉取鏡像并配置部署文件。

2.3.2 編寫部署文件 nfs-deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:name: nfs-client-provisionernamespace: nfs-storageclass
spec:replicas: 1  # 單副本(避免多副本競爭)selector:matchLabels:app: nfs-client-provisionerstrategy:type: Recreate  # 重建策略(避免滾動更新導致的狀態不一致)template:metadata:labels:app: nfs-client-provisionerspec:serviceAccountName: nfs-client-provisioner  # 關聯前面創建的 ServiceAccountcontainers:- name: nfs-client-provisionerimage: docker.1ms.run/dyrnq/nfs-subdir-external-provisioner:v4.0.2  # 鏡像名volumeMounts:# 掛載 NFS 共享目錄到容器內 /persistentvolumes- name: nfs-client-rootmountPath: /persistentvolumesenv:# 1. Provisioner 名稱(需與后續 StorageClass 的 provisioner 一致)- name: PROVISIONER_NAMEvalue: k8s-sigs.io/nfs-subdir-external-provisioner# 2. NFS 服務器 IP(替換為你的 NFS 服務器地址)- name: NFS_SERVERvalue: 192.168.48.19# 3. NFS 共享目錄路徑(替換為你的 NFS 共享路徑)- name: NFS_PATHvalue: /data/k8s_datavolumes:# 定義 NFS 掛載卷- name: nfs-client-rootnfs:server: 192.168.48.19  # NFS 服務器 IP(與上面一致)path: /data/k8s_data    # NFS 共享路徑(與上面一致)

2.4 創建 StorageClass

StorageClass 是 PVC 申請存儲的「模板」,通過 nfs-sc.yaml 配置:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: nfs-client  # StorageClass 名稱(PVC 需引用此名)namespace: nfs-storageclass
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner  # 與 Provisioner 環境變量 PROVISIONER_NAME 一致
parameters:# 1. PV 在 NFS 中的目錄結構:${PVC命名空間}/${PVC名稱}(便于區分不同 PVC 的存儲)pathPattern: ${.PVC.namespace}/${.PVC.name}# 2. PVC 刪除時的策略:delete 表示刪除 NFS 中對應的目錄(可選:retain 保留目錄)onDelete: delete

2.5 驗證 NFS 存儲

通過創建 PVC 和 PV(可選,動態模式下 PV 會自動生成)驗證存儲是否可用。

2.5.1 創建 PVC(nfs-pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: nfs  # PVC 名稱# annotations:  # 可選:添加注解(如指定 StorageClass,若未指定則使用默認 SC)
spec:accessModes:- ReadWriteMany  # NFS 支持多節點讀寫(RWX)storageClassName: nfs-client  # 引用前面創建的 StorageClassresources:requests:storage: 1Mi  # 申請的存儲容量(最小 1Mi,可根據需求調整)
2.5.2 手動創建 PV(可選,動態模式可省略)

若需手動綁定 PV(非動態模式),可創建 nfs-pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:name: nfs-pv  # PV 名稱# namespace: kube-system  # PV 是集群級資源,無需指定命名空間(此處原配置有誤,建議刪除)
spec:capacity:storage: 30Gi  # PV 容量(需 ≥ PVC 申請的容量)accessModes:- ReadWriteMany  # 與 PVC 的 accessModes 一致persistentVolumeReclaimPolicy: Retain  # PVC 刪除后保留 PV 數據(可選:Delete 自動刪除)storageClassName: nfs-client  # 關聯 StorageClassnfs:server: 192.168.48.19  # NFS 服務器 IPpath: /data/k8s_data    # NFS 共享路徑

2.6 執行所有 YAML 文件

將上述所有 YAML 文件放在同一目錄,執行部署:

kubectl apply -f ./

3. 驗證部署結果

3.1 查看 NFS Provisioner 組件狀態

kubectl get all -n nfs-storageclass

預期輸出(確保 Pod 為 Running 狀態):

NAME                                       READY   STATUS    RESTARTS   AGE
pod/nfs-client-provisioner-c8b7f495d-b2zpk   1/1     Running   0          64mNAME                                   READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nfs-client-provisioner   1/1     1            1           82mNAME                                             DESIRED   CURRENT   READY   AGE
replicaset.apps/nfs-client-provisioner-c8b7f495d   1         1         1       82m

3.2 查看 StorageClass

kubectl get sc

預期輸出(確保 PROVISIONER 正確且 VOLUMEBINDINGMODEImmediate):

NAME         PROVISIONER                                   RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-client   k8s-sigs.io/nfs-subdir-external-provisioner   Delete          Immediate           false                  83m

3.3 查看 PVC 和 PV

# 查看 PVC(確保 STATUS 為 Bound)
kubectl get pvc# 查看 PV(確保 STATUS 為 Bound,且 CLAIM 關聯 PVC)
kubectl get pv

預期輸出

# PVC 輸出
NAME   STATUS   VOLUME     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
nfs    Bound    nfs-pv     30Gi       RWX            nfs-client     <unset>                 83m# PV 輸出
NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM         STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
nfs-pv   30Gi       RWX            Retain           Bound    default/nfs   nfs-client     <unset>                       84m

關鍵說明

  1. 動態 vs 靜態
    • 動態模式(推薦):創建 PVC 后,Provisioner 會自動生成 PV 并綁定,無需手動創建 PV;
    • 靜態模式:需先手動創建 PV,再創建 PVC 綁定。
  2. NFS 服務器配置
    需確保 NFS 服務器已正確配置共享目錄(如 /data/k8s_data),且 K8s 所有節點能訪問 NFS 服務器(防火墻開放 2049 端口)。
  3. 權限問題
    NFS 共享目錄需設置足夠權限(如 chmod 777 /data/k8s_data),避免 Provisioner 無法讀寫目錄。

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

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

相關文章

JavaEE 進階第二期:開啟前端入門之旅(二)

專欄&#xff1a;JavaEE 進階躍遷營 個人主頁&#xff1a;手握風云 目錄 一、VS Code開發工具的搭建 1.1. 創建.html文件 1.2. 安裝插件 1.3. 快速生成代碼 二、HTML常見標簽 2.1. 換行標簽 2.2. 圖片標簽: img 2.3. 超鏈接 三、表格標簽 四、表單標簽 4.1. input標…

【RNN-LSTM-GRU】第二篇 序列模型原理深度剖析:從RNN到LSTM與GRU

本文將深入探討循環神經網絡&#xff08;RNN&#xff09;的核心原理、其面臨的長期依賴問題&#xff0c;以及兩大革命性解決方案——LSTM和GRU的門控機制&#xff0c;并通過實例和代碼幫助讀者徹底理解其工作細節。1. 引言&#xff1a;時序建模的數學本質在上一篇概述中&#x…

Qt---狀態機框架QState

QState是Qt狀態機框架&#xff08;Qt State Machine Framework&#xff09;的核心類&#xff0c;用于建模離散狀態以及狀態間的轉換邏輯&#xff0c;廣泛應用于UI交互流程、設備狀態管理、工作流控制等場景。它基于UML狀態圖規范設計&#xff0c;支持層次化狀態、并行狀態、歷史…

GitHub 熱榜項目 - 日榜(2025-09-02)

GitHub 熱榜項目 - 日榜(2025-09-02) 生成于&#xff1a;2025-09-02 統計摘要 共發現熱門項目&#xff1a;14 個 榜單類型&#xff1a;日榜 本期熱點趨勢總結 本期GitHub熱榜呈現AI Agent生態爆發趨勢&#xff0c;Koog、Activepieces等項目推動多平臺智能體開發框架成熟。語…

華為衛星對星引導技術深度解析:原理、實現與開源替代方案

利號&#xff1a;CNXXXXXX 涉及多傳感器融合/自適應波束成形/軌道預測算法一、技術原理剖析&#xff1a;衛星間高精度指向的核心挑戰在低軌衛星&#xff08;LEO&#xff09;星座中&#xff0c;衛星間鏈路&#xff08;ISL&#xff09;的建立面臨三大技術難題&#xff1a;1. 動力…

水下管道巡檢機器人結構設cad+三維圖+設計說明書

目 錄 1 緒論 1 1.1 選題的背景及意義 1 1.2 水下管道巡檢機器人的分類 2 1.2.1 管道巡檢技術的分類 2 1.2.2管道巡檢機器人的分類 2 1.3 研究的現狀 3 1.3.1 國內的研究現狀 3 1.3.2 國外的研究現狀 4 1.4 水下管道巡檢機器人的發展趨勢 5 1.…

[從零開始面試算法] (11/100) LeetCode 226. 反轉二叉樹:遞歸的“鏡像”魔法

引言 歡迎來到本系列的第十一篇&#xff01;在我們通過“最大深度”問題初步領略了樹的遞歸之美后&#xff0c;今天我們將面對一個更能體現遞歸“分治”思想的經典問題——LeetCode 226. 反轉二叉樹。 這道題在面試界的地位非同凡響&#xff0c;它因 Homebrew 的作者 Max How…

Java設計模式之創建型—建造者模式

Java中最常用的設計模式-CSDN博客 “把對象的構造步驟拆成鏈式方法&#xff0c;調用者按需填參&#xff0c;最后一次性 build&#xff0c;避免構造函數爆炸。” 經典場景 參數多&#xff08;>4 個&#xff09;且大部分可選 需要不可變對象&#xff08;final 字段&#xf…

網頁計時器,支持多計時器管理、數據分享、用戶數據同步、全屏展示等功能,可進行倒計時、正計時和顯示世界時鐘。

一個具有現代化 UI 和交互的計時器網頁應用&#xff0c;支持多計時器管理、數據分享、用戶數據同步、全屏展示等功能&#xff0c;可進行倒計時、正計時和顯示世界時鐘。它采用玻璃態設計和流暢動畫效果&#xff0c;提供極佳的視覺體驗。 特點&#xff1a; 支持多個計時器的創建…

紋理融合——用 TypeScript + Babylon.js 打造“可混合紋理序列”

我不想搞個一新的Shader&#xff0c;我就想用已有的材質&#xff08;比如StandardMaterial和PBRMetallicRoughnessMaterial&#xff09;實現紋理融合漸變等效果&#xff0c;于是我搞了一個TextureBlender。一、為什么重復造輪子&#xff1f;GPU 插值受限material.diffuseTextur…

【完整源碼+數據集+部署教程】公交車部件實例分割系統源碼和數據集:改進yolo11-fasternet

背景意義 隨著城市化進程的加快&#xff0c;公共交通系統的需求日益增加&#xff0c;公交車作為城市交通的重要組成部分&#xff0c;其運行效率和安全性直接影響到城市的交通狀況和居民的出行體驗。因此&#xff0c;公交車的維護和管理顯得尤為重要。在這一背景下&#xff0c;公…

【C++題解】關聯容器

關于set&#xff0c;map以及變種 |關聯容器| set&multiset | map&multimap |無序關聯容器| Unordered set&multiset | Unordered map&multimap | 建議先了解之后再配合練習 這次練習CCF真題比較多&#xff0c;也比較基礎&#xff0c;預計耗時不用這么久。 今天…

【智譜清言-GLM-4.5】StackCube-v1 任務訓練結果不穩定性的分析

1. Prompt 我是機器人RL方向的博士生正在學習ManiSkill&#xff0c;在學習時我嘗試使用相同命令訓練同一個任務&#xff0c;但是我發現最終的 success_once 指標并不是相同的&#xff0c;我感到十分焦慮&#xff0c; 我使用的命令如下&#xff1a; python sac.py --env_id&qu…

MySQL 8.0 主從復制原理分析與實戰

MySQL 8.0 主從復制原理分析與實戰半同步復制設計理念&#xff1a;復制狀態機——幾乎所有的分布式存儲都是這么復制數據的基于全局事務標識符&#xff08;GTID&#xff09;復制GTID工作原理多主模式多主模式部署示例課程目標&#xff1a; MySQL 復制&#xff08;Replication&a…

[UT]記錄case中seq.start(sequencer)的位置變化帶來的執行行為的變化

現象&#xff1a; 代碼選擇打開57行&#xff0c;注釋掉60行執行&#xff0c;結果58行不會打印。 代碼選擇打開60行&#xff0c;注釋57行執行&#xff0c;結果58行正常打印。 sequence的執行需要時間&#xff01;&#xff01;&#xff01; SV中代碼57行切換到60行的區別&#xf…

利用keytool實現https協議(生成自簽名證書)

利用keytool實現https協議&#xff08;生成自簽名證書&#xff09;什么是https協議&#xff1f;https&#xff08;安全超文本傳輸協議&#xff09;是 HTTP 的安全版本&#xff0c;通過 SSL/TLS 加密技術&#xff0c;在客戶端&#xff08;如瀏覽器&#xff09;和服務器之間建立加…

拆解 AI 大模型 “思考” 邏輯:從參數訓練到語義理解的核心鏈路

一、引言&#xff1a;揭開 AI 大模型 “思考” 的神秘面紗?日常生活中的 AI 大模型 “思考” 場景呈現&#xff08;如 ChatGPT 對話、AI 寫作輔助、智能客服應答&#xff09;?提出核心問題&#xff1a;看似具備 “思考” 能力的 AI 大模型&#xff0c;其背后的運作邏輯究竟是…

element plus 使用細節 (二)

接上一篇文章&#xff1a; element plus 使用細節 最近菜鳥忙于系統開發&#xff0c;都沒時間總結項目中使用的問題&#xff0c;幸好還是在空閑之余總結了一點&#xff08;后續也會來補充&#xff09;&#xff0c;希望能給大家帶來幫助&#xff01; 文章目錄table fixed 的 v…

【機器學習學習筆記】numpy基礎2

零基礎小白的 NumPy 入門指南如果你想用電競&#xff08;打游戲&#xff09;的思路理解編程&#xff1a;Python 是基礎操作鍵位&#xff0c;而 NumPy 就是 “英雄專屬技能包”—— 專門幫你搞定 “數值計算” 這類復雜任務&#xff0c;比如算游戲里的傷害公式、地圖坐標&#x…

從自動化到智能化:家具廠智能化產線需求與解決方案解析

伴隨著工業4.0浪潮和智能制造技術的成熟&#xff0c;家具行業正逐步從傳統的自動化生產邁向智能化生產。智能化產線的構建不僅可以提升生產效率&#xff0c;還能滿足個性化定制和柔性制造的需求。本文以某家具廠為例&#xff0c;詳細解析智能化產線的核心需求&#xff0c;并提出…