k8s-数据卷

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

存储卷----数据卷

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

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

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

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

  1. emptyDir 

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

EmptyDir卷可以是pod当中容器在这个存储卷上读取和写入

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

只能用于内部共享

演示:

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

进入容器:

k8s-数据卷,kubernetes,docker,容器

  1. hostPath:

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

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

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

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

EmptyDir被驱逐,数据会丢失

演示

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

查看不同pod输出的日志

k8s-数据卷,kubernetes,docker,容器

第三种

NFS共享存储方式:

所有的pod内部的目录都和节点上的NFS共享形成数据同步,所有文件都将保存在一个目录当中,便于管理

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

验证

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

用主机名做

k8s-数据卷,kubernetes,docker,容器

找不到,挂载卷因为没有映射

k8s-数据卷,kubernetes,docker,容器

每个主机都做映射

k8s-数据卷,kubernetes,docker,容器

HostPath和NFS是我们常用的方式,推荐使用NFS

PVC和PV(必问)

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

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

PVC---->pv------NFS 意思就是说,PVC请求PV

PVC是发起一个请求,PVC是提供一个虚拟化的存储卷

PVC和PV都是虚拟的概念,是k8s的抽象的虚拟化的存储资源

结构图:

k8s-数据卷,kubernetes,docker,容器

PVC和PV之间的静态请求,一旦百个PVC怎么办,所有引申出了动态请求

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

PV和PVC之间是有生命周期管理:

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

配置:静态,动态

绑定:就是把PV分配给PVC

使用:就是pod通过PVC使用存储资源---NFS

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

回收:保留PV,让下一个PVC使用

PV的状态:

Available:可用,而且没有被任何PVC绑定

Bound:绑定,PV已经绑定了PVC,绑定即使用

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

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

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

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

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

EmptyDir:不考虑

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

ISCSI:不支持ReadWriteMany

hostPath:只支持ReadWriteOnce方式

k8s-数据卷,kubernetes,docker,容器

iscsiadm -m session -P 3查看服务器是否有iscsi设备

-m session:指定操作的会话模块,管理iscsi会话

-P 3:显示详细信息的级别,级别就是3,显示详细信息

k8s-数据卷,kubernetes,docker,容器

集群回收PV资源的方式:

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

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

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

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

演示PVC静态和资源回收方式:

k8s-数据卷,kubernetes,docker,容器

映射(全部)

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

发布

k8s-数据卷,kubernetes,docker,容器

每个节点查看:

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

vim pv.yml

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

apiVersion: v1

kind: PersistentVolume

metadata:

  name: pv001

  labels:

    name: pv001

spec:

  nfs:

    path: /data/v1

    server: 20.0.0.74

  accessModes: ["ReadWriteMany","ReadWriteOnce"]

  capacity:

    storage: 1Gi

---

apiVersion: v1

kind: PersistentVolume

metadata:

  name: pv002

  labels:

    name: pv002

spec:

  nfs:

    path: /data/v2

    server: 20.0.0.74

  accessModes: ["ReadWriteOnce"]

  capacity:

    storage: 2Gi

---

apiVersion: v1

kind: PersistentVolume

metadata:

  name: pv003

  labels:

    name: pv003

spec:

  nfs:

    path: /data/v3

    server: 20.0.0.74

  accessModes: ["ReadWriteMany","ReadWriteOnce"]

  capacity:

    storage: 2Gi

---

apiVersion: v1

kind: PersistentVolume

metadata:

  name: pv004

  labels:

    name: pv004

spec:

  nfs:

    path: /data/v4

    server: 20.0.0.74

  accessModes: ["ReadWriteMany","ReadWriteOnce"]

  capacity:

    storage: 4Gi

---

apiVersion: v1

kind: PersistentVolume

metadata:

  name: pv005

  labels:

    name: pv005

spec:

  nfs:

   path: /data/v5

   server: 20.0.0.74

  accessModes: ["ReadWriteMany","ReadWriteOnce"]

  capacity:

    storage: 5Gi

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

定义一个PVC请求:

vim pvc.yml

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

  name: mypvc

spec:

  accessModes: ["ReadWriteMany"]

#pvc期望请求的PV的读写挂载类型是什么

  resources:

    requests:

      storage: 2Gi

#PVC期望请求PV的存储大小是2G。上面合起来的意思:期望读写模式:ReadWriteMany 并且大小是2G

---

apiVersion: apps/v1

kind: Deployment

metadata:

  labels:

    app: nginx

  name: nginx

spec:

  replicas: 3

  selector:

    matchLabels:

      app: nginx

  template:

    metadata:

      labels:

        app: nginx

    spec:

      containers:

      - image: nginx:1.22

        name: nginx

        volumeMounts:

        - name: html

          mountPath: /usr/share/nginx/html

      volumes:

      - name: html

        persistentVolumeClaim:

          claimName: mypvc

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

选择了PV003

k8s-数据卷,kubernetes,docker,容器

测试:

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

怎么删除PVC

k8s-数据卷,kubernetes,docker,容器

删不掉,因为pod还在

怎么删呢,删除pod

k8s-数据卷,kubernetes,docker,容器

处在回收状态

k8s-数据卷,kubernetes,docker,容器

怎么让其回到可用状态

k8s-数据卷,kubernetes,docker,容器

kubectl edit pv pv003

k8s-数据卷,kubernetes,docker,容器

回到了available状态

k8s-数据卷,kubernetes,docker,容器

配置回收策略

persistentVolumeReclaimPolicy: Recycle

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

稍微等等

k8s-数据卷,kubernetes,docker,容器

也就是挂载内容被回收,也就是被删除了

k8s-数据卷,kubernetes,docker,容器

persistentVolumeReclaimPolicy: Delete

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

先删pod,再删PVC,删除之后数据卷还在

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

动态卷是要删除的,这里还在,只是演示一下

怎么恢复:

k8s-数据卷,kubernetes,docker,容器

k8s-数据卷,kubernetes,docker,容器

总结:

k8s当中存储卷的模式:

EmptyDir:用于容器内共享,随着pod被销毁,也会被销毁,数据不保留

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

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

PV和PVC

PVC是一种请求----PV存储资源----------硬盘空间(NFS)

NFS支持PVC的所有挂载方式和读写模式

hostPath仅支持readwriteOnce方式

PVC是以检索的方式找到匹配的PV资源

检索挂载方式和读写模式:

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

谁合适选谁

保留:默认可以不写

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

删除:PV会变成failed模式,不可用,数据也会被删除文章来源地址https://www.toymoban.com/news/detail-818046.html

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

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

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

相关文章

  • Kubernetes(K8s):容器化应用的航空母舰

    Kubernetes(K8s)是一个开源的容器编排系统,它的出现就像是为容器化应用提供了一艘强大的航空母舰。在这艘母舰上,你的应用容器就像是一架架战斗机,Kubernetes负责指挥它们起飞、飞行、降落,确保它们能在正确的时间、正确的地点执行任务。 Pod: Kubernetes的基本飞行编队

    2024年04月08日
    浏览(67)
  • Kubernetes(k8s)容器编排Pod介绍和使用

    Pod是kubernetes中你可以创建和部署的最小也是最简的单位,一个Pod代表着集群中运行的一个进程。 Pod有两个必须知道的特点 通过yaml文件或者json描述Pod和其内容器的运行环境和期望状态,例如一个最简单的运行nginx应用的pod,定义如下 3.1.1 参数描述 下面简要分析一下上面的

    2024年02月08日
    浏览(85)
  • kubernetes(k8s)为容器和 Pod 分配内存资源

    展示如何将内存请求(request)和内存限制(limit)分配给一个容器。 我们保障容器拥有它请求数量的内存,但不允许使用超过限制数量的内存。 创建新的命名空间 编辑yaml文件 配置文件的 args 部分提供了容器启动时的参数。 “–vm-bytes”, “150M” 参数告知容器尝试分配 15

    2024年02月15日
    浏览(58)
  • Kubernetes (K8s) 解读:微服务与容器编排的未来

    🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🛠️ 全栈技术 Full Stack : 📚 MERN/MEAN/MEVN Stack | 🌐 Jamstack | 🌍 GraphQL | 🔁 RESTful API | ⚡ WebSockets | 🔄 CI/CD | 🌐 Git Version Control | 🔧 DevOps 🌐 前端技术 Frontend : 🖋️ HTML CSS |

    2024年02月09日
    浏览(42)
  • 【Kubernetes】k8s中容器之间、pod之间如何进行网络通信?

    首先来回顾一下Pod: Pod 是用于构建应用程序的最小可部署对象。单个 Pod 代表集群中正在运行的工作负载,并 封装一个或多个 Docker 容器、任何所需的存储以及唯一的 IP 地址 。 集群中每一个 Pod 都会获得自己的、 独一无二的 IP 地址。一个Pod里的一组容器共享相同的IP地址。

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

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

    2024年03月26日
    浏览(71)
  • K8S:K8S自动化运维容器Docker集群

    (1)K8S全程为Kubernetes,由于K到S直接有8个字母简称为K8S。 (2)版本:目前一般是1.18~1.2.0,后续可能会到1.24-1.26,1.24版本后丢弃了docker(如需要使用需要第三方插件配合),目前最新版本是1.27 (3)官网:https://kubernetes.io GitHub:GitHub - kubernetes/kubernetes: Production-Grade Container S

    2024年02月10日
    浏览(82)
  • 容器技术之Docker&K8S

    区别:1、k8s是一种开放源码的容器集群管理系统,而Docker是一种开放源码的应用容器引擎;2、k8s是一套自动化部署工具,可以管理docker容器是容器编排层面的,docker是容器化技术,是容器层面的。 Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。一句话总结就

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

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

    2024年02月08日
    浏览(100)
  • Docker、Kubernetes(K8s)和KVM辨析

    Docker、Kubernetes(K8s)和KVM都是虚拟化技术,但它们各自的应用场景和功能有所不同。 Docker是一种轻量级的虚拟化技术,它允许开发者将应用程序及其依赖项打包到一个可移植的容器中,然后在任何运行Docker的服务器上部署。与传统的虚拟机相比,Docker容器提供了一种轻量级

    2024年02月21日
    浏览(66)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包