十一、K8S之持久化存储

持久化存储

一、概念

在K8S中,数据持久化可以让容器在重新调度、重启或者迁移时保留其数据,并且确保数据的可靠性和持久性。

持久化存储通常用于程序的状态数据、数据库文件、日志文件等需要在容器生命周期之外的数据,它可以通过各种存储解决方案实现,如主机路径、本地存储、网络存储(如NFS、ISCSI)、云存储等。

二、HostPath

HostPath是将节点上的文件或目录挂载到 Pod 上,此时该目录会变成持久化存储目录,即使 Pod 被删除后重启,也可以重新加载到该目录,该目录下的文件不会丢失。

但不适合生产环境,因为它对宿主机的依赖性较高,无法实现数据的高可用和迁移。

apiVersion: v1
kind: Pod
metadata:name: test-volume-pod
spec:containers:- image: nginxname: nginx-volumevolumeMounts:- mountPath: /test-pd # 挂载到容器的哪个目录name: test-volume # 挂载哪个 volumevolumes:- name: test-volumehostPath:path: /data # 节点中的目录type: Directory # 挂载目录类型 , Directory 代表/data必须存在 ,如果不存在则报错

在volumes类型为hostPath的时候, type有多种配置方式,如:

类型说明
DirectoryOrCreate如果给定的 path 不存在,就创建一个 755 的空目录
Directory这个目录必须存在
FileOrCreate如果给定的文件不存在,则创建一个空文件,权限为 644
File这个文件必须存在
SocketUNIX 套接字,必须存在
CharDevice字符设备,必须存在
BlockDevice块设备,必须存在

三、EmptyDir

EmptyDir 主要用于一个 Pod 中不同的 容器共享数据使用的,由于只是在 Pod 内部使用,因此与其他 volume 比较大的区别是,当 Pod 如果被删除了,那么 emptyDir 也会被删除。 这种方式适用于临时性的数据存储,当Pod重新启动时,EmptyDir也会被清空。也就是说它只做到了数据化共享,并没有做到持久化存储

apiVersion: v1
kind: Pod
metadata:name: test-emptyDir-pd
spec:containers:- image: nginxname: nginx-emptydirvolumeMounts:- mountPath: /cache1name: cache-volume- image: nginxname: nginx-emptydirvolumeMounts:- mountPath: /cache2name: cache-volumevolumes:- name: cache-volumeemptyDir: {}

四、NFS 挂载

4.1、安装NFS

需要使用nfs的文件服务的都要安装

  • 使用apt安装
apt-get update# 安装
apt-get install nfs-kernel-server nfs-common# 启动
systemctl start nfs-server
  • 修改配置文件
vim /etc/exports# /data/nfs/ 代表共享目录 , ip代表可访问的ip信息, 后面是权限
/data/nfs/ 192.168.31.0/24(rw,sync,no_subtree_check,no_root_squash)
  • 重启
# 重新加载
exportfs -f
systemctl reload nfs-server
  • 创建挂载目录
# 前面的是nfs服务地址及目录,后面是挂载到本地的目录
mount -t nfs 192.168.31.101:/data/nfs/html /data/nfs/nginx/html
  • 其他命令
查看挂载的目录
mount | grep nfs
4.2、配置文件使用
  • 配置文件
apiVersion: v1
kind: Pod
metadata:name: test-nfs-pd
spec:containers:- image: nginxname: test-containervolumeMounts:- mountPath: /usr/share/nginx/htmlname: test-volumevolumes:- name: test-volumenfs:server: 192.168.31.101 # 网络存储服务地址path: /data/nfs/html # 网络存储路径
  • 测试是否成功
# 在NFS服务的/data/nfs/html 目录下创建文件
echo '123' > index.html# 使用命令查看pod的ip
kubectl get po -o wide#使用wget访问
wget ip

五、PV和PVC

5.1、概念

持久卷(PersistentVolume,PV) 是集群中的一块存储,它可以是物理存储设备、网络存储卷或云提供商的存储服务。PV独立于Pod的生命周期,可以被多个Pod共享。由管理员事先制备, 或者使用存储类(Storage Class)来动态制备。

**持久卷申领(PersistentVolumeClaim,PVC)**是Pod对持久化存储的请求。 它相当于是Pod对PV的申请单。Pod可以通过声明PVC来请求所需的存储资源,并指定访问模式、容量和存储类等要求。Kubernetes会根据PVC的要求去匹配可用的PV,并将其绑定到Pod上。

总结起来,PV是集群中的存储资源,而PVC是Pod对存储资源的抽象化请求。PVC通过与PV的绑定,为Pod提供持久化存储。

5.2、生命周期
  • 1、创建

需要创建PV。PV定义了集群中的实际存储资源,可以是物理存储设备、网络存储等。然后,使用PVC来申请PV。PVC描述了应用程序对存储资源的需求。

  • 2、绑定

当用户创建一个 PVC 对象后,它会尝试与合适的PV进行绑定。绑定是通过使用PVC的标签选择器与PV的标签进行匹配完成的。如果找到匹配的PV,PVC就会与之绑定。
如果找不到对应的 PV,则需要看 PVC 是否设置 StorageClass 来决定是否动态创建 PV,若没有配置,PVC 就会一致处于未绑定状态,直到有与之匹配的 PV 后才会申领绑定关系。

  • 3、使用

Pod 将 PVC 当作存储卷来使用,集群会通过 PVC 找到绑定的 PV,并为 Pod 挂载该卷。
Pod 一旦使用 PVC 绑定 PV 后,为了保护数据,避免数据丢失问题,PV 对象会受到保护,在系统中无法被删除。

  • 4、回收

当PVC不再使用时,可以对其进行回收。回收的方式有两种:保留和删除

保留模式下,PV和相关的存储资源会被保留下来,不会被自动删除。这样可以确保数据的安全性,并提供手动清理的机会。
删除模式下,PV和相关的存储资源会被自动删除。这将释放存储资源供其他应用程序使用。

5.3、PV创建
  • 配置文件
apiVersion: v1
kind: PersistentVolume
metadata:name: pv001labels: spec:capacity:storage: 1Gi # pv 的容量volumeMode: Filesystem # 存储类型为文件系统accessModes: # 访问模式:ReadWriteOnce-单个读写、ReadWriteMany-多个读写、ReadOnlyMany-多个读- ReadWriteOnce # 可被单节点独写persistentVolumeReclaimPolicy: Recycle # 回收策略storageClassName: slow # 创建 PV 的存储类名,需要与 pvc 的相同mountOptions: # 加载配置- hard- nfsvers=4.1nfs: # 连接到 nfspath: /data/nfs/pv001 # 存储路径server: 192.168.31.101 # nfs 服务地址
  • 获取pv信息
kubectl get pv------------------------
NAME    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS      
pv001   1Gi        RWO            Recycle          Available            slow               
  • 配置状态说明
状态值说明
Available空闲,未被绑定
Bound已经被 PVC 绑定
ReleasedPVC 被删除,资源已回收,但是 PV 未被重新使用
Failed自动回收失败
5.4、PVC创建
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nfs-pvc
spec:accessModes:- ReadWriteOnce # 权限需要与对应的 pv 相同volumeMode: Filesystemresources:requests:storage: 1Gi # 资源可以小于 pv 的,但是不能大于,如果大于就会匹配不到 pvstorageClassName: slow # 名字需要与对应的 pv 相同
#  selector: # 使用选择器选择对应的 pv
#    matchLabels:
#      env: "dev"
#    matchExpressions:
#      - {key: environment, operator: In, values: [dev]}

当创建pvc能与pv匹配,后再查看pv状态时候,就会转变为Bound

5.5、Pod 绑定 PVC

apiVersion: v1
kind: Pod
metadata:name: pvc-test-pod
spec:containers:- image: nginxname: test-containervolumeMounts:- mountPath: /usr/share/nginx/htmlname: nfs-pvc-testvolumes:- name: nfs-pvc-testpersistentVolumeClaim:claimName: nfs-pvc # pvc 的名称

测试

# 先使用命令查看pod的内网地址
kubectl get po -o wide--------------------------------
NAME                            READY   STATUS        RESTARTS          AGE     IP
pvc-test-pod                    1/1     Running       0                 4m36s   10.244.36.124#调用
curl 10.244.36.124

六、StorageClass

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/133125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3.27每日一题(常系数线性非齐次方程的特解)

常系数非齐次线性方程的特解如何假设(两种)形式: 1、题目中 e 的 x 次幂以及 1,都是第一种:1可以看成为e的0次幂 注:题目给的多项式是特殊的形式,我们要设为一般的形式的多项式 2、题目中sin…

css基础之实现轮播图

原理介绍 图片轮播的原理是通过控制显示和隐藏不同的图片来实现图像的切换,从而创建连续播放的效果。用到的知识点有定位和定时器。 实现步骤: HTML 结构: 首先,需要在HTML中创建一个包含轮播图片的容器,通常使用 &l…

Verilog使用vscode

使用vscode打开.v文件 Tools setting texteditor vscode文件路径 [line number]:[file name] (可能会出错,可以去vscode确认打开的文件路径,后经调整后改为 vscode文件路径 [file name]) 安装插件 搜索Verilog 添加使用最多的 …

Vue3:解决基地址不同 数据交互http与https跨域问题

配置公共管理的api文件和vue.config.js可以解决跨域问题。一个项目对接不同的基地址和接口同理。 api export default {//接口基地址Millia: process.env.NODE_ENV development ? location.protocol // location.host /milliaApi : http://xx.xxx.xxxx/index.php/,Milli…

线上 kafka rebalance 解决

上周末我们服务上线完毕之后发生了一个kafka相关的异常,线上的kafka频繁的rebalance,详细的报错我已经贴到下面,根据字面意思:消费者异常 org.apache.kafka.clients.consumer.CommitFailedException: 无法完成提交,因为…

本周三商店更新:多款套装下线,四款升级武器带异色皮肤返厂

本周三将迎来26.2版本更新与11商店大更新,版本更新可点击26.2版本更新公告进行查看,这里不一一赘述了,下面大概罗列一下商店更新,有皮肤下架,大家还能趁最后时间入手,最重要的是四款升级武器返厂咯。 危险玩…

使用Postman工具做接口测试 —— 环境变量与请求参数格式!

引言 在上一篇笔记我们主要介绍了接口测试的基础知识与基本功能,本章主要介绍如何使用postman做接口测试。 配置环境变量和全局变量 环境变量和全局变量 环境管理中还可以点击“Global”添加全局变量,环境变量只有当选择了该环境时才生效,…

机器学习——CBOW负采样(未开始)

刚从前一个坑里,勉强爬出来,又掘开另一坑 看了很多文章B站up主。。。糊里糊涂 但是我发觉,对于不理解的东西,要多看不同up主写的知识分享 书读百遍,其意自现,我是不相信的,容易钻牛角尖 但是&am…

offsetof宏的使用、模拟实现及 (size_t)(((struct_type*)0)->mem_name)的解释

宏原型&#xff1a;offsetof(type,member) 作用&#xff1a;返回数据结构或联合体类型中成员的偏移量&#xff0c;以字节为单位 返回值&#xff1a;size_t类型的无符号整数 使用案例&#xff1a; #include <stdio.h> #include <stddef.h> struct foo {ch…

jenkins展示html报告样式需要注意的要点

一、jenkins展示html报告样式需要注意的要点 最后&#xff1a;

使用Kotlin与Unirest库抓取音频文件的技术实践

目录 摘要 一、Kotlin与Unirest库概述 二、使用Kotlin和Unirest抓取音频文件 1、添加Unirest依赖 2、发送HTTP请求获取音频文件 3、保存音频文件 三、完整代码示例 四、注意事项 结论 摘要 本文详细阐述了如何使用Kotlin编程语言与Unirest库抓取网络上的音频文件。首…

NSSCTF第11页(1)

[HUBUCTF 2022 新生赛]Calculate 进到主页 翻译 回答以下数学问题20次&#xff1b;你有3秒钟的时间来解决每个问题&#xff1b; 为了保护服务器&#xff0c;你不能在1秒内回答一个问题 您已回答0个问题&#xff1b; 让我们3秒速算&#xff0c;没那个实力&#xff0c;提示说是写…

DockerFile常用保留字指令及知识点合集

目录 DockerFile加深理解&#xff1a; DockerFile常用保留字指令 保留字&#xff1a; RUN&#xff1a;容器构建时需要运行的命令 COPY&#xff1a;类似ADD&#xff0c;拷贝文件和目录到镜像中。 将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 …

微信小程序之自定义组件开发

1、前言 从小程序基础库版本 1.6.3 开始&#xff0c;小程序支持简洁的组件化编程。所有自定义组件相关特性都需要基础库版本 1.6.3 或更高。开发者可以将页面内的功能模块抽象成自定义组件&#xff0c;以便在不同的页面中重复使用&#xff1b;也可以将复杂的页面拆分成多个低耦…

3D 线激光相机的激光条纹中心提取方法

论文地址:Excellent-Paper-For-Daily-Reading/application/centerline at main 类别:应用——中心线 时间:2023/11/06 摘要 线激光条纹中心提取是实现线激光相机三维扫描的关键,根据激光三角测量法研制了线激光相机,基于传统 Steger 法对其进行优化并提出一种适用于提…

爱上C语言:函数递归,青蛙跳台阶图文详解

&#x1f680; 作者&#xff1a;阿辉不一般 &#x1f680; 你说呢&#xff1a;生活本来沉闷&#xff0c;但跑起来就有风 &#x1f680; 专栏&#xff1a;爱上C语言 &#x1f680;作图工具&#xff1a;draw.io(免费开源的作图网站) 如果觉得文章对你有帮助的话&#xff0c;还请…

数据的备份和恢复

数据的备份和恢复 备份&#xff1a;完全备份 增量备份 完全备份&#xff1a;将整个数据库完整的进行备份 增量备份&#xff1a;在完全备份的基础之上&#xff0c;对后续新增的内容进行备份 备份的需求 1、在生产环境中&#xff0c;数据的安全至关重要、任何数据的丢失都可…

​软考-高级-信息系统项目管理师教程 第四版【第16章-项目采购管理-思维导图】​

软考-高级-信息系统项目管理师教程 第四版【第16章-项目采购管理-思维导图】 课本里章节里所有蓝色字体的思维导图

Ubuntu 创建用户

在ubuntu系统中创建用户&#xff0c;是最基本的操作。与centos7相比&#xff0c;有较大不同。 我们通过案例介绍&#xff0c;讨论用户的创建。 我们知道&#xff0c;在linux中&#xff0c;有三类用户&#xff1a;超级管理员 root 具有完全权限&#xff1b;系统用户 bin sys a…

Hello Qt!

目录 1. 什么是Qt 2. Qt中的模块 3. 下载安装 4. QtCreator 4. Hello Qt 解释 .pro 解释 main.cpp 解释 mainwindow.ui 解释 mainwindow.h 解释 mainwindow.cpp 5. Qt 中的窗口类 5.1 基础窗口类 5.2 窗口的显示 6. Qt 的坐标体系 7. 内存回收 1. 什么是Qt 是一…