emptyDIR 临时目录

hostPath :使用主机的路径

网络存储:

  传统的设备存储:NAS,SAN

  分布式存储:glusterfs,rbd,cephfs

 云存储:EBS,Azure,阿里云的

一、emptyDir 的类型:一个pod里面2个容器,挂载同一个目录,

注意:emptyDir的生命周期同pod周期,简单来说,pod删除了,emptyDir也随之删除

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: pod-demo
  5. namespace: default
  6. labels:
  7. app: myapp
  8. tier: frontend
  9. spec:
  10. containers:
  11. - name: myapp
  12. image: ikubernetes/myapp:v1
  13. ports:
  14. - name: http
  15. containerPort: 80
  16. volumeMounts: #容器挂载
  17. - name: html
  18. mountPath: /data/web/html/
  19. - name: busybox
  20. image: busybox:latest
  21. command: ["/bin/sh" ,"-c","sleep 3600"]
  22. volumeMounts: #容器挂载
  23. - name: html
  24. mountPath: /data/
  25. volumes: #定义存储
  26. - name: html
  27. emptyDir: {}

二、hostPath 类型存储(pod删除后,hostPa存储数据仍然存在)

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: nginx-volume
  5. namespace: default
  6. spec:
  7. containers:
  8. - name: nginx
  9. image: nginx
  10. ports:
  11. - containerPort: 80
  12. volumeMounts:
  13. - name: html
  14. mountPath: /usr/share/nginx/html/ #Pod内容器中被挂载的目录
  15. volumes:
  16. - name: html
  17. hostPath:
  18. path: /data/nginx/v1/ #宿主机path
  19. type: DirectoryOrCreate

三、nfs 类型存储

首先要准备好nfs,我在172.17.1.36的机器上安装nfs,到处的目录为/nfs/data

yum install nfs-utils

vim vim /etc/exports

/nfs/data/    172.17.0.0/16(rw,no_root_squash)

systemctl start nfs

nfs准备好了,注意,在pod的节点机器要一定确定可以挂载nfs类型的,否则创建pod会出错。执行yum install nfs-utils  就可以挂载了

nfs pod 的yaml文件:

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: nginx-volume-nfs
  5. namespace: default
  6. spec:
  7. containers:
  8. - name: nginx-nfs
  9. image: nginx
  10. ports:
  11. - containerPort: 80
  12. volumeMounts:
  13. - name: html
  14. mountPath: /usr/share/nginx/html/
  15. volumes:
  16. - name: html
  17. nfs:
  18. path: /nfs/data/
  19. server: 172.17.1.36

四、pv,pvc的使用

对于pv和pvc,首先要准备存储的,我用的是nfs,在172.17.1.36的节点上划分了5个路径作为存储的设备。

mkdir /data/{v1,v2,v3,v4,v5} -pv

vim /etc/exports

添加如下的内容:

/data/v1 172.17.0.0/16(rw,no_root_squash)
/data/v2 172.17.0.0/16(rw,no_root_squash)
/data/v3 172.17.0.0/16(rw,no_root_squash)
/data/v4 172.17.0.0/16(rw,no_root_squash)
/data/v5 172.17.0.0/16(rw,no_root_squash)

保存,导出下。

exportfs -avr

查看下是否正常。

nfs的存储的好了。下一步要先创建pv,yaml文件如下

  1. apiVersion: v1
  2. kind: PersistentVolume
  3. metadata:
  4. name: pv01
  5. labels:
  6. name: pv01
  7. spec:
  8. nfs:
  9. path: /data/v1/
  10. server: 172.17.1.36
  11. accessModes: ["ReadWriteOnce","ReadWriteMany"]
  12. capacity:
  13. storage: 5Gi
  14. ---
  15. apiVersion: v1
  16. kind: PersistentVolume
  17. metadata:
  18. name: pv02
  19. labels:
  20. name: pv02
  21. spec:
  22. nfs:
  23. path: /data/v2/
  24. server: 172.17.1.36
  25. accessModes: ["ReadWriteOnce","ReadWriteMany"]
  26. capacity:
  27. storage: 3Gi
  28. ---
  29. apiVersion: v1
  30. kind: PersistentVolume
  31. metadata:
  32. name: pv03
  33. labels:
  34. name: pv03
  35. spec:
  36. nfs:
  37. path: /data/v3/
  38. server: 172.17.1.36
  39. accessModes: ["ReadWriteOnce","ReadWriteMany"]
  40. capacity:
  41. storage: 5Gi
  42. ---
  43. apiVersion: v1
  44. kind: PersistentVolume
  45. metadata:
  46. name: pv04
  47. labels:
  48. name: pv04
  49. spec:
  50. nfs:
  51. path: /data/v4/
  52. server: 172.17.1.36
  53. accessModes: ["ReadWriteOnce","ReadWriteMany"]
  54. capacity:
  55. storage: 10Gi
  56. ---
  57. apiVersion: v1
  58. kind: PersistentVolume
  59. metadata:
  60. name: pv05
  61. labels:
  62. name: pv05
  63. spec:
  64. nfs:
  65. path: /data/v5/
  66. server: 172.17.1.36
  67. accessModes: ["ReadWriteOnce","ReadWriteMany"]
  68. capacity:
  69. storage: 10Gi

kubectl apply -f pv-nfs.yaml

显示,pv创建完成

接下来创建pvc 和pod,yaml文件如下

  1. apiVersion: v1
  2. kind: PersistentVolumeClaim
  3. metadata:
  4. name: mypvc
  5. namespace: default
  6. spec:
  7. accessModes: ["ReadWriteMany"]
  8. resources:
  9. requests:
  10. storage: 5Gi #到这里是创建pvc的
  11. ---
  12. apiVersion: v1
  13. kind: Pod
  14. metadata:
  15. name: nginx-volume-pvc
  16. namespace: default
  17. spec:
  18. containers:
  19. - name: nginx-pvc
  20. image: nginx
  21. ports:
  22. - containerPort: 80
  23. volumeMounts:
  24. - name: html
  25. mountPath: /usr/share/nginx/html/
  26. volumes: #这里是选择volume的类型
  27. - name: html
  28. persistentVolumeClaim:
  29. claimName: mypvc

显示pvc创建好了,同时pvc绑定了一个pv,到此pv和pvc的安装部署完成。

注意:pv和pvc是一对一绑定的。但是多个pod可以挂载同一个pvc。而且处于绑定状态下的pv无法直接被删除,如果需要删除被绑定的pv,需要先删除申请绑定的PVC

通常使用的流程是,首先创建存储,在创建pv,接着创建pvc,pod挂载到相应的pvc。

-----------------------------------------------------------------------------------------------------------

PV对第三方存储的访问模式支持:

访问模式

  PV可以使用存储资源提供商支持的任何方法来映射到host中。如下的表格中所示,提供商有着不同的功能,每个PV的访问模式被设置为卷支持的指定模式。比如,NFS可以支持多个读/写的客户端,但可以在服务器上指定一个只读的NFS PV。每个PV有它自己的访问模式。
  访问模式包括:
   ▷ ReadWriteOnce —— 该volume只能被单个节点以读写的方式映射
   ▷ ReadOnlyMany  —— 该volume只能被多个节点以只读方式映射
   ▷ ReadWriteMany —— 该volume可以被多个节点以读写的方式映射
  在CLI中,访问模式可以简写为:
   ▷ RWO - ReadWriteOnce
   ▷ ROX  - ReadOnlyMany
   ▷ RWX - ReadWriteMany
  注意:即使volume支持很多种访问模式,但它同时只能使用一种方式来映射。比如,GCEPersistentDisk可以被单个节点映射为ReadWriteOnce,或者多个节点映射为ReadOnlyMany,但不能同时使用这两种方式来映射。

Volume Plugin ReadWriteOnce ReadOnlyMany ReadWriteMany
AWSElasticBlockStore - -
AzureFile
AzureDisk - -
CephFS
Cinder - -
FC -
FlexVolume -
Flocker - -
GCEPersistentDisk -
Glusterfs
HostPath - -
iSCSI -
PhotonPersistentDisk - -
Quobyte
NFS
RBD -
VsphereVolume - -
PortworxVolume -
ScaleIO -

 
 

K8s存储卷、pv和pvc的使用的更多相关文章

  1. k8s系列---存储卷pv/pvc。configMap/secert

    因为pod是有生命周期的,pod一重启,里面的数据就没了.所以我们需要数据持久化存储. 在k8s中,存储卷不属于容器,而是属于pod.也就是说同一个pod中的容器可以共享一个存储卷. 存储卷可以是宿主 ...

  2. 6.k8s.存储Volume.PV.PVC

    #Volume Volume 解决数据持久化和容器间共享数据 Kubernetes支持几十种类型的后端存储卷 #hostPath挂载实例,挂载Node节点/tmp/test-volume目录到容器/t ...

  3. 持久化存储之 PV、PVC、StorageClass

    PV介绍: PersistentVolume(PV)是群集中由管理员配置的一块存储. 它是集群中的资源,就像节点是集群资源一样. PV是容量插件,如Volumes,但其生命周期独立于使用PV的任何单个 ...

  4. k8s存储卷概述

    pod本身具有生命周期,故其内部运行的容器及其相关数据自身均无法持久存在.docker支持配置容器使用存储卷将数据持久存储于容器自身文件系统之外的存储空间中,它们可以是节点文件系统或网络文件系统之上的 ...

  5. k8s入门之PV和PVC(八)

    某些应用是要持久化数据的,如果直接持久化在pod所在节点,当pod因为某种原因重建或被调度另外一台节点,是无法访问到之前持久化的数据,所以需要一个公共存储数据的地方,无论pod删除重建或重新调度到其他 ...

  6. k8s的pv和pvc简述

    pvc:资源需要指定:1.accessMode:访问模型:对象列表:    ReadWriteOnce – the volume can be mounted as read-write by a s ...

  7. 容器编排系统K8s之PV、PVC、SC资源

    前文我们聊到了k8s中给Pod添加存储卷相关话题,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14180752.html:今天我们来聊一下持久存储卷相关话题 ...

  8. k8s之PV、PVC

    目录 一.PVC和PV 1.1 PV概念 1.2 PVC概念 1.3 PV与PVC之间的关系 1.4 两种PV的提供方式 二.基于nfs创建静态PV资源和PVC资源 2.1 配置nfs存储(192.1 ...

  9. Kubernetes学习之路(十六)之存储卷

    目录 一.存储卷的概念和类型 二.emptyDir存储卷演示 三.hostPath存储卷演示 四.nfs共享存储卷演示 五.PVC和PV的概念 六.NFS使用PV和PVC 1.配置nfs存储 2.定义 ...

随机推荐

  1. #Windows# Excel无法打开右键新建的spreasheet

    此问题由来已久. 原因是之前安装过wps,并且现在卸载了. 因此.xls与.xlsx这两个文件格式的新建模板的路径被改成了纸箱WPS Office模板的路径,从而导致无法Excel打开这个文件时报错 ...

  2. 树莓派3 Raspberry系统安装samba

    默认Raspberry不自带samb,需要手动安装. 如果默认的rasp源不好用的话,可以使用下面从网上找的: deb http://mirrors.cqu.edu.cn/Raspbian/raspb ...

  3. zabbix3.4使用外部邮件报警

    打开web页面,找到 管理--报警媒介类型 打开 Email 填写外部邮箱信息 点击更新,这样发件人和邮箱服务器信息定义完成. 添加收件人信息: 接下来创建动作,配置---动作---选触发器 ok 过 ...

  4. win2008安装并配置zabbix3.4 agent

    agent 下载地址: https://www.zabbix.com/download_agents 下载解压后有2个文件夹,一个是bin,存放32位和64位执行程序,一个是conf目录存放着配置文件 ...

  5. 第一节 Python基础之数据类型(整型,布尔值,字符串)

    数据类型是每一种语言的基础,就比如说一支笔,它的墨有可能是红色,有可能是黑色,也有可能是黄色等等,这不同的颜色就会被人用在不同的场景.Python中的数据类型也是一样,比如说我们要描述一个人的年龄:小 ...

  6. Unix即IDE

    前言 在图形界面下大家都想要这种能够集成在一起的工具,那是因为这类窗口应用除了用复制粘贴,没有别的方法使他们更好地协同工作,它们缺失一种 共用接口(common interface) . 有关这个问题 ...

  7. python爬虫学习笔记(一)——环境配置(windows系统)

    在进行python爬虫学习前,需要进行如下准备工作: python3+pip官方配置 1.Anaconda(推荐,包括python和相关库)   [推荐地址:清华镜像] https://mirrors ...

  8. @Async异步注解与SpringBoot结合使用

    当你在service层需要启动异步线程去执行某些分支任务,又不希望显式使用Thread等线程相关类,只想专注于实现业务逻辑代码开发,可以使用@Async异步注解. 1. 使用@Async 异步注解 C ...

  9. pyexecjs模块

    1,找到断点事件 2,浏览call stack 下面的代码,找到需要的值 3,F11进入方法内部 对于网站自己定义的方法,可以用py复制下来进行执行js N = function (a, b, c) ...

  10. 三个线程,ABC 10次(volatile+synchronized)

    package ThreadABC; public class Share { private volatile int status; public int getStatus() { return ...