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: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: slow
  nfs:
    path: /data/k8s/pv0001
    server: 172.17.0.2

2、创建一个PersistentVolumeClaim

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: myClaim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    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-nginx
  name: pv-nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: pv-nginx
  template:
    metadata:
      labels:
        app: pv-nginx
    spec:
      containers:
        - image: nginx
          name: nginx
          volumeMounts:
          - name: nginx-html
            mountPath: /usr/share/nginx/html
      volumes:
        - name: nginx-html
          nfs:
            server: 192.168.72.130
            path: /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: 50M
  accessModes:
    - ReadWriteOnce
  storageClassName: nfs
  nfs:
    path: /opt/nfs/data/pv01
    server: 192.168.72.130

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: p01-5gi
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  storageClassName: nfs
  nfs:
    path: /opt/nfs/data/pv02
    server: 192.168.72.130
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: p01-10gi
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  storageClassName: nfs
  nfs:
    path: /opt/nfs/data/pv03
    server: 192.168.72.130

3、PVC创建与绑定

3.1、分别创建3个PVC为:10M,2G,8G

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nginx-pvc10mi
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Mi
  storageClassName: nfs
  
  ---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nginx-pvc2gi
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
  storageClassName: nfs

---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nginx-pvc8gi
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 8Gi
  storageClassName: 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: v1
    kind: PersistentVolumeClaim
    name: nginx-pvc10mi
    namespace: default
    resourceVersion: "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: 50M
  accessModes:
    - ReadWriteOnce
  storageClassName: nfs
  nfs:
    path: /opt/nfs/data/pv01
    server: 192.168.72.130

---
#步骤二:创建PVC名称为nginx-pvc10mi,绑定storageClassName为nfs的PV
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nginx-pvc10mi
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Mi
  storageClassName: nfs

---
#步骤三:创建Pod引用上述创建的PVC:nginx-pvc10mi
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: nginx-pvc
  name: nginx-pvc
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-pvc
  template:
    metadata:
      labels:
        app: nginx-pvc
    spec:
      containers:
        - image: nginx
          name: nginx
          volumeMounts:
          - name: nginx-html
            mountPath: /usr/share/nginx/html
      volumes:
        - name: nginx-html
          persistentVolumeClaim:
            claimName: nginx-pvc10mi             #绑定上述创建的nginx-pvc10mi

2、分别在Pod和对应的PV中写入数据

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习-卷积神经网络反向传播梯度公式推导

这篇文章非常棒,单样本单通道的反向传播梯度公式推导我都理解了。为了防止找不到原网页,所以特复制于此 参考: https://zhuanlan.zhihu.com/p/640697443

论文笔记(四十七)Diffusion policy: Visuomotor policy learning via action diffusion(下)

Diffusion policy: Visuomotor policy learning via action diffusion(下) 文章概括5. 评估5.1 模拟环境和数据集5.2 评估方法论5.3 关键发现5.4 消融研究 6 真实世界评估6.1 真实世界Push-T任务6.2 杯子翻转任务6.3 酱汁倒入和涂抹任务 7. 实际双臂任务…

C#学习笔记 --- 简单应用

1.operator 运算符重载:使自定义类可以当做操作数一样进行使用。规则自己定。 2.partial 分部类: 同名方法写在不同位置,可以当成一个类使用。 3.索引器:使自定义类可以像数组一样通过索引值 访问到对应的数据。 4.params 数…

汽车基础软件AutoSAR自学攻略(四)-AutoSAR CP分层架构(3) (万字长文-配21张彩图)

汽车基础软件AutoSAR自学攻略(四)-AutoSAR CP分层架构(3) (万字长文-配21张彩图) 前面的两篇博文简述了AutoSAR CP分层架构的概念,下面我们来具体到每一层的具体内容进行讲解,每一层的每一个功能块力求用一个总览图,外加一个例子的图给大家进…

【2024年华为OD机试】 (CD卷,100分)- 最大N个数与最小N个数的和(Java JS PythonC/C++)

一、问题描述 题目描述 给定一个数组,编写一个函数来计算它的最大N个数与最小N个数的和。你需要对数组进行去重。 说明: 数组中数字范围 [0, 1000]最大N个数与最小N个数不能有重叠,如有重叠,输入非法返回 -1输入非法返回 -1 …

WINFORM - DevExpress -> DevExpress总结[安装、案例]

安装devexpress软件 路径尽量不换,后面破解不容易出问题 vs工具箱添加控件例如: ①使用控制台进入DevExpress安装目录: cd C:\Program Files (x86)\DevExpress 20.1\Components\Tools ②添加DevExpress控件: ToolboxCreator.exe/ini:toolboxcreator…

cursor+deepseek构建自己的AI编程助手

文章目录 准备工作在Cursor中添加deepseek 准备工作 下载安装Cursor (默认安装在C盘) 注册deepseek获取API key 在Cursor中添加deepseek 1、打开cursor,选择设置 选择Model,添加deepseek-chat 注意这里去掉其他的勾选项&…

《零基础Go语言算法实战》【题目 2-7】defer 关键字特性

《零基础Go语言算法实战》 【题目 2-7】defer 关键字特性 下面代码的输出是什么?请说明原因。 package main import ( "fmt" ) func main() { deferFunc() func deferFunc() { defer func() { fmt.Println("value1") }() defer func() {…

如何规模化实现完全自动驾驶?Mobileye提出解题“新”思路

在CES 2025上,Mobileye展示了端到端自动驾驶系统Mobileye Drive™,通过高度集成的传感器、算法和计算平台,可以实现自动驾驶功能的全覆盖。 Mobileye创始人兼首席执行官Amnon Shashua教授 期间,Mobileye创始人兼首席执行官Amnon …

腾讯云AI代码助手编程挑战赛-智能聊天助手

作品简介 本作品开发于腾讯云 AI 代码助手编程挑战赛,旨在体验腾讯云 AI 代码助手在项目开发中的助力。通过这一开发过程,体验到了 AI 辅助编程的高效性。 技术架构 前端: 使用 VUE3、TypeScript、TDesign 和 ElementUI 实现。 后端: 基于 Python 开发…

超大规模分类(三):KNN softmax

传统的分类损失计算输入数据和每个类别中心的距离,来优化模型的训练。KNN softmax通过选择和输入数据最相关的top-K个类别,仅计算输入数据和top-K个类别中心的距离,以减小计算量。 KNN softmax首次诞生于达摩院机器智能技术实验室发表的SIGKD…

MySQL素材怎么导入Navicat???

不管用什么方法都要先关掉MySQL服务,并且提前备份数据! 1.有sql文件时候。 打开navicat,运行sql文件 然后点击后面三个点,选中要运行的sql文件,开始。 鼠标右键刷新一下,就能看到sql文件中的表了 2.没有s…

程序员独立开发竞品分析:确定网站使用什么建站系统

要确定一个网站使用的建站系统,可以通过以下几种方法尝试分析: 查看页面源代码: 打开网站,右键点击页面并选择“查看页面源代码”。在代码中查找一些常见的建站系统标志,例如: WordPress 的迹象&#xff1a…

Linux(Centos7)安装Mysql/Redis/MinIO

安装Mysql 安装Redis 搜索Redis最先版本所在的在线安装yum库 查看以上两个组件是否是开机自启 安装MinIO 开源的对象存储服务,存储非结构化数据,兼容亚马逊S3协议。 minio --help #查询命令帮助minio --server --help #查询--server帮助minio serve…

【DB-GPT】开启数据库交互新篇章的技术探索与实践

一、引言:AI原生数据应用开发的挑战与机遇 在数字化转型的浪潮中,企业对于智能化应用的需求日益增长。然而,传统的数据应用开发方式面临着诸多挑战,如技术栈复杂、开发周期长、成本高昂、难以维护等。这些问题限制了智能化应用的…

解决aerich init -t xx 报错ModuleNotFoundError: No module named ‘tomli_w‘

今天在学习fastapi的时候,发现一款数据库迁移工具,通过这个工具可以根据模型类来对数据库做出改变。 随跟着学: 在执行 aerich init -t settings.TORTOISE_ORM的时候, 彼其娘之。。 报了一些错误: Traceback (most recent ca…

.NET Core NPOI 导出图片到Excel指定单元格并自适应宽度

NPOI:支持xlsx,.xls,版本>2.5.3 XLS:HSSFWorkbook,主要前缀HSS, XLSX:XSSFWorkbook,主要前缀XSS,using NPOI.XSSF.UserModel; 1、导出Excel添加图片效果&#xff0…

浅谈云计算07 | 云安全机制

浅谈云计算安全机制:全方位守护云端世界 一、引言二、加密技术:数据的隐形护盾三、散列机制:数据完整性的忠诚卫士四、数字签名:数据来源与真伪的鉴定专家五、公钥基础设施(PKI):信任的基石六、…

Unity 2d描边基于SpriteRender,高性能的描边解决方案

目标 以Unity默认渲染管线为例,打造不需要图片内边距,描边平滑,高性能的描边解决方案 前言 在2d游戏中经常需要给2d对象添加描边,来突出强调2d对象 当你去网上查找2d描边shader,移植到项目里面,大概率会…

Uniapp仿ChatGPT Stream流式输出(非Websocket)

Uniapp仿ChatGPT Stream流式输出(非Websocket) 前言:流式输出可以使用websocket也可以使用stream来实现EventSource是 HTML5 中的一个接口,用于接收服务器发送的事件流(Server - Sent Events,SSE&#xff…