1.Volume 介绍

  • Volume时pod中能够被多个容器访问的共享目录 . Volume 时定义在pod上的。被一个pod里的多个容器挂载到具体的文件目录下。当容器被重启,Volume中的数据也不会丢失
  • k8s 支持的Volume类型 : 本地卷 、NFS 、GlusterFS 、Ceph等分布式文件系统

2.Volume使用

1.临时卷 emptyDir
时Pod分配到Node时创建的,初始为空,无需指定宿主机上对应的目录文件,它时K8S 自动分配的一个目录。pod被删除时,也被永久删除。
用处:用于存储一些临时目录。实现同pod上多个容器之间的数据传输
语法格式

             - volumes:
             - name: datavol
               emptyDir: {}

2.本地卷hostPath

  • 使用hostPath 挂载到主机上的文件目录
  • 需要访问宿主机上Docker引擎内部数据时,可以定义hostPath的宿主机目录为docker数据存储目录,使容器内部应用可以直接访问docker 的数据。
    • 用于:日志永久保存 。实现同node中pod之间的传输

    语法格式

volumes:
- name: "persistent-storage"
  hostPath:
    path: "/data"
    

注意

本地卷不提供pod的亲和性。可能出现映射在node1上的pod 。被调度到node2 上。导致原来node1上的数据不存在。

3.谷歌磁盘gcePersistentDisk
表示使用google共有云提供的永久磁盘
需要:谷歌GCE云主机
语法格式

volumes:
- name: test-volume
  gcPersistentDisk:
    pdName: my-data-disk
    fsType: ext4

4.亚马逊卷 awsElasticBlockStore

  • 与 GCE 类似,该类型的 Volume 使用亚马逊公有云提供的 EBS Volume 存储数据,需要先创建一个 EBS Volume 才能使用 awsElasticBlockStore。
  • 使用 awsElasticBlockStore的一些限制条件
    • Node 需要是 AWS EC2 实例。
    • 这些 AWS EC2 实例需要与 EBS volume 存在于相同的 region 和 availability-zone 中。
    • EBS 只支持单个 EC2 实例 mount 一个 volume。
  • 通过 aws ec2 create-volume 命令创建一个 EBS volume
  • 语法格式
volumes:
- name: test-volume
  awsElasticBlockStore:
    volumeID: aws://<availability-zone>/<volume-id>
    fsType: ext4

5.共享卷NFS

  • 使用 NFS 网络文g件系统提供的共享目录存储数据时,需要在系统中部署一个 NFS Server
  • 通过共享 和主机之间挂载实现
  • yum -y install nfs-utils
    -语法:
volumes:
- name: nfs-volume
  nfs:
    server: nfs-server.localhost  #nfs服务地址
    path: "/"

6.其他类型volume

  • iscsi:使用 iSCSI 存储设备上的目录挂载到 Pod 中。
  • flocker:使用 Flocker 来管理存储卷。
  • glusterfs:使用 GlusterFS 网络文件系统的目录挂载到 Pod 中。
  • rbd:使用 Ceph 块设备共享存储(Rados Block Device)挂载到Pod中。
  • gitRepo:通过挂载一个空目录,并从 GIT 库 clone 一个 git repository 以供 Pod 使用。
  • secret:一个 secret volume 用于为 Pod 提供加密的信息,可以将定义在 Kubernetes 中的 secret 直接挂载为文件让 Pod 访问。Secret volume 是通过 tmfs(内存文件系统)实现的,所以这种类型的 volume 不会持久化。
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐