k8sday12數據存儲(1/2)

目錄

一、簡單基本存儲

1、EmptyDir

1.1概念

1.2作用

1.3配置文件

1.4測試

2、HostPath

2.1概念

2.2作用

2.3配置文件

2.4測試

①、數據共享

②、持久化存儲

3、NFS

3.1概念

3.2作用

3.3NFS服務安裝

①、設置主節點為NFS服務器

②、給副節點安裝NFS客戶端工具

3.4配置文件

3.4測試

①、數據共享

②、持久化存儲


由于k8s中Pod的生命周期短暫,會被頻繁的創建和銷毀,容器的重啟或遷移也會導致數據丟失,而有狀態應用需求,如數據庫、消息隊列等需要持久化存儲,確保數據在容器生命周期之外依然存在,方便用戶調用,為了實現持久化保存數據,k8s引入Volume實現同一個Pod中的不同容器的數據共享和數據持久化,即使容器重啟或遷移等等都不會導致Volume數據丟失。

常見Volume類型:

  • 簡單基本存儲:EmptyDir、HostPath、NFS

  • 高級核心存儲:PV、PVC

  • 配置存儲:ConfigMap、Secret

一、簡單基本存儲

1、EmptyDir

1.1概念

? EmptyDir是在Pod被分配到Node時創建的,初始內容為空,無法指定宿主機對應的文件目錄,一個EmptyDir相當于一個Host的空目錄,當Pod銷毀時,EmptyDir的數據也會被永久刪除,即EmptyDir只在Pod的生命周期內有效。

1.2作用

由于EmptyDir只在Pod的生命周期內有效,故不適合做持久化的數據存儲,只適合做臨時存儲

  • 作為臨時空間,無須長久保留

  • 為同一個Pod內的不同容器實現數據共享

1.3配置文件
  apiVersion: v1kind: Podmetadata:name: nginx-busybox-lognamespace: defaultspec:containers:# ---------- Nginx ----------- name: nginximage: nginx:1.24.0 ? ? ? ? ? # 體積小、鏡像拉取快ports:- containerPort: 80volumeMounts:- name: logs-volumemountPath: /var/log/nginx ? # Nginx 默認日志目錄# ---------- BusyBox ----------- name: busyboximage: busybox:1.36.1 ? ? ? ? # 推薦穩定版本command: ["/bin/sh","-c","tail -f /logs/access.log"] ? # 初始命令,動態讀取指定文件內容volumeMounts:- name: logs-volumemountPath: /logs ? ? ? ? ? ?# BusyBox 內查看目錄# ---------- 共享卷 ----------volumes:- name: logs-volume ? ? ? ? ? ? # 共享卷名稱emptyDir: {} ? ? ? ? ? ? ? ? ?# 數據卷類型,Pod 級臨時目錄,兩容器共享
1.4測試

最終實現:每當我訪問nginx,nginx會將訪問的日志信息存儲到/var/log/nginx目錄下,而busybox可通過命令查看是否有日志生成,即實現同一個Pod中兩個不同容器之間通過數據卷emptydir進行了數據共享。

  # 創建 Pod# 記住要在yaml文件目錄下kubectl create -f nginx-busybox-emptydir.yaml?# 查看是否創建 Pod 成功kubectl get po nginx-busybox-log -o wide?# 訪問 nginx kubectl exec nginx-busybox-log -- curl http://localhost?#-----------------雙開終端--------------------------# 雙開終端方便查看指定容器的標準輸出# kubectl logs -f <你創建的數據卷名稱> -n <你創建數據卷指定的命名空間> -c <指定容器>kubectl logs -f nginx-busybox-log -c busybox

  # 刪除Pod,查看數據是否仍存在,是否仍可以進行數據共享kubectl delete -f nginx-busybox-emptydir.yaml?# 驗證刪除成功kubectl get po nginx-busybox-log -o wide?# 雙開終端方便查看指定容器的標準輸出# kubectl logs -f <你創建的數據卷名稱> -n <你創建數據卷指定的命名空間> -c <指定容器>kubectl logs -f nginx-busybox-log -c busybox

發現數據已經不見了

2、HostPath

2.1概念

? 當Pod銷毀時,EmptyDir的數據也會被永久刪除,即EmptyDir只在Pod的生命周期內有效。為了實現簡單的數據持久化,即簡單地將數據掛載到主機上,可選擇HostPath

2.2作用

HostPath就是將Node主機上的一個實際目錄掛載到Pod中,提供給容器使用,最終實現即使Pod銷毀,數據依然存在在Node主機

2.3配置文件
  apiVersion: v1kind: Podmetadata:name: nginx-busybox-lognamespace: defaultspec:containers:# ---------- Nginx ----------- name: nginximage: nginx:1.24.0 ? ? ? ? ? # 體積小、鏡像拉取快ports:- containerPort: 80volumeMounts:- name: logs-volumemountPath: /var/log/nginx ? # Nginx 默認日志目錄# ---------- BusyBox ----------- name: busyboximage: busybox:1.36.1 ? ? ? ? # 推薦穩定版本command: ["/bin/sh","-c","tail -f /logs/access.log"] ? # 初始命令,動態讀取指定文件內容volumeMounts:- name: logs-volumemountPath: /logs ? ? ? ? ? ?# BusyBox 內查看目錄# ---------- 共享卷 ----------volumes:- name: logs-volume ? ? ? ? ? ? # 共享卷名稱hostPath: ? ? ? ? ? ? ? ? ? ? # 數據卷類型path: /root/logs ? ? ? ? ? ?# 保存到K8s 節點(即 Linux 虛擬機或裸機) 上的目錄type: DirectoryOrCreate ? ? # 目錄存在就直接使用,不存在就先創建后使用
2.4測試

最終實現:每當我訪問nginx,nginx會將訪問的日志信息存儲到K8s 節點(即 Linux 虛擬機或裸機) 上的目錄(路徑為path: /root/logs ),而我們可以直接去節點通過命令查看是否有日志生成,即實現將數據持久化存儲到Node主機上,即使Pod刪除了,數據仍存在。

①、數據共享
  # 創建 Pod# 記住要在yaml文件目錄下kubectl create -f nginx-busybox-hostpath.yaml?# 查看是否創建 Pod 成功,并查看是創建在哪個節點kubectl get po nginx-busybox-log -o wide?# 訪問 nginx kubectl exec nginx-busybox-log -- curl http://localhost?#-----------------雙開終端--------------------------# 雙開終端,方便查看指定文件docker exec -it <你的Pod創建所在節點> bash# 如我的是 docker exec -it my-multi-node-cluster1-worker bash?# 進入指定的節點路徑,查看共享目錄ls -l /root/logs?# 查看文件日志tail -f /root/logs/access.log

②、持久化存儲
  # 刪除Pod,查看數據是否仍存在,是否仍可以進行數據共享kubectl delete -f nginx-busybox-hostpath.yaml?# 驗證刪除成功kubectl get po nginx-busybox-log -o wide?#-----------------雙開終端--------------------------# 雙開終端,方便查看指定文件docker exec -it <你的Pod創建所在節點> bash# 如我的是 docker exec -it my-multi-node-cluster1-worker bash?# 進入指定的節點路徑,查看共享目錄ls -l /root/logs?# 查看文件日志是否仍然存在tail -f /root/logs/access.log

發現數據仍然存在

3、NFS

3.1概念

? 雖然HostPath可以解決數據的持久化問題,但當數據存儲所在的Node節點崩潰時,其內部的Pod和數據也會一并丟失,Pod此時需要轉移到其他節點,需要準備單獨的網絡存儲系統,此時可選NFS或CIFS等其他,這里只是使用NFS作為例子進行學習。

3.2作用

NFS作為一個網絡文件的存儲系統,我們可通過搭建一臺NFS服務器,然后將Pod中的數據直接存儲其中,這樣即使Pod在節點上如何轉移,我們只需要保證Node和NFS連接正常,數據即可正常訪問。

NFS服務器一般需要備份,設置為高可用

3.3NFS服務安裝
①、設置主節點為NFS服務器
  # 獲取已有節點,找到control-plane容器記下輸出容器內 IP( INTERNAL-IP )例如 172.18.0.2kubectl get node -o wide?# 進入控制面(control-plane)容器docker exec -it my-multi-node-cluster1-control-plane bash?# ---- 容器內執行 ----# 更新并安裝NFS服務apt update && apt install -y nfs-kernel-server# 創建共享目錄mkdir -p /root/logs# 把共享目錄權限改成 “任何人可讀可寫可執行”chmod 777 /root/logs# 向 /etc/exports 追加一行 導出規則# 當然也可以手動進入 /etc/exports 然后編輯添加規則echo "/root/logs *(rw,sync,no_subtree_check,no_root_squash)" >> /etc/exports# 重新加載 /etc/exports 并立即生效exportfs -rav# 重啟 NFS 服務進程systemctl restart nfs-kernel-server# 如果不可用systemctl,可改為:service nfs-kernel-server restart?# 退出控制面容器exit
②、給副節點安裝NFS客戶端工具

NFS 客戶端功能已經內置在 Linux 內核nfs 文件系統模塊,所以一般不需要額外安裝

3.4配置文件

直接掛 NFS,無 PV/PVC

  apiVersion: v1kind: Podmetadata:name: nginx-busybox-lognamespace: defaultspec:containers:# ---------- Nginx ----------- name: nginximage: nginx:1.24.0 ? ? ? ? ? # 體積小、鏡像拉取快ports:- containerPort: 80volumeMounts:- name: logs-volumemountPath: /var/log/nginx ? # Nginx 默認日志目錄# ---------- BusyBox ----------- name: busyboximage: busybox:1.36.1 ? ? ? ? # 推薦穩定版本command: ["/bin/sh","-c","tail -f /logs/access.log"] ? # 初始命令,動態讀取指定文件內容volumeMounts:- name: logs-volumemountPath: /logs ? ? ? ? ? ?# BusyBox 內查看目錄# ---------- 共享卷 ----------volumes:- name: logs-volume ? ? ? ? ? ? # 共享卷名稱nfs: ? ? ? ? ? ? ? ? ? ? ? ? ?# 數據卷類型path: /root/logs ? ? ? ? ? ?# 共享目錄路徑(與上方在控制面容器創建的共享目錄相同)server: 172.18.0.2 ? ? ? ? ?# nfs服務器地址(控制面容器的內部 IP )
3.4測試
①、數據共享
# 創建 Pod
# 記住要在yaml文件目錄下
kubectl create -f nginx-busybox-nfs.yaml# 查看是否創建 Pod 成功kubectl get po nginx-busybox-log -o wide# 訪問 nginx 
kubectl exec nginx-busybox-log -- curl http://localhost#-----------------雙開終端--------------------------
# 雙開終端,方便查看指定文件
kubectl logs -f nginx-busybox-log -c busybox# 進入主節點
docker exec -it my-multi-node-cluster1-control-plane bash# 查看共享目錄
ls /tmp/logs# 查看是否含訪問記錄
cat /tmp/logs/access.log

②、持久化存儲
# 刪除Pod,查看數據是否仍存在,是否仍可以進行數據共享
kubectl delete pod nginx-busybox-log# 驗證刪除成功
kubectl get po nginx-busybox-log -o wide# 立即重新創建同名 Pod(只讀驗證)
kubectl apply -f nginx-busybox-nfs.yaml# 查看是否創建成功
kubectl get po nginx-busybox-log -o wide# 進入主節點,查看歷史日志是否存在
docker exec -it my-multi-node-cluster1-control-plane bash
ls /tmp/logs
cat /tmp/logs/access.log
exit# 退出主節點后,立即查看busybox歷史日志
kubectl exec nginx-busybox-log -c busybox -- cat /logs/access.log

發現數據仍然存在,并沒有隨著Pod的生命周期而丟失

PS:為什么我的snipaste截圖的照片,過一段時間會自動消失,導致我又要重新做一遍演示,有沒有大佬救救我QAQ

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

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

相關文章

Spring Framework 常用注解詳解(按所屬包分類整理)

在使用 Spring Framework 進行開發時&#xff0c;注解&#xff08;Annotation&#xff09;是實現 依賴注入&#xff08;DI&#xff09;、組件掃描、AOP 切面、事務管理 和 Web 請求映射 的核心手段。Spring 提供了豐富且結構清晰的注解體系&#xff0c;這些注解按照功能被組織在…

ROADS落地的架構藍圖

2 ROADS落地的架構藍圖 將ROADS體驗從理念轉化為現實&#xff0c;需要一套完整且自頂向下的架構藍圖作為支撐。華為的實踐表明&#xff0c;數字化轉型的成功依賴于多個架構層次的協同推進&#xff0c;而非單點技術的應用。該藍圖通常包含以下五個關鍵層次&#xff0c;每一層都承…

如何構建一個神經網絡?從零開始搭建你的第一個深度學習模型

在深度學習的海洋中&#xff0c;神經網絡就像一艘船&#xff0c;承載著數據的流動與特征的提取。而構建一個神經網絡&#xff0c;就像是在設計這艘船的結構。本文將帶你一步步了解如何使用 PyTorch 構建一個完整的神經網絡模型&#xff0c;涵蓋網絡層的組織、前向傳播與反向傳播…

自學嵌入式第二十三天:數據結構(3)-雙鏈表

一、strtokchar * strtok(char *s1,char *s2);截斷字符串&#xff0c;在s1字符串中找到s2截取前一段返回&#xff0c;如需要再次截取剩余段&#xff0c;再使用此函數s1輸入NULL即可&#xff1b;二、bzerobzero(char *p,size_t size);清零,從p地址開始&#xff0c;清零size個bit…

河南萌新聯賽2025第六場 - 鄭州大學

暑期集訓已經接近尾聲&#xff0c;一年六場的暑期萌新聯賽也已經結束了&#xff0c;進步是比較明顯的&#xff0c;從一開始的七八百名到三四百名&#xff0c;雖然拿不出手&#xff0c;但是這也算對兩個月的集訓的算法初學者的我一個交代。 比賽傳送門&#xff1a;河南萌新聯賽…

2-1.Python 編碼基礎 - 基礎運算符(算術運算符、賦值運算符、比較運算符、邏輯運算符)

一、算術運算符 1、基本介紹編號運算符說明示例輸出結果1兩數相加10 20302-兩數相減10 - 20-103*兩數相乘&#xff0c;或者返回一個被重復若干次的字符串10 * 202004/兩數相除10 / 200.55//兩數相除并返回商的整數部分9 // 246%兩數相除并返回余數10 % 507**冪運算10 ** 21002…

CMOS知識點 MOS管不同工作區域電容特性

知識點14&#xff1a;MOSFET的電容主要來源于其物理結構&#xff1a;柵氧層電容&#xff1a;柵極&#xff08;G&#xff09;與襯底&#xff08;B&#xff09;、溝道、源&#xff08;S&#xff09;、漏&#xff08;D&#xff09;之間隔著二氧化硅絕緣層&#xff0c;自然形成電容…

預測性維護+智能優化:RK3568+FPGA方案在儲能行業的應用

在儲能行業&#xff0c;RK3568FPGA方案通過預測性維護和智能優化技術&#xff0c;顯著提升系統可靠性和經濟性。該方案采用異構架構&#xff08;FPGA處理高速信號采集&#xff0c;RK3568負責策略計算與通信管理&#xff09;&#xff0c;實現微秒級響應和精準控制。?26一、預測…

工業4.0時代,耐達訊自動化Profibus轉光纖如何重構HMI通信新標準?“

在智能制造與工業4.0浪潮下&#xff0c;HMI&#xff08;人機界面&#xff09;作為設備與操作員之間的“橋梁”&#xff0c;承擔著實時數據顯示、設備監控及交互控制的核心職能。然而&#xff0c;傳統Profibus總線在HMI連接中常因電磁干擾、傳輸距離限制等問題&#xff0c;導致畫…

SpringClound——網關、服務保護和分布式事務

一、網關網絡的關口&#xff0c;負責請求的路由、轉發、身份驗證server:port: 8080 spring:cloud:nacos:discovery:server-addr: 192.168.96.129:8848gateway:routes:- id: item-serviceuri: lb://item-servicepredicates:- Path/items/**,/search/**- id: user-serviceuri: lb…

【C++】模版(初階)

目錄 一. 函數模版 1. 格式 原理 2. 函數模版的實例化 二. 類模板 void Swap(int& left, int& right) {int temp left;left right;right temp; }void Swap(double& left, double& right) {double temp left;left right;right temp; }void Swap(char&…

InfluxDB 開發工具鏈:IDE 插件與調試技巧(二)

四、利用 IDE 插件提升開發效率 4.1 代碼編寫技巧 在使用安裝了 InfluxDB 插件的 IDE 進行代碼編寫時&#xff0c;我們可以充分利用插件提供的代碼導航和智能提示功能&#xff0c;來顯著提高編寫 InfluxDB 相關代碼的效率和準確性。 以一個涉及多個 Measurement 和復雜查詢條…

定制開發開源AI智能名片S2B2C商城小程序:場景體驗新維度與四重目標達成

摘要&#xff1a;本文聚焦于定制開發開源AI智能名片S2B2C商城小程序&#xff0c;探討其在場景體驗領域的應用與價值。通過深入分析場景體驗的最高境界——深體驗、強認知、高傳播、關系深化這四個目標&#xff0c;闡述該小程序如何憑借自身特性與功能&#xff0c;在商業場景中實…

開源 GIS 服務器搭建:GeoServer 在 Linux 系統上的部署教程

GeoServer 是一個開源的地理信息服務服務器&#xff0c;可以發布地圖、矢量數據和柵格數據。 1. 更新系統 sudo apt update && sudo apt upgrade -y2. 安裝 Java 11 GeoServer 需要 Java 運行環境&#xff0c;這里用 OpenJDK 11。 sudo apt install openjdk-11-jdk…

前端面試通關:Cesium+Three+React優化+TypeScript實戰+ECharts性能方案

前端面試題詳解與更多面試題 WebGLCesiumThree 1. 自我介紹 回答要點&#xff1a; 教育背景和工作經驗技術棧和專長領域參與過的重點項目個人優勢和學習能力職業規劃 示例&#xff1a; “我是一名有前端開發經驗的工程師&#xff0c;熟練掌握React、Vue等主流框架&#x…

集成電路學習:什么是Object Tracking目標跟蹤

Object Tracking:目標跟蹤 Object Tracking,即目標跟蹤,是計算機視覺領域的一個重要研究方向,它專注于在視頻幀序列中連續地監測和定位一個或多個目標對象的位置。以下是對目標跟蹤技術的詳細解析: 一、定義與目的 定義: 目標跟蹤是指在視頻序列中,通過特定的算法…

深入理解計算機系統

參考書籍 8-18 處理器體系結構不同于馮諾依曼與哈佛體系 壓棧與退棧與理解c等高級語言的工作原理息息相關&#xff0c;也是常用的攻擊手段 Buffer Overflow的主要技術基礎 day2 繼續讀前言之類的 本書前言 這本書&#xff0c;講述應用程序員如何能夠利用系統知識來編寫更好…

LLM 中 token 簡介與 bert 實操解讀

一、什么是 LLM&#xff1f; LLM&#xff0c;全稱為 Large Language Model&#xff08;大語言模型&#xff09;&#xff0c;是一種基于神經網絡&#xff08;主要是 Transformer 結構&#xff09;的大規模自然語言處理&#xff08;NLP&#xff09;模型。其核心能力在于理解、生成…

【運維心得】三步更換HP筆記本電腦外殼

目錄 準備工作 第一步&#xff1a;拆卸電池與后蓋 第二步&#xff1a;處理隱藏螺絲 第三步&#xff1a;斷開內部排線 總結一下 今天又碰到了兩臺HP的筆記本&#xff0c;一臺外殼完好&#xff0c;但是無法開機&#xff0c;判斷是主板問題。另外一臺外殼有損壞&#xff0c;但…

深入 Linux 網絡(一) -- 網卡隊列

文章目錄網卡網卡的核心功能網卡的關鍵技術單隊列網卡多隊列網卡查看網卡信息ifconfigethtool查看網卡隊列Linux 查看中斷綁定網卡中斷查詢查看中斷綁定的 cpu總結1. 默認情況&#xff08;單隊列網卡&#xff09;2. 多隊列網卡3. 如何查看和配置綁定關系&#xff1f;4. 性能優化…