K8S 存储卷

这篇具有很好参考价值的文章主要介绍了K8S 存储卷。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

意义:存储卷----数据卷

容器内的目录和宿主机的目录进行挂载

容器在系统上的生命周期是短暂的,delete,k8s用控制器创建的pod,delete相当于重启,容器的状态也会回复到初始状态

一旦回到初始状态,所有的后天编辑的文件都会消失。

容器和节点之间创建一个可以持久化保存容器内文件的存储卷,即使容器被销毁,删除,重启,节点上存储卷的数据依然存在,后续也可以继续使用,继续将容器内的目录和宿主机挂载,保存的数据继续使用

1、emptyDir

容器内部共享存储卷,k8s系统中,是一个pod当中的多个容器共享一个存储卷目录

emptyDir卷可以使pod当中的容器在这个存储卷上读取和写入

emptyDir是不能挂载到节点的。随着pod生命周期结束,emptyDir也会结束,数据也不会保留

容器内部共享。LNMP

2、hostPath

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

污点设置为:

NoExecute:节点上的pod会被驱逐,文件数据在不在?

pod被驱逐,并不是node节点被销毁。所有数据还保留在节点上

pod被驱逐 (基于控制器创建的)会在其他重新部署,又会在其他节点生成一个新的存储卷。数据依然可以持久化

emptyDir的共享数据,会丢失

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

3、NFS共享存储
K8S 存储卷,kubernetes,java,docker
所有的pod内的目录都和节点上的nfs共享目录形成数据,所有的数据文件都保存在共享目录当中,集中,方便管理

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.22
        name: nginx1
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html
#第一个name,存储的名称,可以自定义,mountpath,定义容器内的挂载目录点,和节点或者##其他容器的
共享目录
      - image: nginx:1.22
        name: nginx2
        volumeMounts:
        - name: html
          mountPath: /data
#引用上一个挂载的名称,表示我将和、usr/share/nginx/html这个目录挂载,由data目录和他挂载   
        command: ["/bin/bash","-c", "while true; do echo $(date) >> /data/index.html; sleep 2; done"]
      volumes:
      - name: html
        nfs:
          path: /data/volumes
          server: harbor
#server可以是共享节点的ip地址,也可以是主机名,主机名要做映射 
pvc和pv

pv:全称Persistent Volume 持久化存储卷,描述和定义一个存储卷,pv是由我们运维人员来定的

pvc:全称Persistent Volume Claim 持久化存储的请求,pvc实际上是用来描述或者声明我希望使用什么样的pv来进行存储

pvc-pv是一一对应的关系(描述,存储(大小))

pvc---->pv----->NFS

pvc和pv都是虚拟化的概念,是k8s的抽象的虚拟的存储资源
K8S 存储卷,kubernetes,java,docker
pv是集群当中的存储资源,pvc请求存储资源,也是对存储资源的一个检索 (检查索引),选择一个最合适的pv来存储资源

pv和pvc之间是有生命周期管理:

1、Provisioning(配置)-----pvc请求request-----检索(找一个合适的pv)----pvc和pv(binding 绑定)-------使用-----

pod被删除-------pv的releasing(释放)------资源回收recyling

配置:静态,动态

绑定:就是把pv分配给pvc

使用:就是pod通过pvc使用存储资源—NFS

释放:pod解除和挂载卷的关系,删除pvc

回收:保留pv,以供下一次pvc使用

pv的状态

Avaliable:可用,而且没有被任何pvc绑定

Bound:绑定,pv已经绑定了pvc,绑定即使用

released:释放,pvc已经被删除了,但是pv的存储资源还没有被集群回收

Failed:表示pv资源回收失败,而且pv为不可用状态。

ReadWriteOnce RWO,配置文件里是全称,存储pv可读可写,但是只能被单个pod挂载

ReadOnlyMany:ROX 存储pv可以以只读的方式被多个pod挂载

ReadWriteMany:RWX 存储可以支持读写的方式被多个pod共享

NFS:可以支持以上三种读写和挂载方式

SCSI

[root@master01 opt]# lsscsi
[0:0:0:0]    disk    VMware,  VMware Virtual S 1.0   /dev/sda 
[2:0:0:0]    cd/dvd  NECVMWar VMware IDE CDR10 1.00  /dev/sr0 

ISCSI 不支持ReadWriteMany(RWX )

[root@master01 opt]# iscsiadm -m session -P 3
iscsiadm: No active sessions.
查询服务器是否有ISCSI设备    -m  seesion  管理iscsi的会话  -P 3 显示详细信息的级别 

hostpath:只支持RWO ,其他两个不支持

回收策略

集群回收pv资源的方式

Retain保留,pod和挂载点的数据不会被删除

Recycle:回收,pv上的数据会被删除,挂载点的数据也被删除

Delete: 删除,解绑时会自动删除pv上的数据 (本地硬盘无法使用)支持动态卷的可以使用,pv也不再可用(云平台自己处理)

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

pvc----请求用哪个pv的存储----pv和物理存储做映射 (挂载)----物理设备提供存储卷

pvc yaml文件

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv001
  labels:
    name: pv001
spec:
  nfs:
    path: /data/v1
    server: 192.168.211.40
  accessModes:
    - ReadWriteMany
    - ReadWriteOnce
  capacity:
    storage: 1Gi

更改回收策略

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv004
  labels:
    name: pv004
spec:
  nfs:
    path: /data/v4
    server: 192.168.211.40
  accessModes:
    - ReadWriteMany
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle   添加这一行  
  capacity:
    storage: 4Gi

[root@master01 opt]# kubectl apply -f pv.yaml 
persistentvolume/pv001 unchanged
persistentvolume/pv002 unchanged
persistentvolume/pv003 configured  *
persistentvolume/pv004 configured  *  显示这个就是更改策略成功 
persistentvolume/pv005 unchanged

k8s当中存储卷的模式:

emptyDir:容器内的存储卷,随着pod被销毁,也会被销毁,数据不保留

hostPath:节点目录的存储卷,可以实现持久化存储,数据在每个节点上都有,不方便集中管理

nfs:共享目录存储卷,既可以实现持久化,也可以数据集中在一个目录,方便管理

pv和pvc:

pvc请求----pv的存储资源----硬盘空间(NFS)

NFS支持pvc的所有类型挂载权限和读写方式

hostpath:仅支持ReadWriteOnce 方式

pvc是以检索的方式找到匹配的pv资源

检索挂载方式和读写模式

检索pv能提供的存储资源的大小

谁合适选谁

保留:默认可以不写

回收:自动回收,节点上的数据也会被删除

删除:pv会变成failed模式,不可用,数据也会被删除

静态比较麻烦,但是如何自动匹配pv资源? 下回分解 文章来源地址https://www.toymoban.com/news/detail-781347.html

到了这里,关于K8S 存储卷的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kubernetes基础(二十三)-k8s持久化存储详解

    1.1 介绍 在容器中的磁盘文件是短暂的,当容器崩溃时,Kubelet会重新启动容器,但容器运行时产生的数据文件都将会丢失,之后容器会以最干净的状态启动。另外,当一个Pod运行多个容器时,各个容器可能需要共享一些文件,诸如此类的需求都可以使用Volume解决。Pod只需要通

    2024年03月17日
    浏览(51)
  • Kubernetes基础(二十)-k8s存储对象Storage Classes

    在Kubernetes中,Storage Classes是用于定义不同存储配置的资源。它们允许开发者抽象存储的物理细节,使其更易于管理和使用。通过Storage Classes,可以定义存储的类型、性能、卷大小等参数,使得应用程序能够根据需求选择合适的存储。 Storage Classes工作的基本原理是通过定义标

    2024年02月19日
    浏览(43)
  • Kubernetes基础(十八)-k8s存储对象Persistent Volume

    在容器化应用中,Pod的生命周期是短暂的,当Pod终止时,其中的数据通常也会被销毁。为了解决这个问题,Kubernetes引入了Persistent Volume(PV)的概念。PV是集群中的一块持久化存储,它独立于Pod存在,可以被多个Pod共享,并且在Pod终止后仍然保留数据。 PV允许开发者将数据存储

    2024年02月20日
    浏览(40)
  • Kubernetes基础(十九)-k8s存储对象Persistent Volume Claim

    在容器编排中,Pod的生命周期是短暂的,当Pod终止时,其中的数据通常也会被销毁。为了解决这个问题,Kubernetes引入了Persistent Volume(PV)和Persistent Volume Claim(PVC)的概念。 PVC是对PV的一种声明,它定义了Pod对存储资源的需求。Pod通过PVC来请求PV,而PV则提供了实际的存储资

    2024年02月20日
    浏览(38)
  • 【K8S】docker和K8S(kubernetes)理解?docker是什么?K8S架构、Master节点 Node节点 K8S架构图

    一、docker的问世         在LXC(Linux container)Linux容器虚拟技术出现之前,业界网红是虚拟机。虚拟机技术的代表,是VMWare和OpenStack。 虚拟机是什么?         虚拟机其实就是 在你的操作系统里面,装一个软件,然后通过这个软件,再模拟一台甚至多台“子电脑”出来。

    2024年03月26日
    浏览(71)
  • Kubernetes(K8S)使用PV和PVC做存储安装mysql

    首先你需要一个k8s环境,可以参考我写的文章:https://blog.csdn.net/m0_51510236/article/details/130842122 我们可以简单看一下官网的描述:https://kubernetes.io/zh-cn/docs/concepts/storage/persistent-volumes/#introduction 持久卷(PersistentVolume,PV) 是集群中的一块存储,可以由管理员事先制备, 或者使用

    2024年02月03日
    浏览(47)
  • Kubernetes(k8s)安装NFS动态供给存储类并安装KubeSphere

    它是一款全栈的 Kubernetes 容器云 PaaS 解决方案(来源于官网),而我觉得它是一款强大的Kubernetes图形界面,它继承了如下组件 (下面这段内容来自官网): Kubernetes DevOps 系统 基于 Jenkins 为引擎打造的 CI/CD,内置 Source-to-Image 和 Binary-to-Image 自动化打包部署工具 基于 Istio 的微

    2024年02月09日
    浏览(41)
  • 【云原生-Kubernetes篇】K8s的存储卷/数据卷+PV与PVC

    容器部署过程中一般有以下三种数据: • 启动时需要的 初始数据 :例如配置文件 (init container) • 启动过程中产生的 临时数据 :该临时数据需要多个容器间共享 • 启动过程中产生的 持久化数据 :例如MySQL的data目录 (业务数据–很重要) 而容器中的文件在磁盘上是 临时

    2024年02月05日
    浏览(42)
  • 容器技术,1. Docker,2. Kubernetes(K8s):

    目录 容器技术 1. Docker: 2. Kubernetes(K8s): Docker和Kubernetes 容器的主要应用场景有哪些? 有效的将单个操作系统的资源划分到孤立的组中,以便更好的在孤立的组之间平衡有冲突的资源使用需求,这种技术就是容器技术。 容器技术指通过在物理主机操作系统上创建一个一个

    2024年02月11日
    浏览(71)
  • 基于Docker的K8s(Kubernetes)集群部署

    开始搭建k8s集群 三台服务器修改主机名称 关闭对话窗口,重新连接 三台主机名称呢就修改成功了。 接下来修改每台节点的 hosts 文件 所有节点关闭 setLinux 查看是否关闭成功 为每个节点添加 k8s 数据源 如果安装docker数据源找不到yum-config 所有节点安装kubelet kubelet安装中… k

    2024年02月08日
    浏览(100)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包