k8s基础(6)—Kubernetes-存储

server/2025/1/16 14:10:53/

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 参考

阅读以下页面中描述的 API:
  • PersistentVolume
  • PersistentVolumeClaim
资料来自官网介绍: 持久卷 | Kubernetes

一、搭建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里

可以看到修改之后的数据已经同步到了pod中
以上为原生方式挂载存储,这种方式挂载在容器删除时宿主机上共享盘里的数据不会被清除会残留大量的脏数据,在大规模的集群中会有大量的容器运行或者被销毁,如果采用这种方式进行挂载会造成大量磁盘空间被占,不利于运维的维护工作。

三、卷挂载

能对容量进行限制可以分配指定的空间,卷挂载之后容器销毁,挂载的数据会自动被销毁。
PV:持久卷
PVC:持久卷申明

1、创建PV池

静态供应
#nfs挂载目录下创建3个pv空间目录 
mkdir -p /opt/nfs/data/{pv01,pv02,pv03}

2、创建PV

如下创建了3个PV卷组
注意:
创建的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
将数据备份或迁移出来,然后修改 PV,删除 claimRef 对 PVC 的引用,这个时候 Kubernetes 的 PV 控制器 watch 到 PV 变化后,就会将 PV 修改为 Available 状态,Available 状态时PV可以被PVC绑定。
步骤二:删除 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的创建过程

先创建PV,再创建PVC帮忙该PV,再创建Pod绑定该PVC
#步骤一:先创建一个名为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绑定的共享盘上观察写入数据同步的情况

http://www.ppmy.cn/server/158836.html

相关文章

ES6的高阶语法特性

一、模板字符串的高级用法 1.1.模板字符串的嵌套 模板字符串的嵌套允许在一个模板字符串内部再嵌入一个或多个模板字符串。这种嵌套结构在处理复杂数据结构或生成具有层级关系的文本时非常有用。 1. 嵌套示例 假设我们有一个包含多个对象的数组,每个对象都有名称、…

Unity【Colliders碰撞器】和【Rigibody刚体】的应用——小球反弹效果

目录 Collider 2D 定义: 类型: Rigidbody 2D 定义: 属性和行为: 运动控制: 碰撞检测: 结合使用 实用检测 延伸拓展 1、在Unity中优化Collider 2D和Rigidbody 2D的性能 2、Unity中Collider 2D…

辅助云运维

为客户提供运维支持,保障业务连续性。 文章目录 一、服务范围二、服务内容三、服务流程四、 服务交付件五、责任分工六、 完成标志 一、服务范围 覆盖范围 云产品使用咨询、问题处理、配置指导等; 云产品相关操作的技术指导; 云相关资源日常…

Kafka权威指南(第2版)读书笔记

目录 Kafka生产者——向Kafka写入数据生产者概览创建Kafka生产者bootstrap.serverskey.serializervalue.serializer 发送消息到Kafka同步发送消息异步发送消息 生产者配置client.idacks消息传递时间max.block.msdelivery.timeout.msrequest.timeout.msretries 和retry.backoff.…

如何修复Android上未安装的应用程序

在Android设备上安装应用程序通常是一个简单的过程。然而,“ Android上未安装应用程序”是一种常见的智能手机错误消息,由于一个或多个原因而经常遇到。发现由于即将出现故障而无法充分利用手机,这当然会非常令人沮丧,但幸运的是&…

结合night compute分析 利用tensor core 优化K值较大的矩阵乘(超过cublas50%)

一 night compute分析 将cublas作为base line和现有的代码分析 图1.1 可以发现计算吞吐量明显偏低,能想到的就是计算单元处于空闲的概率较大,是访存密集型算子,因此可以增大数据的吞吐量,多给计算单元提供数据 二 代码 #include "common.h"//mma计算的基本尺…

JavaScript基础(1)

一.输入与输出 9行:alert页面弹窗 10:页面显示 11:控制台输出,页面不显示 12:页面弹出输入框

RDP、VNC、SSH 三种登陆方式的差异解析

一、引言 在计算机系统管理和远程访问的领域中,RDP(Remote Desktop Protocol,远程桌面协议)、VNC(Virtual Network Computing,虚拟网络计算)和 SSH(Secure Shell)是三种广…