k8s-----存储卷(数据卷)

容器内的目录和宿主机的目录进行挂载。
容器的生命状态是短站的,delete删除,k8s用控制创建的pod,delete相当于重启,容器的状态也会回复到初始状态。
一旦回到初始状态,所有的后天编辑的文件都会消失。
容器和节点之间创建一个可以持久化保存容器内文件的存储卷。即使容器被销毁,删除,重启,节点上的存储卷的数据依然存在,后续也可以进行继续使用。可以继续将容器内目录和宿主机挂载,保存的数据继续使用。

存储卷的方式

  1. emptyDir  容器内

  2. hostPath  本地本地

  3. NFS         远程

emptyDir

容器内部共享储存卷,k8s系统中,是一个pod当中的多个容器共享一个存储卷目录。
emptvDir卷可以是pod当中容器在这个存储卷上读取和写入
emptyDir是不能挂载到节点的。随着pod的生命周期结束,emptvDir也会结束,数据也不会保留
容器内部共享。

实验

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx2name: nginx
spec:replicas: 3selector:matchLabels:app: nginx2template:metadata:labels:app: nginx2spec:containers:- image: nginx:1.22name: nginxvolumeMounts:- name: htmlmountPath: /usr/share/nginx/html
#第一个个name,存储的名称,可以自定义,mountPath,定义容器内的挂载目录点,和节点或者- image: nginx:1.22name: nginx2volumeMounts:- name: htmlmountPath: /data
#引用上一个挂载的名称,表示我将和/usr/share/nginx/html/这个目录挂载,由data目录和它挂载command: ["/bin/bash","-c","while true; do echo  $(date) >> /data/index.html; sleep 2; done"]volumes:- name: htmlemptyDir: {}

进入指定容器内查看挂载的文件

kubectl exec -it nginx2-96b45c96c-jvvg9 -c nginx2 bash

hostPath

 将容器内的挂载点,和节点上的目录进行挂载,hostPath可以实现数据的持久。node节点被销毁,数据也会丢失。

实验

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx2name: nginx
spec:replicas: 3selector:matchLabels:app: nginx2template:metadata:labels:app: nginx2spec:containers:- image: nginx:1.22name: nginxvolumeMounts:- name: htmlmountPath: /usr/share/nginx/html
#第一个个name,存储的名称,可以自定义,mountPath,定义容器内的挂载目录点,和节点或者- image: nginx:1.22name: nginx2volumeMounts:- name: htmlmountPath: /data
#引用上一个挂载的名称,表示我将和/usr/share/nginx/html/这个目录挂载,由data目录和它挂载command: ["/bin/bash","-c","while true; do echo  $(date) >> /data/index.html; sleep 2; done"]volumes:- name: htmlhostPath:path: /opt/testtype: DirectoryOrCreate

NFS

所有pod内的目录都和节点上的nfs共享目录形成数据卷。所有的数据文件都保存在共享目录当中。集中方便管理。

nfs共享的工作流程图:

实验

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx2name: nginx
spec:replicas: 3selector:matchLabels:app: nginx2template:metadata:labels:app: nginx2spec:containers:- image: nginx:1.22name: nginxvolumeMounts:- name: htmlmountPath: /usr/share/nginx/html
#第一个个name,存储的名称,可以自定义,mountPath,定义容器内的挂载目录点,和节点或者- image: nginx:1.22name: nginx2volumeMounts:- name: htmlmountPath: /data
#引用上一个挂载的名称,表示我将和/usr/share/nginx/html/这个目录挂载,由data目录和它挂载command: ["/bin/bash","-c","while true; do echo  $(date) >> /data/index.html; sleep 2; done"]volumes:- name: htmlnfs:path: /data/volumesserver: 192.168.10.40
#这里的server可以是IP地址和主机名(需要做映射)

PVC和pv静态

pv:全称:persistent Volume 持久化存储卷,描述和定义一个存储卷,pv是由运维人员来定的。
pvc:全称:persist Volume Claim 持久化储存的请求。pvc实际上用来描述或者声明我希望使用声明什么样的pv来进行储存
pvc-pv是一一对应的关系(描述,储存(大小))
pvc-pv都是虚拟化的概念,是k8s的抽象的虚拟的储存资源。
pvc---pv-----nfs

pv是集群当中的储存资源,pvc来请求存储资源,也是对储存资源的一个检索(检查索引),选择一个最合适的pv来存储资源。

pvc--pv是由生命周期管理的:

Provisioning(配置)--------pvc请求request----------检索(找一个合适的pv)-----------------pvc和pv(binding绑定)-----------使用-----------pod被删除-------------pv的releasing(释放)------------recycling(回收)

配置:静态,动态
绑定:就是把pv分配给pvc
使用:就是pod通过pvc使用储存资源
释放:pod解除volume的关系,删除pvc
回收:保留pv,让下一个pvc使用。

pv的四种状态:

状态文字描述表示
Avialable可以没有任何pvc绑定
Bound绑定pv已经绑定了pvc,绑定即使用
released释放pvc已经被删除了,但是pv的存储资源还没有被集群回收
Failed资源回收失败pv为不可用状态

pv的三种类型

类型缩写说明
ReadWriteOnceRWO储存pv可读可写,但只能被单个pod挂载。
ReadOnlyManyROX储存的pv可以以只读的方式被多个pod挂载
ReadWriteManyRWX储存可以支持读写的方式被多个pod共享

        hostPath 支持ReadWriteOnce的方式
        nfs可支持以上三种方式

        有ISCSI不支持ReadOnlyMany方式

iscsiadm -m session -P 3iscsiadm 查看服务器是否有iscsi设备
-m session 指定操作的会话模块,管理iscsi的会话
-P 3 显示详细信息的级别。级别是3 共0-3

集群回收pv资源的方式:

类型文字描述说明
Retain(默认)保留pod和挂载点的数据不会被删除
Recysle回收pv上的数据被删除,挂载点的数据也被删除
Delete淡出

解绑时,自动删除PV上的数据。(本地硬盘不能使用,AWS,EBS GCE) 支持动态卷的可以使用,pv不再可用 (云平台自己处理)。

补充:当pod运行之后通过pvc请求到了pv,除非pod被销毁,否则无法删除pvc

实验

master01 192.168.10.10

node01     192.168.10.20

node02     192.168.10.30

nfs4           192.168.10.40

nfs4 ---192.168.10.40

mkdir v{1,2,3,4,5}
vim /etc/exports
/data/v1 20.0.0.0/24(rw,no_root_squash)
/data/v2 20.0.0.0/24(rw,no_root_squash)
/data/v3 20.0.0.0/24(rw,no_root_squash)
/data/v4 20.0.0.0/24(rw,no_root_squash)
/data/v5 20.0.0.0/24(rw,no_root_squash)
exportfs -arv
#发布出去
showmount -e 192.168.10.40
#在每个节点上查看

master01主节点上创建PV.yaml文件

vim pv.yaml
apiVersion: v1
kind: PersistentVolume
#PersistentVolume就是PV但是yaml文件中要用全称
metadata:name: pv001labels:name: pv001
spec:
#设定pv的参数nfs:path: /data/v1
#定义pv的挂载位置server: 192.168.10.40
#声明pv来自哪个IP地址accessModes: ["ReadWriteMany", "ReadWriteOnce"]
#ReadWriteMany表示支持多个pod挂载
#ReadWriteOnly表示只支持单个pod挂载
#支持多种挂载方式capacity:storage: 1Gi
#定义pv的大小---apiVersion: v1
kind: PersistentVolume
metadata:name: pv002labels:name: pv002
spec:nfs:path: /data/v2server: 192.168.10.40accessModes: ["ReadWriteOnce","ReadOnlyMany"]capacity:storage: 2Gi---apiVersion: v1
kind: PersistentVolume
metadata:name: pv003labels:name: pv003
spec:nfs:path: /data/v3server: 192.168.10.40accessModes: ["ReadWriteOnce","ReadWriteMany","ReadOnlyMany"]capacity:storage: 2Gi---apiVersion: v1
kind: PersistentVolume
metadata:name: pv004labels:name: pv004
spec:nfs:path: /data/v4server: 192.168.10.40accessModes: ["ReadWriteMany","ReadOnlyMany"]persistentVolumeReclaimPolicy: Recyclecapacity:storage: 3Gi---apiVersion: v1
kind: PersistentVolume
metadata:name: pv005labels:name: pv005
spec:nfs:path: /data/v5server: 192.168.10.40accessModes: ["ReadOnlyMany"]capacity:storage: 5Gi

执行

kubectl apply -f pv.yaml
#创建PV
kubectl get pv
#查看PV状态

master01定义一个请求向PV发起请求

vim pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mypvc
spec:accessModes: ["ReadWriteMany"]
#pvc期望请求的pv的读写挂载类型是什么resources:requests:storage: 2Gi
#pvc期望请求pv的储存大小是2G
#期望的pv类型:ReadWriteMany 大小2G---apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx2name: nginx2
spec:replicas: 3selector:matchLabels:app: nginx2template:metadata:labels:app: nginx2spec:containers:- image: nginx:1.22name: nginxvolumeMounts:- name: htmlmountPath: /usr/share/nginx/htmlvolumes:- name: htmlpersistentVolumeClaim:claimName: mypvc
#定义pvc的名称.由mypc获取PV

执行

 
kubectl get pv
#查看PV状态
表示请求成功到k8s
kubectl get pv
cd v3
echo 123 > index.html回到master01主机
kubectl get pod -o wide
curl nginx副本IP测试
彻底的删除
删除pod
kubectl delete deployments.apps nginx2
kubectl delete deployments.apps nginx1删除(pod存在,无发删除)
kubectl delete pvc mypvc去k8s4查看共享文件是否存在
在Retain下,让pvc的状态由released手动转为Available(可用)
kubectl edit pv pv004

修改策略Recycle,让pv的状态released自动转变为Available(可用)

vim pv.yaml

persistentVolumeReclaimPolicy: Recycle

PVC发起请求选择使用哪个PV的存储

PV通过挂载的方式和物理存储做映射

最终由物理设备提供存储卷

若是Recycle回收策略


总结:

存储卷的三种模式:

  1. emptvDir: 容器内存储卷,随着pod被销毁,也会被销毁,数据不保留
  2. hostPath: 节点目录的存储卷,可以实现持久化存储。数据在每个节点上都有
  3. nfs:共享目录储存卷,可以实现持久化,数据集中在一个目录,方便管理

pv和pvc

  1. pvc请求-------------》pv的存储资源--------》nfs硬盘空间
  2. nfs支持pvc的所有挂载方式和读写模式
  3. hostPath仅支持ReadWriteOnce 方式
  4. pvc是以检索的方式找到匹配的pv资源

检索:挂载方式和读写模式  和  pv提供检索资源的大小
谁适合就用谁

资源回收方式:

  1. 保留:默认方式
  2. 回收:自动回收,节点上的数据将会被删除
  3. 删除: pv会变成failed模式,不可用,数据也会被删除。

PVC和PV之间静态请求。一旦成百个PVC负载能力将会下降,这就需要使用动态PVC

静态比较麻烦,自动的匹配pv资源

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

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

相关文章

飞致云1panel v1.9.2 + 雷池WAF社区版 v4.0

可能有许多人都有这个需求:为自己的个人站点套上WAF,增加安全性,本文将介绍如何将1panel面板深度结合长亭雷池防火墙,实现为个人站点套上WAF并且自动续签ssl证书。 由于1panel和雷池WAF功能更新较快,上一篇文章已经不…

Kubernets(K8S)启动和运行01 快速入门

简介 Kubernetes is an open source orchestrator for deploying containerized applications. It was originally developed by Google, inspired by a decade of experience deploying scalable, reliable systems in containers via application-oriented APIs. Kubernete…

软考学习笔记--操作系统概述

操作系统是计算机系统中最重要,最基本的系统软件,它位于硬件和用户之间,一方面可以向用户提供接口,方便用户使用计算机;另一方面能管理计算机软硬件资源,以便充分利用他们。从资源管理的角度来看&#xff0…

Open CASCADE学习|模块组成

OpenCASCADE由七个模块组成,分别如下: Foundation Classes基础类 Modeling Data 建模数据 Modeling Algorithms 建模算法 Visualization 可视化 Data Exchange 数据交换 Application Framework 程序框架 Kernel Classes 核心类 2D Geometry 二维几…

nginx(1.13.7)首次安装出现:【make: *** 没有规则可以创建“default”需要的目标“build” 问题】解决措施

目录 前言: 一.龙蜥(Anolis)操作系统上安装GCC 1.安装gcc 2.检验安装 二.安装出现 make: *** 没有规则可以创建“default”需要的目标“build” 问题 1.解压安装nginx 2.安装出现问题展示 3.解决措施 4.重新编译进行安装 5…

yolov5-6.0 tensorrt推理

CMakeLists.txt cmake_minimum_required(VERSION 3.0) # CMake最低版本要求,低于2.6的构建过程会被终止set(CMAKE_CXX_STANDARD 14) #opencv4以上加此句 set(CMAKE_CXX_STANDARD 14) project(cmake_test) # 定义工程名称 find_package(OpenCV REQUIRED) …

【Sublime Text】| 01——下载安装注册

系列文章目录 【Sublime Text】| 01——下载软件安装并注册 【Sublime Text】| 02——常用插件安装及配置 失败了也挺可爱,成功了就超帅。 文章目录 前言1. 下载2. 安装3. 注册3.1 通过修改应用程序注册3.2 通过替换应用程序注册 感谢 前言 轻量代码编辑器有很多 之…

国家发改委:《电能质量管理办法(暂行)》2024年4月1日起施行

中华人民共和国国家发展和改革委员会令 第8号 《电能质量管理办法(暂行)》已经2023年12月26日第7次委务会议审议通过,现予公布,自2024 年4月1日起施行。 主任 郑栅洁 2023年12月27日 电能质量管理办法(暂行) 第一章 总则 第一条 为加强电能质量管理&…

中小型企业如何在当今的商业环境中占得一席之地?

在电商新零售的浪潮下,一种全新的消费模式正在崭露头角——消费增值模式。这种模式不仅改变了消费者的购物体验,更在电商领域掀起了一场革命。本文将通过具体数据,为您揭示消费增值模式的魅力。 一、消费增值模式的奥秘 消费增值模式的核心在…

【DevOps-08-2】Harbor的基本操作

一、简要描述 Harbor作为镜像仓库,主要的交互方式就是将镜像上传到Harbor上,以及从Harbor上下载指定镜像 在传输镜像前,可以先使用Harbor提供的权限管理,将项目设置为私有项目,并对不同用户设置不同角色,从而更方便管理镜像。 二、Harbor添加用户和项目 1、添加Harbor用…

一篇文告诉你:到底该如何搭建好企业知识库

全球化的竞争环境和瞬息万变的市场使得企业需要一种管理和整合各种信息与知识的方式。这就是企业知识库,一种核心资源,能够帮助企业提升工作效能,并更好地支持决策、创新和学习。但是,如何优化知识库,让它成为企业的有…

迁移学习的最新进展和挑战

随着深度学习和人工智能技术的飞速发展,迁移学习作为一种有效的机器学习方法,已经在各个领域取得了显著的成果。迁移学习是指将一个领域(源领域)的知识应用到另一个领域(目标领域),以提高目标领…

spark基础--学习笔记

1 spark 介绍 1.1 spark概念 Apache Spark是专为大规模数据处理而设计的快速通用的分布式计算引擎,是开源的类Hadoop MapReduce的通用分布式计算框架。和MapReduce一样,都是完成大规模数据的计算处理。 简而言之,Spark 借鉴了 MapReduce思…

在1G的内存中,对百亿个QQ号去重?

文章目录 一、公共方法1、生成模拟QQ号2、读取数据文件3、测试方法 二、HashSet三、Java8的Stream四、Segment五、BloomFilter六、BitMap七、总结 假设QQ号是int类型,那么最多可以有4294967295个,就是43亿左右,QQ号无论多少位,每个…

【链表】力扣206反转链表

题目 力扣206反转链表 思路图解 代码实现 双指针代码实现 public static ListNode reverseList(ListNode head) {// 初始化pre,curListNode pre null;ListNode cur head;// 当cur为null时,说明反转结束while(cur ! null) {// 临时保存cur.next节点…

Python写冒泡

当你要用Python写冒泡排序算法时,你可以使用下面的代码: def bubble_sort(arr):n len(arr)for i in range(n-1):for j in range(n-i-1):if arr[j] > arr[j1]:arr[j], arr[j1] arr[j1], arr[j]return arr这个函数接受一个数组作为输入,并…

linux开发板静态IP无法ping通外网

硬件平台:韦东山的6ull开发板 问题: 使用网线直连路由器,动态获取IP时能ping通外网; 改为静态IP时,能ping通局域网,但无法ping通外网。 改为静态IP:修改/etc/network/interfaces 测试&#…

CentOS本地部署SQL Server数据库无公网ip环境实现远程访问

文章目录 前言1.安装GeoServer2. windows 安装 cpolar3. 创建公网访问地址4. 公网访问Geo Servcer服务5. 固定公网HTTP地址 前言 GeoServer是OGC Web服务器规范的J2EE实现,利用GeoServer可以方便地发布地图数据,允许用户对要素数据进行更新、删除、插入…

Linux系统——测试端口连通性方法

目录 一、TCP端口连通性测试 1、ssh 2、telnet(可能需要安装) 3、curl 4、tcping(需要安装) 5、nc(需要安装) 6、nmap(需要安装) 二、UDP端口连通性测试 1、nc(…

adb forward使用

adb forward是Android Debug Bridge(ADB)的一个命令,它可以将设备端口和主机端口之间建立一个转发通道,从而使主机可以通过该通道访问设备端口提供的服务。使用adb forward可以方便地进行端口转发,例如在电脑上运行的应…