文章链接

容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态)重新启动。其次,在 Pod 中同时运行多个容器时,这些容器之间通常需要共享文件。所以我会用 NFS 为例,创建 PVPVC.

PV 属于集群中的资源。PVC 是对这些资源的请求,也作为对资源的请求的检查。 PV 和 PVC 之间的相互作用遵循这样的生命周期.

PersistentVolume(PV)

PersistentVolume(PV)是由管理员设置的存储,它是群集的一部分。就像节点是集群中的资源一样,PV 也是集群中的资源。 PV 是 Volume 之类的卷插件,但具有独立于使用 PV 的 Pod 的生命周期。此 API 对象包含存储实现的细节,即 NFS、iSCSI 或特定于云供应商的存储系统。

PV 有两种方式来配置:静态和动态。

  • 静态

    集群管理员创建一些 PV。它们带有可供群集用户使用的实际存储的细节。它们存在于 Kubernetes API 中,可用于消费。
  • 动态

    根据 StorageClasses,当管理员创建的静态 PV 都不匹配用户的 PersistentVolumeClaim 时,集群可能会尝试动态地为 PVC 创建卷。

安装并配置 nfs rpcbind

  1. yum install -y nfs-utils rpcbind
  2. mkdir -p /home/bsh/nfs
  3. vim /etc/exports
  4. /home/bsh/nfs *(rw,sync,no_root_squash)

配置详解:

---|---

ro |只读访问

rw |读写访问

sync |所有数据在请求时写入共享

async |NFS在写入数据前可以相应请求

secure |NFS通过1024以下的安全TCP/IP端口发送

insecure |NFS通过1024以上的端口发送

wdelay |如果多个用户要写入NFS目录,则归组写入(默认)

no_wdelay |如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。

Hide |在NFS共享目录中不共享其子目录

no_hide |共享NFS目录的子目录

subtree_check |如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)

no_subtree_check |和上面相对,不检查父目录权限

all_squash |共享文件的UID和GID映射匿名用户anonymous,适合公用目录。

no_all_squash |保留共享文件的UID和GID(默认)

root_squash |root用户的所有请求映射成如anonymous用户一样的权限(默认)

no_root_squas |root用户具有根目录的完全管理访问权限

anonuid=xxx |指定NFS服务器/etc/passwd文件中匿名用户的UID

启动 nfs rpcbind

  1. systemctl enable nfs rpcbind
  2. systemctl start nfs rpcbind

创建PV

创建 yaml 文件

vim tomcat-log-pv.yaml

  1. apiVersion: v1
  2. kind: PersistentVolume
  3. metadata:
  4. name: tomcat
  5. spec:
  6. capacity:
  7. storage: 1Gi
  8. accessModes:
  9. - ReadWriteMany
  10. nfs:
  11. path: /home/bsh/nfs/tomcat-log
  12. server: 10.0.10.51

创建 pv

  1. kubectl apply -f tomcat-log-pv.yaml

查看pv

  1. [root@master ]# kubectl get pv
  2. NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
  3. tomcat 1Gi RWX Retain Available 26s

pv 属性详解

PV的存储容量

PV 将具有特定的存储容量。这是使用PV的capacity属性设置的。

目前,存储大小是可以设置或请求的唯一资源。未来的属性可能包括 IOPS、吞吐量等。

PV的访问模式

PersistentVolume可以以资源提供者支持的任何方式挂载到主机上。如下表所示,供应商具有不同的功能,每个 PV 的访问模式都将被设置为该卷支持的特定模式。例如,NFS 可以支持多个读/写客户端,但特定的 NFS PV 可能以只读方式导出到服务器上。每个 PV 都有一套自己的用来描述特定功能的访问模式。

存储模式包括:

  • ReadWriteOnce——该卷可以被单个节点以读/写模式挂载
  • ReadOnlyMany——该卷可以被多个节点以只读模式挂载
  • ReadWriteMany——该卷可以被多个节点以读/写模式挂载

    在命令行中,访问模式缩写为:
  • RWO - ReadWriteOnce
  • ROX - ReadOnlyMany
  • RWX - ReadWriteMany

    一个卷一次只能使用一种访问模式挂载,即使它支持很多访问模式。例如,GCEPersistentDisk 可以由单个节点作为 ReadWriteOnce 模式挂载,或由多个节点以 ReadOnlyMany 模式挂载,但不能同时挂载

    PV的回收策略

    persistentVolumeReclaimPolicy属性用来指定PV的回收策略

当前的回收策略包括:

  • Retain(保留)——手动回收
  • Recycle(回收)——基本擦除(rm -rf /thevolume/*)
  • Delete(删除)——关联的存储资产(例如 AWS EBS、GCE PD、Azure Disk 和 OpenStack Cinder 卷)将被删除

    当前,只有 NFS 和 HostPath 支持回收策略。AWS EBS、GCE PD、Azure Disk 和 Cinder 卷支持删除策略。

storageClassName PV 可以具有一个类,通过将 storageClassName 属性设置为 StorageClass 的名称来指定该类。一个特定类别的 PV 只能绑定到请求该类别的 PVC。没有 storageClassName 的 PV 就没有类,它只能绑定到不需要特定类的 PVC。

PersistentVolumeClaim(PVC)

PersistentVolumeClaim(PVC)是用户存储的请求。它与 Pod 相似。Pod 消耗节点资源,PVC 消耗 PV 资源。Pod 可以请求特定级别的资源(CPU 和内存)。声明可以请求特定的大小和访问模式(例如,可以以读/写一次或 只读多次模式挂载)。

创建PVC

创建 yaml 文件

vim tomcat-log-pvc.yaml

  1. apiVersion: v1
  2. kind: PersistentVolumeClaim
  3. metadata:
  4. name: tomcat
  5. spec:
  6. accessModes:
  7. - ReadWriteMany
  8. resources:
  9. requests:
  10. storage: 1Gi

创建 pv

  1. kubectl apply -f tomcat-log-pvc.yaml

查看pv

  1. [root@master ]# kubectl get pvc
  2. NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
  3. tomcat Bound tomcat 1Gi RWX 18s

使用PVC

vim tomcat.yaml

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: tomcat-deployment
  5. labels:
  6. app: tomcat
  7. spec:
  8. replicas: 3
  9. selector:
  10. matchLabels:
  11. app: tomcat
  12. minReadySeconds: 1
  13. progressDeadlineSeconds: 60
  14. revisionHistoryLimit: 2
  15. strategy:
  16. type: RollingUpdate
  17. rollingUpdate:
  18. maxSurge: 1
  19. maxUnavailable: 1
  20. template:
  21. metadata:
  22. labels:
  23. app: tomcat
  24. spec:
  25. containers:
  26. - name: tomcat
  27. image: wenlongxue/tomcat:tomcat-demo-62-8fe6052
  28. imagePullPolicy: Always
  29. ports:
  30. - containerPort: 8080
  31. resources:
  32. requests:
  33. memory: "2Gi"
  34. cpu: "80m"
  35. limits:
  36. memory: "2Gi"
  37. cpu: "80m"
  38. readinessProbe:
  39. httpGet:
  40. path: /
  41. port: 8080
  42. initialDelaySeconds: 180
  43. periodSeconds: 5
  44. timeoutSeconds: 3
  45. successThreshold: 1
  46. failureThreshold: 30
  47. volumeMounts:
  48. - mountPath: "/usr/local/tomcat/logs"
  49. name: tomcat
  50. volumes:
  51. - name: tomcat
  52. persistentVolumeClaim:
  53. claimName: tomcat

部署查看 pod

  1. # 部署
  2. kubectl apply -f tomcat.yaml
  3. # 查看
  4. kubectl get pods |grep tomcat
  5. tomcat-deployment-7588b5c8fd-4grh2 1/1 Running 0 31s
  6. tomcat-deployment-7588b5c8fd-l89t7 1/1 Running 0 31s
  7. tomcat-deployment-7588b5c8fd-mb8bh 1/1 Running 0 31s

最后

PVC 不关心后端存储提供者是 NFS 还是 GFS,具体使用哪种类型的存储由 PV 来定义,PVC 只和隐藏了存储实现细节的 PV 对接。

本方式为静态分配,如果有一千个 Pod,每个 Pod 有一个 PVC,那么管理员需要人工开设一千个 PV,随着集群规模的扩大,将导致无法有效管理。

K8S 提供了一种可以动态分配的工作机制,可以自动创建 PV,该机制依赖一个叫做 StorageClass 的 API 对象。

文章链接

kubernetes 使用 PV 和 PVC 管理数据存储的更多相关文章

  1. 09 . Kubernetes之pv、pvc及使用nfs网络存储应用

    PV,PVC概述 PV的全称是: PersistentVolume (持久化卷),是对底层的共享存储的一种抽象,PV由管理员进行创建和配置,它和具体的底层的共享存储技术的实现方式有关,比如Ceph.G ...

  2. io.fabric8.kubernetes对pv和pvc的增删查改

    1.新建maven项目k8stest,pom.xml如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns: ...

  3. 13.kubernetes之pv,pvc,configmap(带补充实例)

    管理存储是管理计算的一个明显问题.该PersistentVolume子系统为用户和管理员提供了一个API,用于抽象如何根据消费方式提供存储的详细信息.为此,我们引入了两个新的API资源:Persist ...

  4. Kubernetes 持久化数据存储 StorageClass

    文章链接 PV 和 PVC 模式要先创建好 PV,然后再定义好 PVC 进行一对一的绑定.那么如果遇到大集群,也一一的创建吗?这样来说维护成本很高,工作量大.这个时候就有了 Kubernetes 提供 ...

  5. Kubernetes集群PV和PVC详解

    Kubernetes集群高级存储资源PV及PVC 文章目录 Kubernetes集群高级存储资源PV及PVC 1.高级存储PV和PVC概念部分 2.PV和PVC资源的生命周期 3.PV资源介绍与案例配 ...

  6. PV、PVC、StorageClass讲解

    PV.PVC.StorageClass讲解 为了方便开发人员更加容易的使用存储才出现的概念.通常我们在一个POD中定义使用存储是这样的方式,我们以hostpath类型来说: apiVersion: v ...

  7. Kubernetes 系列(六):持久化存储 PV与PVC

    在使用容器之后,我们需要考虑的另外一个问题就是持久化存储,怎么保证容器内的数据存储到我们的服务器硬盘上.这样容器在重建后,依然可以使用之前的数据.但是显然存储资源和 CPU 资源以及内存资源有很大不同 ...

  8. kubernetes 存储volume,pv和pvc的使用

    emptyDIR 临时目录 hostPath :使用主机的路径 网络存储: 传统的设备存储:NAS,SAN 分布式存储:glusterfs,rbd,cephfs 云存储:EBS,Azure,阿里云的 ...

  9. kubernetes系列11—PV和PVC详解

    本文收录在容器技术学习系列文章总目录 1.认识PV/PVC/StorageClass 1.1 介绍 管理存储是管理计算的一个明显问题.该PersistentVolume子系统为用户和管理员提供了一个A ...

随机推荐

  1. webRTC的标准与发展

    Web实时通信(WebRTC)是标准,协议和JavaScript API的集合,两者的组合可实现浏览器(对等)之间的对等音频,视频和数据共享.WebRTC无需依赖第三方插件或专有软件,而是将实时通信转 ...

  2. 安卓安装https证书

    前置条件 1 手机要设置密码 然后安装charles 证书 2 赋予 adb shell root权限(安装magisk就行) adb shell # 连接手机进入shell模式 su root # ...

  3. getRawX、getRawY与getX、getY、getScrollX、getScrollY,getTop,getLeft区别

    这篇文章写的不错,Mark一下 http://blog.csdn.net/sinat_29912455/article/details/51073537

  4. 【LeetCode】169. 多数元素

    169. 多数元素 知识点:数组:排序:消消乐:分治: 题目描述 给定一个大小为 n 的数组,找到其中的多数元素.多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的, ...

  5. Java工具类-输入输出流

    输入输出流 1.概念 输入输出流:文件复制,上传 输出流: System.out.println() 写操作,程序将字符流写入到"目的地",比如打印机和文件等 输入流 :Scann ...

  6. MySQL-12-innodb引擎补充

    innodb引擎保证事务的ACID 概念 redo log ---> 重做日志 ib_logfile0~1 50M 轮询使用 redo log buffer ---> redo内存区域 i ...

  7. webpack 配置文件外置

    转自:https://www.jianshu.com/p/377bfd2d9034 1.问题初衷 解决问题的初衷,源于vue项目中公共路径在打包之后一旦遇到整体的路径更改就需要再次build一下. 如 ...

  8. 安鸾CTF Writeup wordpress 01

    题目一: wordpress 01 URL:http://whalwl.site:8041/ wordpress 站思路就是先用wpscan 进行扫描检测一遍. wpscan 使用方法可以参考两篇文章 ...

  9. 树莓派远程连接工具SSH使用教程

    树莓派远程连接工具SSH使用教程 树莓派 背景故事 树莓派作为一款迷你小主机,大部分的使用场景都会用到远程调试,远程调试用到最多的方式一般就是VNC和SSH,SSH就是命令行型的远程方式,简单来说就是 ...

  10. S3C2440—5.UART的使用

    文章目录 一.S3C2440中的UART介绍 1.1 电平匹配 1.2 UART数据帧与波特率 1.3UART框图 二.UART的配置 2.1 UART引脚的配置 2.2 波特率的配置 2.3 数据帧 ...