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.mzph.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.…