作者: 金华01

原文:https://blog.csdn.net/u014042372/article/details/80582287

1、存储卷概述

由于容器本身是非持久化的,因此需要解决在容器中运行应用程序遇到的一些问题。首先,当容器崩溃时,kubelet将重新启动容器,但是写入容器的文件将会丢失,容器将会以镜像的初始状态重新开始;第二,在通过一个Pod中一起运行的容器,通常需要共享容器之间一些文件。Kubernetes通过存储卷解决上述的两个问题。

在Docker有存储卷的概念卷,但Docker中存储卷只是磁盘的或另一个容器中的目录,并没有对其生命周期进行管理。Kubernetes的存储卷有自己的生命周期,它的生命周期与使用的它Pod生命周期一致。因此,相比于在Pod中运行的容器来说,存储卷的存在时间会比的其中的任何容器都长,并且在容器重新启动时会保留数据。当然,当Pod停止存在时,存储卷也将不再存在。在Kubernetes支持多种类型的卷,而Pod可以同时使用各种类型和任意数量的存储卷。在Pod中通过指定下面的字段来使用存储卷:

  • spec.volumes:通过此字段提供指定的存储卷
  • spec.containers.volumeMounts:通过此字段将存储卷挂接到容器中

2、存储卷类型和示例

当前Kubernetes支持如下所列这些存储卷类型,并以hostPath、nfs和persistentVolumeClaim类型的存储卷为例,介绍如何定义存储卷,以及如何在Pod中被使用。

  • awsElasticBlockStore
  • azureDisk
  • azureFile
  • cephfs
  • configMap
  • csi
  • downwardAPI
  • emptyDir
  • fc (fibre channel)
  • flocker
  • gcePersistentDisk
  • gitRepo
  • glusterfs
  • hostPath
  • iscsi
  • local
  • nfs
  • persistentVolumeClaim
  • projected
  • portworxVolume
  • quobyte
  • rbd
  • scaleIO
  • secret
  • storageos
  • vsphereVolume

2.1 hostPath

hostPath类型的存储卷用于将宿主机的文件系统的文件或目录挂接到Pod中,除了需要指定path字段之外,在使用hostPath类型的存储卷时,也可以设置type,type支持的枚举值由下表。另外在使用hostPath时,需要注意下面的事项:

  • 具有相同配置的Pod(例如:从同一个podTemplate创建的),可能会由于Node的文件不同,而行为不同。
  • 在宿主机上创建的文件或目录,只有root用户具写入的权限。您要么在容器中以root身份运行进程,要么在主机上修改的文件或目录的权限,以便具备写入内容到hostPath的存储卷中。
行为
  空字符串(默认)是用于向后兼容,这意味着在挂接主机路径存储卷之前不执行任何检查。
DirectoryOrCreate 如果path指定目录不存在,则会在宿主机上创建一个新的目录,并设置目录权限为0755,此目录与kubelet拥有一样的组和拥有者。
Directory path指定的目标必需存在
FileOrCreate 如果path指定的文件不存在,则会在宿主机上创建一个空的文件,设置权限为0644,此文件与kubelet拥有一样的组和拥有者。
File path指定的文件必需存在
Socket path指定的UNIX socket必需存在
CharDevice path指定的字符设备必需存在
BlockDevice 在path给定路径上必须存在块设备。

下面是使用hostPath作为存储卷的YAML文件,此YAML文件定义了一个名称为test-pd的Pod资源。它通过hostPath类型的存储卷,将Pod宿主机上的/data挂接到容器中的/teset-pd目录。

apiVersion: v1
kind: Pod
metadata:name: test-pd
spec:containers:- image: k8s.gcr.io/test-webservername: test-container# 指定在容器中挂接路径volumeMounts:- mountPath: /test-pdname: test-volume# 指定所提供的存储卷volumes:- name: test-volumehostPath:# 宿主机上的目录path: /data# this field is optionaltype: Directory

2.2 NFS

在Kubernetes中,可以通过nfs类型的存储卷将现有的NFS(网络文件系统)到的挂接到Pod中。在移除Pod时,NFS存储卷中的内容被不会被删除,只是将存储卷卸载而已。这意味着在NFS存储卷总可以预先填充数据,并且可以在Pod之间共享数据。NFS可以被同时挂接到多个Pod中,并能同时进行写入。需要注意的是:在使用nfs存储卷之前,必须已正确部署和运行NFS服务器,并已经设置了共享目录。

下面是一个redis部署的YAML配置文件,redis在容器中的持久化数据保存在/data目录下;存储卷使用nfs,nfs的服务地址为:192.168.8.150,存储路径为:/k8s-nfs/redis/data。容器通过volumeMounts.name的值确定所使用的存储卷。

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:name: redis
spec:selector:matchLabels:app: redisrevisionHistoryLimit: 2template:metadata:labels:app: redisspec:containers:# 应用的镜像- image: redisname: redisimagePullPolicy: IfNotPresent# 应用的内部端口ports:- containerPort: 6379name: redis6379env:- name: ALLOW_EMPTY_PASSWORDvalue: "yes"- name: REDIS_PASSWORDvalue: "redis"   # 持久化挂接位置,在docker中 volumeMounts:- name: redis-persistent-storagemountPath: /datavolumes:# 宿主机上的目录- name: redis-persistent-storagenfs:path: /k8s-nfs/redis/dataserver: 192.168.8.150

2.3 persistentVolumeClaim

persistentVolumeClaim类型存储卷将PersistentVolume挂接到Pod中作为存储卷。使用此类型的存储卷,用户并不知道存储卷的详细信息。

此处定义名为busybox-deployment的部署YAML配置文件,使用的镜像为busybox。基于busybox镜像的容器需要对/mnt目录下的数据进行持久化,在YAML文件指定使用名称为nfs的PersistenVolumeClaim对容器的数据进行持久化。

# This mounts the nfs volume claim into /mnt and continuously
# overwrites /mnt/index.html with the time and hostname of the pod.
apiVersion: v1
kind: Deployment
metadata:  name: busybox-deployment
spec:  replicas: 2  selector:    name: busybox-deploymenttemplate:    metadata:      labels:        name: busybox-deployment    spec:      containers:      - image: busybox        command:          - sh          - -c          - 'while true; do date > /mnt/index.html; hostname >> /mnt/index.html; sleep $(($RANDOM % 5 + 5)); done'        imagePullPolicy: IfNotPresent        name: busybox        volumeMounts:          # name must match the volume name below          - name: nfs            mountPath: "/mnt"     volumes:      - name: nfs        persistentVolumeClaim:          claimName: nfs-pvc

Kubernetes-存储卷Volume相关推荐

  1. kubernetes存储系统介绍(Volume、PV、dynamic provisioning,阿里云服务器nfs创建pv,hostpath创建pv)

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 K8S存储系统 K8S的存储系统从基础到高级又大致分为三个层次:普通Volume,Persistent Volume 和动态存储供应(dynamic ...

  2. Kubernetes存储之volume

    容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题,首先,当容器崩溃时,kubelet会重启它,但是容器的文件将丢失-容器以干净的状态(镜像最初的状态)重新启动,其次,在 ...

  3. Docker存储卷volume(V18.X)

    文章目录 1. 简介 1.1 介绍 1.2 作用 1.3 分类 2. 存储卷使用 2.1 设置卷的命令 2.1.1 -v或`--volume`选项指定卷 2.1.2 `--mount`指定卷 2.1. ...

  4. Kubernetes存储卷的使用

    在Kubernetes中, 有这不同方式的内容挂载, 简单记录一下他们的配置方式. ConfigMap 配置内容 内容配置 apiVersion: v1 kind: ConfigMap metadat ...

  5. docker mysql volum_Docker 存储卷 Volume 删除和孤单 volume 清理

    1 在删除容器时删除 volume 可以使用 docker rm -v 命令在删除容器时删除该容器的卷. [root@along ~]# docker run --name web2 -v /data ...

  6. Docker存储卷(Volume)

    简介 想要了解Docker Volume,首先我们需要知道Docker的文件系统是如何工作的.Docker镜像是由多个文件系统(只读层)叠加而成.当我们启动一个容器的时候,Docker会加载只读镜像层 ...

  7. Kubernetes(K8s)基本概念:Volume(存储卷)、Persistent Volume

    Kubernetes(K8s)基本概念:Volume(存储卷) 一.Volume(存储卷) Volume是Pod中能够被多个容器访问的共享目录. K8s中的Volume定义在Pod上,然后被一个Pod ...

  8. 课时 21:Kubernetes 存储架构及插件使用(阚俊宝)

    本文将主要分享以下三方面的内容: Kubernetes 存储体系架构: Flexvolume 介绍及使用: CSI 介绍及使用. Kubernetes 存储体系架构 引例: 在 Kubernetes ...

  9. 从零开始入门 K8s | Kubernetes 存储架构及插件使用

    作者 | 阚俊宝 阿里巴巴高级技术专家 本文整理自<CNCF x Alibaba 云原生技术公开课>第 21 讲. 关注"阿里巴巴云原生"公众号,回复关键词**&quo ...

  10. @kubernetes(k8s)数据持久化Volume存储卷(emptyDir、hostPath、NFS、StorageClass)

    文章目录 kubernetes(k8s)数据持久化Volume 一.数据持久化 1.Vlolume概述 2.数据卷的分类 3.常用的四种数据卷 4.Pod使用Volume步骤: 5. volume基本 ...

最新文章

  1. php数据库字段类型,mysql 字段类型说明
  2. 替换元素和非替换元素的学习
  3. 【大作业】城市地铁线路最短路规划及路径输出(满分)
  4. python从低到高排序_使用python对matplotlib直方图中的xaxis值从最低值到最高值排序...
  5. 物联卡接入号_物联卡apn设置机型大全!物联卡连不上4G,网慢,推荐你看这篇文章...
  6. 介绍一下 information_schema 库
  7. 特征值_陶哲轩数学发现的故事 | 特征值特征向量等式
  8. Jlink-v8 灯不亮重新烧写固件的办法
  9. 《编程原本 》一2.2 轨道
  10. vrrp 理论和配置
  11. 批量生成一组不同随机字符串
  12. cocos2d-x 3.1.1 学习笔记[21]cocos2d-x 创建过程
  13. 这12个GIS软件一个比一个好用
  14. 神奇的数字之回文数c语言,奇妙的数字
  15. mega软件 linux,Linux系统下使用MegaCli软件对磁盘阵列进行操作
  16. win10去掉微软拼音的简繁体转换
  17. 同事换签名,心有猛虎细嗅蔷薇
  18. AD19--快速画原理图库文件、PCB库文件(以TL072为例)
  19. CCNA WAN 帧中继
  20. 特权同学海量fpga入门进阶资料教程

热门文章

  1. idea 热部署_Spring Boot Idea中热部署(自动刷新)
  2. ❤️《Mybatis从基础到高级》(建议收藏)❤️
  3. L1-042 日期格式化
  4. 数据库的字段属性(重点)
  5. Web App Manifest
  6. css checkbox自动换行,CSS checkbox
  7. Go编译android,在Android中引用golang编译的aar包
  8. 西农 生成树配置_配置STP功能
  9. kube-proxy修改成ipvs模式
  10. java 1.5 代替for循环_J2EE 1.5 提供的另一种形式的for循环