k8s存儲入門

目錄

一、 Volume 的概念

二、 Volume 的類型

三、 通過 emptyDir 共享數據

1. EmptyDir 特性

2. EmptyDir 共享數據

四:使用 HostPath 掛載宿主機文件

1.??HostPath 特性

2.?掛載宿主機時區文件

五、?掛載 NFS 至容器

1.?前置準備(所有 K8s 節點 + NFS 服務器)

六、PersistentVolume(PV,持久卷)

1. 引入背景

2. 核心特性

3. 回收策略

4. 訪問策略

5. 靜態配置實踐

七、PersistentVolumeClaim(PVC,持久卷聲明)

1.??核心作用

2.?PVC 配置與綁定

3.?PVC 掛載到 Pod


一、 Volume 的概念

對于大多數項目而言,數據文件存儲是常見需求(如用戶頭像、文件、數據庫數據)。在 Kubernetes 中,應用部署的高擴展性和編排性,決定了容器內存儲數據不可取(無法保障安全)。

應將有狀態應用剝離為無狀態:數據從應用中分離,存儲到云端(如分布式存儲、公有云 NAS 服務)。常見方案:

  • NFS(生產不建議,單點故障);
  • Ceph、GlusterFS、Minio 等分布式存儲。

傳統架構中,存儲需提前在宿主機掛載,新增節點易忘掛載引發問題。Kubernetes 抽象出?Volume 概念,解決數據存儲難題。

二、 Volume 的類型

Kubernetes 支持多種 Volume 類型:

  • 通用類型:RBDHostPath?等;
  • 獨有類型:
    • ConfigMap:存儲配置文件;
    • Secret:存儲敏感數據;
    • EmptyDir:同 Pod 內多容器共享數據;
    • PersistentVolumeClaim:申請 PersistentVolume。

三、 通過 emptyDir 共享數據

1. EmptyDir 特性

  • 特殊 Volume:Pod 刪除時,EmptyDir 數據也刪除;
  • 場景:同 Pod 內容器共享數據(如 Filebeat 收集容器日志)。

2. EmptyDir 共享數據

(1)?編寫 Deployment 文件

[root@k8s-master ~]# cat <<EOF>nginx-empty.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginxname: nginxnamespace: default
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- image: nginx:1.7.9imagePullPolicy: IfNotPresentname: nginx01volumeMounts:  # 容器1掛載:/opt → share-volume- mountPath: /optname: share-volume- image: nginx:1.7.9imagePullPolicy: IfNotPresentname: nginx02command: ["sh", "-c", "sleep 3600"]  # 保持容器運行volumeMounts:  # 容器2掛載:/mnt → share-volume- mountPath: /mntname: share-volumevolumes:  # 定義共享卷:share-volume 類型為 emptyDir- name: share-volumeemptyDir: {}  # 可添加 medium: Memory 使用 tmpfs(內存存儲,節點重啟數據清除)
EOF

(2)?部署與驗證

  • 部署kubectl create -f nginx-empty.yaml
  • 查看 Podkubectl get pod(示例:nginx-6fffbd7c7b-jrw7f 2/2 Running

容器 1 寫入數據

kubectl exec -ti <pod-name> -c nginx01 -- sh  
# 在 /opt 創建文件(如 touch /opt/test.txt)

容器 2 驗證共享

kubectl exec -ti <pod-name> -c nginx02 -- sh  
# 查看 /mnt 下是否有 test.txt
  • 刪除 Podkubectl delete -f nginx-empty.yaml

四:使用 HostPath 掛載宿主機文件

1.??HostPath 特性

將宿主機文件 / 目錄掛載到 Pod,實現 Pod 與宿主機數據共享(如掛載時區文件解決容器時間偏差)。

2.?掛載宿主機時區文件

(1)?編寫 Deployment 文件

[root@k8s-master ~]# cat <<EOF>nginx-hostPath.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginxname: nginxnamespace: default
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- image: nginx:1.7.9imagePullPolicy: IfNotPresentname: nginxvolumeMounts:  # 容器內掛載:/etc/localtime → timezone-time- mountPath: /etc/localtimename: timezone-timevolumes:  # 定義 HostPath 卷:掛載宿主機 /etc/localtime- name: timezone-timehostPath:path: /etc/localtime  # 宿主機路徑type: file  # 類型:文件必須存在
EOF

(2)?部署與驗證

  • 部署kubectl create -f nginx-hostPath.yaml

驗證時間

kubectl exec -ti <pod-name> -c nginx -- sh  
date  # 檢查時區是否為 Asia/Shanghai

HostPath 類型說明

類型說明
DirectoryOrCreate路徑不存在則創建空目錄(權限 0755)
Directory路徑必須是已存在的目錄
FileOrCreate路徑不存在則創建空文件(權限 0644)
File路徑必須是已存在的文件
Socket/CharDevice/BlockDevice對應類型的設備必須存在

五、?掛載 NFS 至容器

1.?前置準備(所有 K8s 節點 + NFS 服務器)

  • 安裝 NFS 工具yum -y install nfs-utils(所有節點);

NFS 服務器配置:

# 創建共享目錄
mkdir /opt/wwwroot && echo "NFS Test" > /opt/wwwroot/index.html  
# 配置共享規則(/etc/exports)
echo "/opt/wwwroot 192.168.10.0/24(rw,sync,no_root_squash)" >> /etc/exports  
# 啟動服務
systemctl start nfs && systemctl start rpcbind  

2.??編寫 Deployment 文件(掛載 NFS)

[root@k8s-master ~]# cat <<EOF>nginx-nfsVolume.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginxname: nginxnamespace: default
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- image: nginx:1.7.9imagePullPolicy: IfNotPresentname: nginxvolumeMounts:  # 容器內掛載:/usr/share/nginx/html → nfs-volume- mountPath: /usr/share/nginx/htmlname: nfs-volumevolumes:  # 定義 NFS 卷- name: nfs-volumenfs:server: 192.168.10.101  # NFS 服務器IPpath: /opt/wwwroot      # NFS 共享目錄
EOF

3. 部署與驗證

  • 部署kubectl create -f nginx-nfsVolume.yaml
  • 查看 Podkubectl get pod(示例:nginx-fbd476c4c-zscq9 1/1 Running

驗證掛載

kubectl exec -ti <pod-name> -c nginx -- bash  
cat /usr/share/nginx/html/index.html  # 應輸出 "NFS Test"

六、PersistentVolume(PV,持久卷)

1. 引入背景

  • Volume 無法解決?數據回收、訪問模式、單 Pod 掛載?等復雜需求,且非 K8s 管理員難以配置。
  • 引入?PV(管理員預配存儲)?和?PVC(用戶申請 PV),解耦存儲管理與使用。

2. 核心特性

  • 生命周期獨立:不受 Pod 影響,管理員可單獨操作。
  • 支持存儲:NFS、Ceph 等,可配置?訪問模式、容量、回收策略
  • 提供方式:靜態(預創建)、動態(依賴 StorageClass 自動創建)。

3. 回收策略

策略行為支持存儲
Retain刪除 PVC 后,PV 及數據保留,需手動回收。全類型
Recycle刪除 PVC 后,執行?rm -rf?清理數據(已廢棄,僅 NFS/HostPath 支持)。NFS、HostPath
Delete刪除 PVC 時,自動刪除 PV 及數據(動態 PV 默認策略)。云存儲(如 AWS EBS)

4. 訪問策略

策略說明存儲限制
ReadWriteOnce(RWO)單節點讀寫通用
ReadOnlyMany(ROX)多節點只讀通用
ReadWriteMany(RWX)多節點讀寫(塊存儲多不支持,如 Ceph 塊)NFS、GlusterFS 等
ReadWriteOncePod(RWOP)單 Pod 讀寫(K8s 1.22+)-

5. 靜態配置實踐

(1)?HostPath 類型 PV

所有 Node 創建目錄:mkdir /mnt/data

編寫?hostpath-pv.yaml

kind: PersistentVolume
apiVersion: v1
metadata:name: mypv-hostpath
spec:storageClassName: pv-hostpathcapacity: { storage: 10Gi }accessModes: [ReadWriteOnce]hostPath: { path: "/mnt/data" }

(2)?NFS 類型 PV(依賴 NFS 服務)

編寫?nfs-pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata: { name: mypv-nfs }
spec:storageClassName: pv-nfscapacity: { storage: 5Gi }accessModes: [ReadWriteOnce]persistentVolumeReclaimPolicy: Recyclenfs:path: /opt/wwwrootserver: 192.168.10.101  # NFS 服務器 IP

創建 & 查看:kubectl create -f nfs-pv.yaml && kubectl get pv

七、PersistentVolumeClaim(PVC,持久卷聲明)

1.??核心作用

  • 用戶通過 PVC 聲明?容量、訪問模式、StorageClass,自動綁定匹配的 PV,無需關心存儲細節。

2.?PVC 配置與綁定

(1)?HostPath PV 的 PVC

kind: PersistentVolumeClaim
apiVersion: v1
metadata: { name: mypvc-hostpath }
spec:storageClassName: pv-hostpath  # 與 PV 一致accessModes: [ReadWriteOnce]resources: { requests: { storage: 10Gi } }

創建 & 查看kubectl create -f pvc-hostpath.yaml && kubectl get pvc(狀態為?Bound

(2)?NFS PV 的 PVC

kind: PersistentVolumeClaim
apiVersion: v1
metadata: { name: mypvc-nfs }
spec:storageClassName: pv-nfs  # 與 PV 一致accessModes: [ReadWriteOnce]resources: { requests: { storage: 3Gi } }  # ≤ PV 容量(5Gi)

創建 & 查看kubectl create -f pvc-nfs.yaml && kubectl get pvc(狀態為?Bound

3.?PVC 掛載到 Pod

kind: Pod
apiVersion: v1
metadata: { name: hostpath-pv-pod }
spec:volumes:- name: pv-volumepersistentVolumeClaim: { claimName: mypvc-hostpath }  # 綁定 PVCcontainers:- name: test-containerimage: nginx:1.7.9volumeMounts:- mountPath: "/data"name: pv-volume

驗證kubectl exec -ti hostpath-pv-pod -- ls /data

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

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

相關文章

基于 Flutter 的開源文本 TTS 朗讀器(支持 Windows/macOS/Android)

界面特性 基于 Flutter 的文本 TTS 朗讀器支持 Windows、macOS、AndroidTTS 源&#xff1a;OpenAI TTS、Microsoft TTS支持設置代理支持設置應用主題支持倍速支持書簽支持點擊指定地方朗讀支持 txt、epub、貼粘文本支持從上次地方開始朗讀 源代碼https://github.com/xchenhao/t…

深入理解大語言模型:從核心技術到極簡實現

零基礎的讀者建議先看《零基礎理解大語言模型&#xff1a;從生活例子到代碼實現》&#xff0c;本教程的完整代碼可以在GitHub上找到&#xff0c;如果你有任何問題或建議&#xff0c;歡迎交流討論。 引言 自ChatGPT橫空出世以來&#xff0c;大語言模型&#xff08;Large Langua…

7月13日日記

看來每天寫一篇日記對我來說還是一個不小的挑戰。主要是和惰性做抗爭吧。但是這個東西說實話也沒有什么難度&#xff0c;也并不占用時間&#xff0c;一篇日記大概十幾分鐘就可以寫完。可能更多的是健忘。忘了每天有一個這樣的小任務。忘了前幾天日記寫沒寫了&#xff0c;三下鄉…

《Stata面板數據分析:數據檢驗、回歸模型與診斷技術 - 以NLSW工資研究(公開數據)為例》

本教程旨在全面介紹使用 Stata 進行面板數據分析的方法和技巧。我們將以美國國家縱向調查(NLSW)的數據為例,系統地探討從基礎 OLS 回歸到高級固定效應模型的分析過程。 NLSW 數據集是公開的,可以免費獲取,這為讀者提供了實踐和復現的機會。 通過這個教程,您將掌握使用 …

【VSCode+LaTeX】科研寫作環境搭建

文章目錄0 引言為什么選擇LaTeXVSCode&#xff1f;為什么不選擇Overleaf&#xff1f;1 TeXLive安裝1.1 下載安裝包1.2 運行安裝程序1.3 通過鏡像安裝2 VSCode安裝與配置2.1 下載VSCode安裝包2.2 安裝VSCode2.3 安裝中文語言包2.4 配置LaTeX核心擴展2.5 加載TeX模版文件2.6 編譯…

Surfer軟件入門與等值線繪制實操教程

本文還有配套的精品資源&#xff0c;點擊獲取 簡介&#xff1a;本教程將指導初學者如何使用Surfer軟件進行地質繪圖&#xff0c;重點在于等值線的繪制技巧和提升圖形質量。內容涵蓋Surfer界面介紹、數據導入、等值線繪制方法、樣式設置、地圖增強技術以及輸出保存方法&#…

攻防世界——Web題 very_easy_sql

目錄 payload1 payload2 payload3 看到了題目是sql就猜測是sql注入和萬能密碼了&#xff0c;但怎么試貌似都沒有反應&#xff0c;看源代碼發現了use.php 訪問use.php頁面 可以猜測這里是SSRF&#xff0c;可以訪問到我們本不能訪問的界面&#xff0c;比如&#xff1a;服務器…

基于 SpringBoot 的 REST API 與 RPC 調用的統一封裝

一、為何需要統一封裝&#xff1f; 在討論統一封裝之前&#xff0c;我們先看看 REST 和 RPC 各自的適用場景。 REST API 基于 HTTP 協議&#xff0c;采用 JSON 作為數據交換格式&#xff0c;可讀性好且跨語言&#xff0c;非常適合對外提供服務。 RPC&#xff08;如 Dubbo、gRPC…

【SpringBoot】 整合MyBatis+Postgresql

MyBatis 是一個輕量級的持久化框架&#xff0c;用于簡化數據庫訪問和操作。它通過將 SQL 語句與 Java 代碼分離&#xff0c;允許開發者使用 XML 或注解來配置 SQL 語句&#xff0c;并將結果映射為 Java 對象。MyBatis 提供了靈活的 SQL 控制&#xff0c;適合需要精細控制 SQL 的…

無縫銜接直播流體驗

文章目錄前言&#x1f9e0; 1. 為什么能“無縫銜接”&#xff1f;&#x1f9f0; 2. Flutter 實現方案? 總體策略&#x1f3af; 核心技術點? a. 使用全局播放器管理器&#xff08;單例模式&#xff09;? b. 廣場頁中的直播卡片使用播放器? c. 詳情頁復用控制器? d. 頁面切換…

[論文閱讀] 軟件工程 | 首個德語軟件工程情感分析黃金標準數據集:構建與價值解析

首個德語軟件工程情感分析黃金標準數據集&#xff1a;構建與價值解析 論文標題&#xff1a;A German Gold-Standard Dataset for Sentiment Analysis in Software EngineeringarXiv:2507.07325 A German Gold-Standard Dataset for Sentiment Analysis in Software Engineering…

PyTorch編程實踐:一文就入門的上手開發!

引言 PyTorch作為當今深度學習領域最流行的框架之一&#xff0c;以其動態計算圖、直觀的Python接口和強大的GPU加速能力&#xff0c;贏得了眾多研究人員和工程師的青睞。本文將深入探討PyTorch的編程實踐&#xff0c;從基礎概念到高級應用&#xff0c;幫助讀者全面掌握這一強大…

關于學習docker中遇到的問題

Cannot connect to the Docker daemon at unix:///home/pc/.docker/desktop/docker.sock. Is the docker daemon running?如何配置新的路徑 #運行這條命令&#xff0c;查看docker狀態 sudo systemctl status docker如圖所示表示監聽路徑不對&#xff0c;因此修改路徑即可&…

無法打開windows安全中心解決方案

系統還原或重置&#xff1a;如果以上方法均無效&#xff0c;可嘗試系統還原&#xff0c;使用之前創建的還原點恢復系統。或在設置中選擇 “系統> 恢復 > 重置此電腦”&#xff0c;選擇 “保留我的文件” 以避免數據丟失。創建新用戶賬戶&#xff1a;按下 Win I 打開設置…

復習筆記 33

緒論 《幻術》 張葉蕾 我該怎么承認&#xff0c; 一切都是幻境。 函數的基本性質和無窮小量及其階的比較 我感覺強化課我要跟上的話&#xff0c;我需要把基礎&#xff0c;強化的講義&#xff0c;還有練習冊上面的所有題都刷爛。不然我感覺自己考 140 完全就是癡人說夢。搞笑呢。…

算法學習筆記:12.快速排序 ——從原理到實戰,涵蓋 LeetCode 與考研 408 例題

快速排序是計算機科學中最經典的排序算法之一&#xff0c;由 Tony Hoare 在 1960 年提出。它憑借平均時間復雜度 O (nlogn)、原地排序&#xff08;空間復雜度 O (logn)&#xff0c;主要來自遞歸棧&#xff09;以及良好的實際性能&#xff0c;成為工業界處理大規模數據排序的首選…

unity 有打擊感的圖片,怎么做動畫,可以表現出良好的打擊效果

完整實現腳本:using UnityEngine; using UnityEngine.UI; using System.Collections;[RequireComponent(typeof(Image))] public class HitEffectController : MonoBehaviour {[Header("基礎設置")]public float hitDuration 0.5f; // 打擊效果總時長[Header("…

cuda編程筆記(7)--多GPU上的CUDA

零拷貝內存 在流中&#xff0c;我們介紹了cudaHostAlloc這個函數&#xff0c;它有一些標志&#xff0c;其中cudaHostAllocMapped允許內存映射到設備&#xff0c;也即GPU可以直接訪問主機上的內存&#xff0c;不用額外再給設備指針分配內存 通過下面的操作&#xff0c;即可讓設…

IP地址混亂?監控易IPAM實現全網地址自動化管理與非法接入告警

IP地址出現混亂狀況&#xff1f;監控易IPAM能夠達成對全網地址予以自動化管理的目標&#xff0c;同時還可針對非法接入的情況發出告警信息。辦公室毫無預兆地突然斷網了&#xff0c;經過一番仔細排查之后&#xff0c;發現原來是IP地址出現了沖突的情況。有人私自接了路由器&…

安全監測預警平臺的應用場景

隨著城市化進程加快和基礎設施規模擴大&#xff0c;各類安全風險日益突出。安全監測預警平臺作為現代安全管理的重要工具&#xff0c;通過整合物聯網、大數據、人工智能等先進技術&#xff0c;實現對各類安全隱患的實時監測、智能分析和精準預警。本文將詳細探討安全監測預警平…