k8s存储卷和动态创建pv

文章目录

  • 1、kubernetes中的存储卷
    • 1、为什么需要存储卷
    • 2、emptyDir(临时存储卷)
      • 1、emptydir实现
    • 3、hostPath(节点存储卷)
      • 1、hostPath字段
      • 2、hostPath实现
    • 4、nfs(网络共享)
  • 2、kubernetes中的数据卷pv和pvc
    • 1、基本介绍pv和pvc
      • 1、pv的状态
      • 2、accessModes字段
      • 3、回收策略
    • 2、创建的pvc的思路
    • 3、动态的创建PV
      • 1、自动创建的思路
      • 2、动态创建的实现
        • 1、创建一个nfs服务器和账户和绑定权限
        • 2、创建一个供应商
        • 3、创建一个存储类(storage class)
        • 4、创建一个pvc的pod
  • 3、总结

1、kubernetes中的存储卷

1、为什么需要存储卷

  • 在部署pod的时候,启动时需要配置文件

  • 还有产生的临时的数据,需要多个容器共享

  • 还有数据库的持久化数据

  • 还有一个最重要的一点就是默认情况下,容器的文件在磁盘上是临时存放的,如果这个容器需要删除的话,这些数据也就会消失,之前的配置就没有了,所以需要存储卷来存储之前的配置

2、emptyDir(临时存储卷)

  • 顾名思义,就是一个临时存储数据的,可以实现pod中的容器之间共享目录数据,但是没有持久化的数据,存储卷会随着pod的结束而结束
# 这个字段
kubectl explain pod.spec.volumes.emptyDirmedium # 指定emptydir卷的存储位置,Default和MemorysizeLimit # 用于指定存储卷的大小

1、emptydir实现

[root@master mnt]# cat n1.yaml 
apiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:run: n1name: n1
spec:nodeName: node1containers:- image: docker.io/library/nginx:latestimagePullPolicy: IfNotPresentname: n1resources: {}volumeMounts:- name: emptymountPath: /var/emptyvolumes:- name: emptyemptyDir: {}dnsPolicy: ClusterFirstrestartPolicy: Always
status: {}[root@master pods]# kubectl get pod n1 -o jsonpath='{.metadata.uid}'
1c580bb2-23ab-4116-9996-065fa87a03dd# 进入到/var/lib/kubelet/pods/这个目录,就可以看到临时存储挂载的目录了

3、hostPath(节点存储卷)

  • 就是将node节点上面的目录以文件挂载到pod容器指定目录上面去

  • 但是有一个缺点,如果这个pod调度在别的节点上面的话,那么就不能实现跨node节点的pod共享资源了,但是可以指定这个pod一直调度在这个节点上面去即可

  • 能在单独的一个节点上面持久化存储数据

1、hostPath字段

[root@master mnt]# kubectl explain pod.spec.volumes.hostPathtype # 字段的取值为DirectoryOCreate 如果给定的路径上面什么都不存在的话,那么就需要创建空目录,默认是这个# Directory 就是路径上面必须存在目录

2、hostPath实现

[root@master mnt]# cat n1.yaml 
apiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:run: n1name: n1
spec:nodeName: mastercontainers:- image: docker.io/library/nginx:latestimagePullPolicy: IfNotPresentname: n1resources: {}volumeMounts:- name: hostpathmountPath: /var/hostpathvolumes:- name: hostpathhostPath:path: /var/hostpathdnsPolicy: ClusterFirstrestartPolicy: Always
status: {}

4、nfs(网络共享)

  • 就是搭建一个NFS,然后利用共享目录提供出去,这样的话,不需要关心pod调度在哪一个节点上面去了,都可以获取到之前的配置了
[root@master mnt]# cat /etc/exports
/mnt/nfs *(rw)[root@master mnt]# cat n1.yaml 
apiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:run: n1name: n1
spec:nodeName: mastercontainers:- image: docker.io/library/nginx:latestimagePullPolicy: IfNotPresentname: n1resources: {}volumeMounts:- name: nfsmountPath: /var/nfsvolumes:- name: nfsnfs:server: 10.104.43.227  # nfs的ip地址path: /mnt/nfs   # nfs提供的挂载的目录dnsPolicy: ClusterFirstrestartPolicy: Always
status: {}

2、kubernetes中的数据卷pv和pvc

1、基本介绍pv和pvc

  • pv是一个从存储设备空间中逻辑划分创建出来的可持久化的存储对象,也就是磁盘中分出来一部分用于做成pv,就是一些硬盘等

  • 持久卷声明PVC,对pv存储资源的请求和和绑定,相当于是格式化吧,pod使用的一种存储卷的类型

1、pv的状态

生命周期描述
Available(可用)pv的创建,直接创建pv的静态方式,还没有被pvc绑定
bindingpv和pvc绑定后即可
Released(已释放)表示PVC被删除了,但是PV还没被回收
failed(失败)表示pv自动回收失败

2、accessModes字段

访问模式描述
ReadWriteOnce(rwo)读写的权限,但是只能被单个的node挂载
ReadOnMany(rox)只读的,允许被多个node挂载
ReadWriteMany(rwx)读写的权限,允许被多个node挂载

3、回收策略

  • 就是pv的一些策略

  • Retain的话就是PVC删除的时候,pv会被保留在集群中,不会被删除,也不会自动的清理里面的数据,但是pvc被删除后,pv仍然存在,需要手动删除pv或者清理里面的数据,就可以再次使用

  • Recycle 当PVC被删除时,pv中的所有文件会被清除掉,这个策略只有NFS和HostPath的PV支持,就是清理存储中的文件,然后就能使用了

  • Delete 当删除pvc的时候,pv会被自动删除,相关的数据也会被删除掉

2、创建的pvc的思路

  • 首先需要搭建一个MFS服务器,提供一个对外的共享文件夹,然后创建pv,以这个文件夹为例,这样PV就创建出来了,然后创建一个PVC,绑定即可,就能使用了PVC了
[root@master mnt]# cat pv-pvc.yaml 
apiVersion: v1
kind: PersistentVolume
metadata:name: pv1
spec:nfs:path: /mnt/nfsserver: 10.104.43.227accessModes:- ReadWriteMany capacity:storage: 2Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pvc1
spec:accessModes:  # pvc的访问模式,需要与上面保持的一致即可- ReadWriteManyresources:  # pvc需要的大小requests:storage: 2Gi[root@master mnt]# cat n1.yaml 
apiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:run: n1name: n1
spec:nodeName: mastercontainers:- image: docker.io/library/nginx:latestimagePullPolicy: IfNotPresentname: n1resources: {}volumeMounts:  - name: pvc1 mountPath: /usr/share/nginx/htmlvolumes: - name: pvc1persistentVolumeClaim: # 使用pvc挂载claimName: pvc1dnsPolicy: ClusterFirstrestartPolicy: Always
status: {}

3、动态的创建PV

  • 上面的静态有一个缺点,就是如果需要大量的pv,就需要创建很多的pv,因此的话,就会有一个动态的创建pv的出来,创建出来

1、自动创建的思路

# 因为安装这个自动创建pv的插件,也就是供应商,所以的话就需要sa和权限
  • 首先创建一个nfs服务器

  • 然后创建sa和账户

  • 然后创建供应商,绑定sa和nfs服务器,这样的话自动创建pvc,这个供应商就会自动的创建pv出来,与pvc进行绑定,然而,这个pv就是从这个nfs服务器提供的目录里面进行划分的

  • 这样的话就实现了自动创建pv的操作

2、动态创建的实现

1、创建一个nfs服务器和账户和绑定权限
# 创建一个nfs服务器
[root@master mnt]# cat /etc/exports
/mnt/nfs *(rw)# 这样的话,这个账户就创建出来了,并且赋予了权限
[root@master pvc]# cat s1.yaml 
apiVersion: v1
kind: ServiceAccount
metadata:creationTimestamp: nullname: s1
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: s1-role-binding
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
subjects:
- apiGroup: ""kind: ServiceAccountname: s1namespace: default
2、创建一个供应商
[root@master pvc]# cat nfs-provisioner.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: nfs-provisionername: nfs-provisioner
spec:replicas: 1selector:matchLabels:app: nfs-provisionerstrategy: {}template:metadata:creationTimestamp: nulllabels:app: nfs-provisionerspec:serviceAccountName: s1containers:- image: uhub.service.ucloud.cn/k8s-q7/nfs-subdir-external-provisioner:v4.0.0  # 供应商镜像name: nfs-client-provisionerimagePullPolicy: IfNotPresentvolumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesenv:- name: PROVISIONER_NAME  # 配置provisioner的name,这个名字需要与后面创建动态类一样名字value: nfs-storage- name: NFS_SERVER  # 配置绑定NFS的服务器value: 10.104.43.227- name: NFS_PATH  # NFS服务器目录value: /mnt/nfsvolumes:- name: nfs-client-rootnfs:server: 10.104.43.227path: /mnt/nfs 
3、创建一个存储类(storage class)
[root@master pvc]# cat storage.yaml 
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: storage1
provisioner: nfs-storage  # 名字与provisioner的一致[root@master pvc]# kubectl get storageclasses.storage.k8s.io 
NAME       PROVISIONER   RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
storage1   nfs-storage   Delete          Immediate           false                  9m52s
4、创建一个pvc的pod
[root@master pvc]# cat pvc1.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pvc1
spec:accessModes:- ReadWriteManyresources:requests:storage: 2GistorageClassName: storage1[root@master pvc]# kubectl get pvc
NAME   STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
pvc1   Bound    pvc-e4280b84-cc41-45b8-bf33-8773b18a3e9d   2Gi        RWX            storage1       9m8s
[root@master pvc]# kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM          STORAGECLASS   REASON   AGE
pvc-e4280b84-cc41-45b8-bf33-8773b18a3e9d   2Gi        RWX            Delete           Bound    default/pvc1   storage1                9m10s# 这个nfs目录也会创建一个目录来使用
[root@master nfs]# pwd
/mnt/nfs
[root@master nfs]# ls
default-pvc1-pvc-e4280b84-cc41-45b8-bf33-8773b18a3e9d

3、总结

  • 动态的创建pv,就是先创建一个底座,也就是提供存储的NFS,然后创建一个供应商,连接这个NFS,创建一个动态的存储类连接这个供应商,这样的话,就能创建pvc的时候,自动的创建pv了

  • 查看pod的uid

[root@master nfs]# kubectl get pod n1 -o jsonpath='{.metadata.uid}'

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

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

相关文章

【译】仅有 Text2SQL 是不够的: 用 TAG 统一人工智能和数据库

原文地址:Text2SQL is Not Enough: Unifying AI and Databases with TAG 摘要 通过数据库为自然语言问题提供服务的人工智能系统有望释放出巨大的价值。此类系统可让用户利用语言模型(LM)的强大推理和知识能力,以及数据管理系统…

【自动驾驶】单目摄像头实现自动驾驶3D目标检测

🍑个人主页:Jupiter. 🚀 所属专栏:传知代码 欢迎大家点赞收藏评论😊 目录 概述算法介绍演示效果图像推理视频推理 核心代码算法处理过程使用方式环境搭建下载权重文件pytorch 推理(自动选择CPU或GPU&#x…

什么是Modbus协议网关?

在工业自动化领域,设备间的通信与数据交换是实现高效、智能控制的关键。Modbus协议作为一种广泛应用的通信协议,自1971年由Modicon公司首次推出以来,便以其标准、开放、支持多种电气接口等特点,在工业控制系统中占据了重要地位。然…

《云原生安全攻防》-- K8s安全框架:认证、鉴权与准入控制

从本节课程开始,我们将来介绍K8s安全框架,这是保障K8s集群安全比较关键的安全机制。接下来,让我们一起来探索K8s安全框架的运行机制。 在这个课程中,我们将学习以下内容: K8s安全框架:由认证、鉴权和准入控…

如何利用Python爬虫获得1688商品详情

在这个信息爆炸的时代,数据就像是一块块美味的奶酪,而爬虫就是我们手中的瑞士军刀。今天,我要带你一起潜入1688这个巨大的奶酪洞穴,用Python爬虫捞起那些香气四溢的商品详情。别担心,我们的工具箱里有各种各样的工具&a…

CAN配置---波特率中断引脚等---autochips-AC7811-ARM-M3内核

1、配置工具 虽然不怎么好用,但比没有强多了。具体看图: 时钟选着 NVIC配置 GPIO配置 2、生成的具体配置信息 NXP的配置工具里面,具体的波特率可以直接显示,这个工具没有,怎么办? 它放到了生成的代码里面…

MySQL的并发控制与MVCC机制深度解析

目录 1. MySQL中的并发问题2. 数据库的隔离级别3. MVCC(多版本并发控制)机制3.1 MVCC的实现原理3.2 Read View详解3.3 当前读与快照读 4. MVCC在不同隔离级别下的工作方式5. MVCC解决幻读问题6. MVCC的优缺点优点:缺点: 7. MVCC在…

网络编程 02:IP 地址,IP 地址的作用、分类,通过 Java 实现 IP 地址的信息获取

一、概述 记录时间 [2024-12-18] 前置文章:网络编程 01:计算机网络概述,网络的作用,网络通信的要素,以及网络通信协议与分层模型 本文讲述网络编程相关知识——IP 地址,包括 IP 地址的作用、分类&#xff…

游戏AI实现-寻路算法(Dijkstra)

戴克斯特拉算法(英语:Dijkstras algorithm),又称迪杰斯特拉算法、Dijkstra算法,是由荷兰计算机科学家艾兹赫尔戴克斯特拉在1956年发现的算法。 算法过程: 1.首先设置开始节点的成本值为0,并将…

【第二节】Git 工作流程、概念及仓库创建

目录 一、Git 工作流程 二、Git 基本概念 2.1 工作区 2.2 暂存区 2.3 版本库 2.4 操作流程 三、Git 仓库创建 3.1 初始化仓库 3.2 克隆仓库 一、Git 工作流程 Git 的工作流程通常包括以下几个步骤: 1. **克隆 Git 资源**:将远程 Git 仓库克隆到…

概率论得学习和整理30: 用EXCEL 描述泊松分布 poisson distribution

目录 1 泊松分布的基本内容 1.1 泊松分布的关键点 1.1.1 属于离散分布 1.1.2 泊松分布的特点:每个子区间内概率相等 , λ就是平均概率 1.2 核心参数 1.3 pmf公式 1.4 期望和方差 2 例1:用EXCEL计算泊松分布的概率 3 比较λ不同值时…

【机器学习】【无监督学习——聚类】从零开始掌握聚类分析:探索数据背后的隐藏模式与应用实例

从零开始掌握聚类分析:探索数据背后的隐藏模式与应用实例 基本概念聚类分类聚类算法的评价指标(1)内部指标轮廓系数(Silhouette Coefficient)DB指数(Davies-Bouldin Index)Dunn指数 &#xff08…

灵活接入第三方接口,解析第三方json数据,返回我们想要的json格式

需求&#xff1a;我想接入任意第三方http 接口&#xff08;暂不考虑鉴权问题&#xff09;、接口返回任意json数据。 1、要求返回的json数据通过我的R< T > 返回。 2、我的R< T > 里面包含参数 data&#xff0c;code&#xff0c;msg&#xff0c;success标识。 3、…

Nginx 在不同操作系统下的安装指南

Nginx 在不同操作系统下的安装指南 一、Linux 系统下 Nginx 的安装 &#xff08;一&#xff09;基于 Ubuntu 系统 更新软件包列表 打开终端&#xff0c;首先执行sudo apt-get update命令。这一步是为了确保系统的软件包列表是最新的&#xff0c;能够获取到最新版本的 Nginx 及…

docker redis 详细教程

1. 拉取镜像 docker pull redis 2. 创建数据存储目录 cd /home/ mkdir redis cd redis mkdir data mkdir log mkdir conf 3.创建容器并且运行 docker run \ -p 6379:6379 \ --name redis \ -v /home/redis/data:/data \ -d redis 参考链接 史上最详细Docker安装Redis &am…

学技术学英文:代码中的锁:悲观锁和乐观锁

本文导读&#xff1a; 1. 举例说明加锁的场景&#xff1a; 多线程并发情况下有资源竞争的时候&#xff0c;如果不加锁&#xff0c;会出现数据错误&#xff0c;举例说明&#xff1a; 业务需求&#xff1a;账户余额>取款金额&#xff0c;才能取钱。 时间线 两人共有账户 …

云计算赋能:TSP 问题求解与创新定价机制的全景剖析

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年12月18日14点02分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文源地址&#xff1a; Aspiringco…

二、windows环境下vscode使用wsl教程

本篇文件介绍了在windows系统使用vscode如何连接使用wsl&#xff0c;方便wsl在vscode进行开发。 1、插件安装 双击桌面vscode&#xff0c;按快捷键CtrlShiftX打开插件市场&#xff0c;搜索【WSL】点击安装即可。 2、开启WSL的linux子系统 点击左下方图标【Open a Remote Win…

QScreen在Qt5.15与Qt6.8版本下的区别

简述 QScreen主要用于提供与屏幕相关的信息。它可以获取有关显示设备的分辨率、尺寸、DPI&#xff08;每英寸点数&#xff09;等信息。本文主要是介绍Qt5.15与Qt6环境下&#xff0c;QScreen的差异&#xff0c;以及如何判断高DPI设备。 属性说明 logicalDotsPerInch&#xff1…

【已解决】在Visual Studio里将应用与Microsoft Store关联时提示网络异常

发布Windows应用时。在Visual Studio里点击"发布“&#xff0c;将应用与Microsoft Store关联时&#xff0c;一直提示网络错误。 查了一下论坛&#xff0c;发现之前也经常出现&#xff0c;但我是第一次遇到。 不能就这样一直被卡着呀&#xff0c;研究了一下&#xff0c;还…