kubernetes》》k8s》》Volume 數據卷 PVC PV NFS

為啥需要數據卷

容器磁盤上的文件的生命周期是短暫的,這就使得在容器中運行重要應用時會出現一些問題。首先,當容器崩潰時,kubelet會重啟它,但是容器中的文件將丟失——容器以干凈的狀態(鏡像最初的狀態)重新啟動。其次,在 Pod 中同時運行多個容器時,這些容器之間通常需要共享文件。Kubernetes 中的 Volume 抽象就很好的解決了這些問題。

Volume類型

目前,Kubernetes支持以下Volume 類型:
在這里插入圖片描述

NFS

NFS是Network File System的縮寫,即網絡文件系統。分布式文件系統協議,NFS基于RPC(Remote Procedure Call)遠程過程調用實現,其允許一個系統在網絡上與他人共享目錄和文件。通過使用NFS,用戶和程序就可以像訪問本地文件一樣訪問遠程系統上的文件。NFS是一個非常穩定的,可以移植的網絡文件。具備可擴展和高性能等特性,達到了企業級應用質量標準。
Kubernetes中通過簡單地配置就可以掛載NFS到Pod中,而NFS中的數據是可以永久保存的,同時NFS支持同時寫操作。

》》NFS原理
NFS 使用RPC(Remote Procedure Call)的機制進行實現,RPC使得客戶端可以調用服務端的函數。同時,由于有VFS的存在,客戶端可以像使用其它普通文件系統一樣使用NFS文件系統。經由操作系統的內核,將NFS文件系統的調用請求通過TCP/IP 發送至服務端的NFS服務。NFS服務器執行相關的操作,并將操作結果返回給客戶端。

在這里插入圖片描述
在這里插入圖片描述

emptyDir可以提供不同容器間的文件共享,但不能存儲;hostPath可以為不同容器提供文件的共享并可以存儲,但受制于節點限制,不能跨節點共享;這時需要網絡存儲 (NAS),即既可以方便存儲容器又可以從任何集群節點訪問

安裝NFS 服務端

# NFS是一個分布式系統,建議單獨部署一臺主機
# 創建一個共享目錄 
mkdir -pv /usr/local/nfs/volumes
# 給這個目錄增加RW權限
chomd a+rw /usr/local/nfs/volumes
# Ubuntu 安裝NFS 服務端 
sudo apt update
sudo apt install nfs-kernel-server
# centos 安裝NFS 服務端
sudo yum install nfs-utils rpcbind
sudo systemctl enable --now nfs-server rpcbind
# 配置NFS服務目錄  vim /etc/exports 
追加   /usr/local/nfs/volumes *(rw,sync,no_subtree_check,no_root_squash)
# /usr/local/nfs/volumes 作為服務目錄向客戶端開放
# 10.244.0.0/16 表示這個網段IP都可以訪問,也可以 *  表示任何IP都可以訪問
# rw 讀寫權限
# sync  同步權限
# no_subtree_check  如果輸出目錄是一個子目錄,NFS服務器不檢查其父目錄的權限
# no_root_squash    客戶端連接服務端時如果使用是root用戶,那么也擁有對服務端分享的目錄的root權限# 重啟服務,讓上面的配置生效
sudo exportfs -ra  
# 重新加載exports配置
sudo systemctl restart nfs-kernel-server 
##  上面是針對 nfs 服務端的操作  
## 下面對nfs檢測是否能使用,可以跟上面同一個節點或另外找一個節點  以下以是在k8s 集群的節點中操作
# 安裝客戶端
apt update
apt install -y nfs-common
# 創建NFS 客戶端掛載目錄
mkdir -pv /usr/local/kubernetes/nfs-volumes-mount
# 將NFS服務端/usr/local/nfs/volumes  的目錄掛載到NFS 客戶端的 /usr/local/kubernetes/nfs-volumes-mount 目錄
# 如果報錯 mount.nfs: access denied by server while mounting
# 要檢查 是否允許ip地址掛載,或是否有讀寫的權限 
mount 172.30.164.60:/usr/local/nfs/volumes /usr/local/kubernetes/nfs-volumes-mount 
# 查看是否掛載成功
df  | grep mount# 取消NFS 客戶端掛載   注意不要直接在掛載目錄下執行(就是不能在nfs-volumes-mount目錄下執行),否則會報錯(device is busy
)
umount /usr/local/kubernetes/nfs-volumes-mount 
# nfs-volumes-mount  這個文件夾也需要手動刪除

》》或者在安裝nfs客戶端節點 機器中 執行
》showmount -e 172.30.164.60 ip地址就是 nfs服務端的ip
在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

PV PVC

在這里插入圖片描述
》》定義pv

# 只需在master節點執行 
# 創建pv的配置文件
apiVersion: v1
kind: PersistentVolume
metadata:name: nfs-pv-sqlserver
spec:# 設置容量capacity:storage: 5Gi# 訪問模式accessModes:# 該卷能夠以讀寫模式被多個節點同時加載- ReadWriteMany# 回收策略,這里是基礎擦除  相當于 rm -rf /掛載/persistentVolumeReclaimPolicy: Recyclenfs:# NFS 服務端設置的路徑  就是 vim /etc/exportspath: "/usr/local/nfs/volumes"# NFS 服務端地址server: 172.30.164.60readOnly: false
# 
kubectl create -f nfs-pv-sqlserver.yml
# 
kubectl get pv

在這里插入圖片描述

》》定義pvc

# 也只需要在 master節點執行 
# nfs-pvc-sqlserver.ymlapiVersion: v1
kind: PersistentVolumeClaim
metadata: name: nfs-pvc-sqlserver-zen
spec:accessModes:# 需要使用和PV 一致的訪問模式- ReadWriteMany# 按需分配資源resources:requests:storage: 2Gi# 部署 上面的yml文件
kubectl create -f nfs-pvc-sqlserver.yml 
# 查看
kubectl get pvc 

在這里插入圖片描述

》》定義sqlserver 配置文件

# 創建命名空間
apiVersion: v1
kind: Namespace
metadata:name: sqlserver
---
# sqlserver-secret.yaml
apiVersion: v1
kind: Secret
metadata:name: mssql-secretnamespace: sqlserver
type: Opaque
data:MSSQL_SA_PASSWORD: "U3VwZXJTdHJvbmdQYXNzMTIzIQ=="  # Base64 編碼的密碼(示例:SuperStrongPass123!)
---
# sqlserver 部署文件
apiVersion: apps/v1
kind: Deployment
metadata:name: mssql-deploymentnamespace: sqlserver
spec:replicas: 1selector:matchLabels:app: mssqltemplate:metadata:labels:app: mssqlspec:containers:- name: mssqlimage: mcr.microsoft.com/mssql/server:2022-latestports:- containerPort: 1433env:- name: MSSQL_PIDvalue: "Developer"  # 版本:Developer/Express/Enterprise(按需選擇)- name: ACCEPT_EULAvalue: "Y"- name: MSSQL_SA_PASSWORDvalueFrom:secretKeyRef:name: mssql-secretkey: MSSQL_SA_PASSWORDvolumeMounts:- name: mssql-datamountPath: /var/opt/mssqlvolumes:- name: mssql-datapersistentVolumeClaim:claimName: nfs-pvc-sqlserver-zen
---
# sqlserver-service.yaml
apiVersion: v1
kind: Service
metadata:name: mssql-servicenamespace: sqlserver
spec:selector:app: mssqlports:- protocol: TCPport: 1433targetPort: 1433nodePort: 30099type: NodePort  # 生產環境可改為 LoadBalancer 或 NodePort

可用把 PVC、PV、命名空間、應用部署(sqlserver) 放在一個ymal文件

在這里插入圖片描述

# 創建命名空間
apiVersion: v1
kind: Namespace
metadata:name: sqlserver
---
# pv配置文件
apiVersion: v1
kind: PersistentVolume
metadata:name: nfs-pv-sqlserver# 由于 PV 是集群級別的資源,即 PV 可以跨 namespace 使用,所以 PV 的 metadata 中不用配置 namespace#namespace: sqlserverlabels:app: kaizen
spec:# 設置容量capacity:storage: 5Gi# 訪問模式accessModes:# 該卷能夠以讀寫模式被多個節點同時加載- ReadWriteMany# 回收策略,這里是基礎擦除  相當于 rm -rf /掛載/*persistentVolumeReclaimPolicy: RecyclestorageClassName: nfsnfs:# NFS 服務端設置的路徑  就是 vim /etc/exportspath: "/usr/local/nfs/volumes"# NFS 服務端地址server: 172.30.164.60readOnly: false
---
# pvc  配置文件
apiVersion: v1
kind: PersistentVolumeClaim
metadata: name: nfs-pvc-sqlserver-zennamespace: sqlserver
spec:accessModes:# 需要使用和PV 一致的訪問模式- ReadWriteMany# 按需分配資源resources:requests:storage: 2GistorageClassName: nfsselector:matchLabels:app: kaizen
---
# sqlserver-secret.yaml
apiVersion: v1
kind: Secret
metadata:name: mssql-secretnamespace: sqlserver
type: Opaque
data:MSSQL_SA_PASSWORD: "U3VwZXJTdHJvbmdQYXNzMTIzIQ=="  # Base64 編碼的密碼(示例:SuperStrongPass123!)
---
# sqlserver 部署文件
apiVersion: apps/v1
kind: Deployment
metadata:name: mssql-deploymentnamespace: sqlserver
spec:replicas: 1selector:matchLabels:app: mssqltemplate:metadata:labels:app: mssqlspec:containers:- name: mssqlimage: mcr.microsoft.com/mssql/server:2022-latestports:- containerPort: 1433env:- name: MSSQL_PIDvalue: "Developer"  # 版本:Developer/Express/Enterprise(按需選擇)- name: ACCEPT_EULAvalue: "Y"- name: MSSQL_SA_PASSWORDvalueFrom:secretKeyRef:name: mssql-secretkey: MSSQL_SA_PASSWORDvolumeMounts:- name: mssql-datamountPath: /var/opt/mssqlvolumes:- name: mssql-datapersistentVolumeClaim:claimName: nfs-pvc-sqlserver-zen
---
# sqlserver-service.yaml
apiVersion: v1
kind: Service
metadata:name: mssql-servicenamespace: sqlserver
spec:selector:app: mssqlports:- protocol: TCPport: 1433targetPort: 1433nodePort: 30099type: NodePort  # 生產環境可改為 LoadBalancer 或 NodePort

在這里插入圖片描述
》》密碼:SuperStrongPass123!

在這里插入圖片描述
》》持續化了
在這里插入圖片描述

在這里插入圖片描述

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

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

相關文章

第十六屆藍橋杯 省賽C/C++ 大學B組

編程題目現在在洛谷上都可以提交了。 未完待續,寫不動了。 C11 編譯命令 g A.cpp -o A -Wall -lm -stdc11A. 移動距離 本題總分:5 分 問題描述 小明初始在二維平面的原點,他想前往坐標 ( 233 , 666 ) (233, 666) (233,666)。在移動過程…

谷歌怎么設置在新標簽頁中打開網頁

按圖示操作即可,藏得真深啊,無語,而且就算打開了,點收藏夾,頂部快捷欄里的網站,網站里的連接,打開也還是覆蓋原來的,呵呵呵呵呵呵呵,有沒有人管管 另外我的edge不知咋滴…

【企業級數據安全】掌握高性能Log4j2敏感信息脫敏方案

前言 在數據安全合規日益嚴格的今天,日志中的敏感信息保護已成為企業IT建設的必備環節。本文帶您深入了解如何打造一套高性能、可實時配置的Log4j2日志脫敏插件,輕松應對各類敏感數據保護需求,讓您的系統既滿足合規要求,又不犧牲…

Linux中的tar -P選項

tar -P選項 Linux中的tar命令可用于文件和目錄的歸檔以及壓縮解壓縮。而其中的-P選項是什么含義呢?下面我們就來看一看 1、不添加-P選項 對于如下壓縮命令: tar -czvf pkg.tar.gz /opt/software執行該命名,控制臺首行輸出將會提示&#xf…

【2025年泰迪杯數據挖掘挑戰賽】B題 詳細解題思路+數據預處理+代碼分享

目錄 2025年泰迪杯B題詳細解題思路問題一問題分析數學模型Python代碼Matlab代碼 問題二問題分析數學模型Python代碼Matlab代碼 問題三問題分析數學模型Python代碼Matlab代碼 問題四問題分析數學模型Python代碼Matlab代碼 2025年泰迪杯B題詳細解題思路 初步分析整理了B題的賽題分…

SpringBoot3快速入門筆記

springboot3簡介 SpringBoot 幫我們簡單、快速地創建一個獨立的、生產級別的 Spring 應用(說明:SpringBoot底層是Spring) 大多數 SpringBoot 應用只需要編寫少量配置即可快速整合 Spring 平臺以及第三方技術 特性: ● 快速創建…

記錄centos8安裝寶塔過程(兩個腳本)

1、切換系統源&#xff08;方便使用寶塔安裝腳本下載&#xff09; bash <(curl -sSL https://linuxmirrors.cn/main.sh) 2、寶塔安裝腳本在寶塔的官網 寶塔面板下載&#xff0c;免費全能的服務器運維軟件 根據自己的系統選擇相應的腳本 urlhttps://download.bt.cn/insta…

Xdocreport實現根據模板導出word

只使用freemaker生成簡單的word文檔很容易&#xff0c;但是當word文檔需要插入動態圖片&#xff0c;帶循環數據&#xff0c;且含有富文本時解決起來相對比較復雜&#xff0c;但是使用Xdocreport可以輕易解決。 Xdocreport既可以實現文檔填充也可以實現文檔轉換&#xff0c;此處…

VMware Fusion Pro/Player 在 macOS 上的完整安裝與使用指南

VMware Fusion Pro/Player 在 macOS 上的完整安裝與使用指南—目錄 一、VMware 產品說明二、下載 VMware Fusion三、安裝前準備四、安裝 VMware Fusion步驟 1&#xff1a;安裝程序步驟 2&#xff1a;首次啟動配置步驟 3&#xff1a;輸入許可證 五、創建虛擬機步驟 1&#xff1a…

Redis常用數據結構和應用場景

一、前言 Redis提供了多種數據結構&#xff0c;每種結構對應不同的應用場景。本文對部分常用的核心數據結構和典型使用場景作出介紹。 二、String&#xff08;字符串&#xff09; 特點&#xff1a;二進制安全&#xff0c;可存儲文本、數字、序列化對象等。場景&#xff1a; 緩…

spring security oauth2.0的四種模式

OAuth 2.0 定義了 4 種授權模式&#xff08;Grant Type&#xff09;&#xff0c;用于不同場景下的令牌獲取。以下是每種模式的詳細說明、適用場景和對比&#xff1a; 一、授權碼模式&#xff08;Authorization Code Grant&#xff09; 適用場景 ? Web 應用&#xff08;有后端…

Oracle 排除交集數據 MINUS

MINUS 是 Oracle 數據庫中的一種集合操作符&#xff0c;用于返回第一個查詢結果中存在但第二個查詢結果中 不存在 的 唯一行。其核心功能是 排除交集數據&#xff0c;常用于數據差異分析或過濾特定記錄 一、核心功能 排除交集&#xff1a;返回第一個查詢結果中 不在第二個查詢結…

WiFi那些事兒(四)

目錄 一、IEEE 802.11ah標準簡介 二、IEEE 802.11ah信道特點 三、IEEE 802.11ah傳輸模式 在WiFi通信領域&#xff0c;信號繞射能力一直是一個關鍵問題。常規的WiFi設備多工作在2.4GHz和5GHz頻段&#xff0c;這些頻段的電磁波波長通常小于障礙物尺寸&#xff0c;受電磁波本身…

C++在Linux上生成動態庫并調用接口測試

加減乘除demo代碼 項目結構 CPP/ ├── calculator.cpp ├── calculator.h ├── main.cpp 頭文件 #ifndef CALCULATOR_H #define CALCULATOR_H#ifdef __cplusplus extern "C" {#endifdouble add(double a, double b);double subtract(double a, double b…

離線密碼生成器:安全可靠的密碼管理解決方案

離線密碼生成器&#xff1a;安全可靠的密碼管理解決方案 在當今數字時代&#xff0c;我們每天都需要使用各種網站和應用程序&#xff0c;每個賬戶都需要一個強密碼來保護我們的個人信息和隱私。然而&#xff0c;記住多個復雜的密碼幾乎是不可能的任務。今天&#xff0c;我要向…

ChatRex: Taming Multimodal LLM for Joint Perception and Understanding 論文理解和翻譯

一、TL&#xff1b;DR MLLM在感知方面存在不足&#xff08;遠遠比不上專家模型&#xff09;&#xff0c;比如Qwen2-VL在coco上recall只有43.9%提出了ChatRex&#xff0c;旨在從模型設計和數據開發兩個角度來填補這一感知能力的缺口ChatRex通過proposal邊界框輸入到LLM中將其轉…

自動駕駛技術-相機_IMU時空標定

自動駕駛技術-相機_IMU時空標定 時間延遲 時間延遲 參考鏈接1、2 相機主要分為全局和卷簾快門相機&#xff0c;從觸發到成像的過程包括&#xff1a;復位時間、AE()曝光時間、讀出時間 全局快門如下圖所示 卷簾快門如下圖所示 相機錄制視頻時&#xff0c;為了保持固定頻率&am…

Vue3 + Vite + TS,使用 Web Worker,web worker進階 hooks

worker 具體通訊方式 1.由 web page 發送消息- worker.postMessage(發送數據) 2.web worker 接收消息并執行相關邏輯- onmessage (e) > { 接收數據并處理邏輯postMessage(傳遞處理后的數據)} 3.由 web page 監聽 worker 消息&#xff0c;包括&#xff1a;- 處理數據的監聽…

AIDD-人工智能藥物設計-AI 精準預測蛋白質變構位點

Allo-PED: AI 精準預測蛋白質變構位點 目錄 Allo-PED 框架融合蛋白質語言模型與結構特征,顯著提高了變構位點預測的準確性和泛化能力。EcoFoldDB 利用蛋白質結構信息,為宏基因組提供了精確且可擴展的生態功能注釋新方法,顯著提升了對未知微生物功能的認知。上下文分子適配(…

1558 找素數

1558 找素數 ??難度&#xff1a;中等 &#x1f31f;考點&#xff1a;質數 &#x1f4d6; &#x1f4da; import java.util.Scanner; import java.util.Arrays;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int a sc.…