k8s基础(6)—Kubernetes-存储
Kubernetes-存储概述
k8s的持久券简介
Kubernetes的持久卷(PersistentVolume, PV)和持久卷声明(PersistentVolumeClaim, PVC)为用户在Kubernetes中使用卷提供了抽象。PV是集群中的一块存储,PVC是对这部分存储的请求。
PV是集群中的一个资源,就像节点或者pod一样。PVC是对PV资源的请求,类似于Pod是对节点资源的请求。Pod可以请求特定的资源量,PVC可以请求特定的存储大小和访问模式(例如,可以被多个节点并发访问或者仅被单个节点访问)。
PV和PVC的关系类似于数据库中的表和视图,PV是存储,PVC是存储的视图。
解决方案:
1、创建一个PersistentVolume
apiVersion: v1
kind: PersistentVolume
metadata:name: pv0001
spec:capacity:storage: 5GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RecyclestorageClassName: slownfs:path: /data/k8s/pv0001server: 172.17.0.2
2、创建一个PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: myClaim
spec:accessModes:- ReadWriteOnceresources:requests:storage: 8Gi
在这个例子中,PersistentVolumeClaim请求8Gi的存储空间,Kubernetes将会找到一个符合条件的PersistentVolume,并将其分配给这个PersistentVolumeClaim。
注意:PersistentVolume的生命周期独立于PVC和使用它的Pod,PV的生命周期需要手动管理,包括创建、绑定、使用、删除和回收。
相关文档
- 进一步了解创建持久卷
- 进一步学习创建 PVC 申领
- 阅读持久存储的设计文档
API 参考
- PersistentVolume
- PersistentVolumeClaim

一、搭建NFS文件系统环境
1、环境准备
1.1、所有节点安装nfs-utils工具
#k8s集群上的所有机器都需要安装
yum install -y nfs-utils
2、主节点配置NFS
echo "/opt/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports
cat /etc/exports
mkdir -p /opt/nfs/data/
systemctl enable rpcbind --now
systemctl enable nfs-server.service --now
#配置生效
exportfs -r

3、从节点上进程磁盘挂载数据写入测试
#检查远程机器哪些目录可以挂载
showmount -e 192.168.72.130#在本机创建挂载的节点
mkdir -p /opt/nfs/data#挂载主节点的/opt/nfs/data目录
mount -t nfs -o timeo=30 192.168.72.130:/opt/nfs/data /opt/nfs/data#配置开机自动挂载
[root@node2 ~]# vim /etc/rc.d/rc.local
#开机自动挂载
mount -t nfs -o timeo=30 192.168.72.130:/opt/nfs/data /opt/nfs/data#在各个节点测试挂载共享盘是否能正常写入数据
[root@node1 data]# echo test > node1.txt
[root@node2 data]# echo test > node2.txt


二、原生方式数据挂载(不创建PV)
1、创建yaml配置绑定对应的共享盘目录
#先创建存放数据的共享目录
mkdir -p /opt/nfs/data/pv-nginx #/opt/nfs/data为nfs挂载的目录#创建Deployment项目
[root@master pv]# vim originalpv.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:run: pv-nginxname: pv-nginx
spec:replicas: 2selector:matchLabels:app: pv-nginxtemplate:metadata:labels:app: pv-nginxspec:containers:- image: nginxname: nginxvolumeMounts:- name: nginx-htmlmountPath: /usr/share/nginx/htmlvolumes:- name: nginx-htmlnfs:server: 192.168.72.130path: /opt/nfs/data/pv-nginx#运行
kubectl apply -f originalpv.yaml

2、在挂载盘上写入数据进行测试

2.1、查看数据是否已经同步到pod里




三、卷挂载
1、创建PV池
#nfs挂载目录下创建3个pv空间目录
mkdir -p /opt/nfs/data/{pv01,pv02,pv03}

2、创建PV
apiVersion: v1
kind: PersistentVolume
metadata:name: p01-50m
spec:capacity:storage: 50MaccessModes:- ReadWriteOncestorageClassName: nfsnfs:path: /opt/nfs/data/pv01server: 192.168.72.130---
apiVersion: v1
kind: PersistentVolume
metadata:name: p01-5gi
spec:capacity:storage: 5GiaccessModes:- ReadWriteOncestorageClassName: nfsnfs:path: /opt/nfs/data/pv02server: 192.168.72.130
---
apiVersion: v1
kind: PersistentVolume
metadata:name: p01-10gi
spec:capacity:storage: 10GiaccessModes:- ReadWriteOncestorageClassName: nfsnfs:path: /opt/nfs/data/pv03server: 192.168.72.130

3、PVC创建与绑定
3.1、分别创建3个PVC为:10M,2G,8G
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nginx-pvc10mi
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10MistorageClassName: nfs---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nginx-pvc2gi
spec:accessModes:- ReadWriteOnceresources:requests:storage: 2GistorageClassName: nfs---apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nginx-pvc8gi
spec:accessModes:- ReadWriteOnceresources:requests:storage: 8GistorageClassName: nfs


3.2、删除已经创建PVC
#删除某个PVC
kubectl delete pvc nginx-pvc10mi

3.2.1、PV一直是Release状态处理步骤
PVC 只能和 Available 状态的 PV 进行绑定,当PV处于Release状态时不能绑定
步骤一:数据备份
#备份
cp -rp /opt/nfs/data/pv01/* /opt/k8s/backup/pv01

步骤二:删除 claimRef 对 PVC 的引用
#修改
[root@master pv]# kubectl edit pv p01-50m#删除一下内容:claimRef:apiVersion: v1kind: PersistentVolumeClaimname: nginx-pvc10minamespace: defaultresourceVersion: "451247"uid: 48bc084b-49eb-4864-901a-e1b9da4b75c8


步骤三:查看PV的状态是否正常

3.3、创建PVC时申请容量不能大于PV容量

四、创建Pod绑定PVC
1、一个完整的Pod数据同步到PV的创建过程
#步骤一:先创建一个名为p01-50m,storageClassName为nfs的PV
apiVersion: v1
kind: PersistentVolume
metadata:name: p01-50m
spec:capacity:storage: 50MaccessModes:- ReadWriteOncestorageClassName: nfsnfs:path: /opt/nfs/data/pv01server: 192.168.72.130---
#步骤二:创建PVC名称为nginx-pvc10mi,绑定storageClassName为nfs的PV
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nginx-pvc10mi
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10MistorageClassName: nfs---
#步骤三:创建Pod引用上述创建的PVC:nginx-pvc10mi
apiVersion: apps/v1
kind: Deployment
metadata:labels:run: nginx-pvcname: nginx-pvc
spec:replicas: 2selector:matchLabels:app: nginx-pvctemplate:metadata:labels:app: nginx-pvcspec:containers:- image: nginxname: nginxvolumeMounts:- name: nginx-htmlmountPath: /usr/share/nginx/htmlvolumes:- name: nginx-htmlpersistentVolumeClaim:claimName: nginx-pvc10mi #绑定上述创建的nginx-pvc10mi

2、分别在Pod和对应的PV中写入数据
2.1、在PV绑定的共享盘上写入数据在Pod里观察数据写入的情况


2.2、在Pod里写入数据,在PV绑定的共享盘上观察写入数据同步的情况


相关文章:

k8s基础(6)—Kubernetes-存储
Kubernetes-存储概述 k8s的持久券简介 Kubernetes的持久卷(PersistentVolume, PV)和持久卷声明(PersistentVolumeClaim, PVC)为用户在Kubernetes中使用卷提供了抽象。PV是集群中的一块存储,PVC是对这部分存储的请求。…...

K8S--配置存活、就绪和启动探针
目录 1 本人基础环境2 目的3 存活、就绪和启动探针介绍3.1 存活探针3.2 就绪探针3.3 启动探针 4 探针使用场景4.1 存活探针4.2 就绪探针4.3 启动探针 5 配置存活、就绪和启动探针5.1 定义存活探针5.2 定义一个存活态 HTTP 请求接口5.3 定义 TCP 的就绪探针、存活探测5.4 定义 g…...

永久免费工业设备日志采集
永久免费: <下载> <使用说明> 用途 定时全量或增量采集工控机,电脑文件或日志. 优势 开箱即用: 解压直接运行.不需额外下载.管理设备: 后台统一管理客户端.无人值守: 客户端自启动,自更新.稳定安全: 架构简单,兼容性好,通过授权控制访问. 架构 技术架构: Asp…...
详解 Docker 启动 Windows 容器第二篇:技术原理与未来发展方向
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言所遇问题问题 1:Docker 容器启动的 Windows 实例调用了 KVM 驱动,但为什么用 virsh list 命令查不到虚拟机?这意味着它不是一…...
HC32L136K8TA单片机输出互为反相双路PWM
可这里可以参考stm32的代码看看 HC32L136K8TA的机制跟32差不多 以使用一个通用定时器输出两路互为反相的 PWM 波,但需要通过一定的配置技巧实现。与高级定时器(如 STM32 的 TIM1、TIM8 等)不同,通用定时器通常没有直接的互补输出…...

数据分析-55-时间序列分析之获取时间序列的自然周期时间区间
文章目录 1 获取某年的总天数1.1 get_year_days()1.2 应用函数2 获取某年的总周数2.1 get_year_weeks()2.2 应用函数3 获取某日期属于某年的周数3.1 get_time_yearweek()3.2 应用函数4 获取某年某周的开始时间和结束时间4.1 get_week_start_end()4.2 应用函数5 获取往前num周期…...

Java Stream流操作List全攻略:Filter、Sort、GroupBy、Average、Sum实践
在Java 8及更高版本中,Stream API为集合处理带来了革命性的改变。本文将深入解析如何运用Stream对List进行高效的操作,包括筛选(Filter)、排序(Sort)、分组(GroupBy)、求平均值&…...

Sentaurus TCAD学习笔记:transform指令
目录 一、transform指令简介二、transform指令的实现1.cut指令2.flip指令3.rotate指令4.stretch指令5.translate指令6.reflect指令 三、transform指令示例 一、transform指令简介 在Sentaurus中,如果需要对器件进行翻转、平移等操作,可以通过transform指…...

vscode支持ssh远程开发
文章目录 一、生成ssh使用的公钥/密钥对二、使用vscode通过ssh连接服务器1.安装插件2.配置文件3.连接服务器4.新建文件夹,存放不同的任务5.为不同的项目选择不同的conda环境 三、使用scp命令与服务器互传文件、文件夹1.检查Windows 系统是否支持scp命令2.在Windows系…...
Java线程详解
一、线程的基本概念 1. 什么是线程? 线程是程序执行的一个单元,它是进程中的一个实体,是被系统独立调度和分派的基本单位。一个进程可以包含多个线程,这些线程共享进程的资源,如内存空间和文件句柄,但每个…...

java -jar启动项目报错:XXX.jar中没有主清单属性
XXX.jar中没有主清单属性 1、错误复现2、错误原因3、解决方案 java -jar启动项目报错:XXX.jar中没有主清单属性 1、错误复现 今天使用springboot给项目打了jar包,使用命令启动时报错,截图如下: 2、错误原因 项目的pom文件配置如…...

【Vue - Element 】实现表单输入框的远程搜索功能
需求 表单是一个常见的元素,而在表单中,常常需要用户从大量的数据中选择一个或多个选项。 为了提高用户体验,提供远程搜索功能可以帮助用户快速找到所需的选项,而不是从冗长的下拉列表中手动查找。 以该需求为例,我…...
Linux(Centos 7.6)命令详解:split
1.命令作用 Linux系统中的一个用于拆分文件的命令。它可以将一个大文件拆分成多个小文件,以便于传输、存储或处理 2.命令语法 Usage: split [OPTION]... [INPUT [PREFIX]] Usage: split [选项]... [输入文件] [输出文件前缀] 3.参数详解 OPTION: -a, --suffi…...

八股学习 Redis
八股学习 Redis 使用场景常见问题问题1、2示例场景缓存穿透解决方案一解决方案二 问题3示例场景缓存击穿解决方案 问题4示例场景缓存雪崩解决方案 问题5示例场景双写一致性强一致方案允许延时一致方案 问题6RDB方式AOF方式两种方式对比 问题7示例场景惰性删除定期删除 使用场景…...
如何通过高防服务隐藏服务器源IP
在网络安全领域,隐藏服务器的真实源IP地址是保护服务器免受直接攻击的重要手段之一。暴露的源IP地址容易成为黑客攻击的目标,尤其是DDoS攻击、端口扫描和暴力破解等威胁。高防服务(如阿里云盾、AWS Shield等)不仅提供强大的流量清…...

【WEB】网络传输中的信息安全 - 加密、签名、数字证书与HTTPS
文章目录 1. 概述2. 网络传输安全2.1.什么是中间人攻击2.2. 加密和签名2.2.1.加密算法2.2.2.摘要2.2.3.签名 2.3.数字证书2.3.1.证书的使用2.3.2.根证书2.3.3.证书链 2.4.HTTPS 1. 概述 本篇主要是讲解讲一些安全相关的基本知识(如加密、签名、证书等)&…...

借助Claude实现Playwright的自动化(MCP Server)
借助Claude实现Playwright的自动化(MCP Server) MCP Server自己开发也是可以的,现在也有很多开箱即用的MCP Server,可以在https://github.com/modelcontextprotocol/servers中查找 Playwright的MCP Server Playwright的MCP Server是社区开发的,它能够为LLM提供操作浏览器的…...
【区间DP】【hard】力扣730. 统计不同回文子序列
给你一个字符串 s ,返回 s 中不同的非空回文子序列个数 。由于答案可能很大,请返回对 109 7 取余 的结果。 字符串的子序列可以经由字符串删除 0 个或多个字符获得。 如果一个序列与它反转后的序列一致,那么它是回文序列。 如果存在某个 …...
【Vim Masterclass 笔记11】S06L24 + L25:Vim 文本的插入、变更、替换与连接操作同步练习(含点评课)
文章目录 S06L24 Exercise 06 - Inserting, Changing, Replacing, and Joining1 训练目标2 操作指令2.1. 打开 insert-practice.txt 文件2.2. 练习 i 命令2.3. 练习 I 命令2.4. 练习 a 命令2.5. 练习 A 命令2.6. 练习 o 命令2.7. 练习 O 命令2.8. 练习 j 命令2.9. 练习 R 命令2…...
分布式组件底层逻辑是什么?
分布式组件是指在分布式系统中执行特定功能的模块,通常分布在多个物理节点上,共同协作完成任务。其底层逻辑包括多个方面,从通信和数据管理到一致性和容错设计,具体如下: 1.分布式组件的核心特点 分布性:功…...

linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...

接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...