• 售前

  • 售后

热门帖子
入门百科

kubernetes对象Volume用法详解

[复制链接]
人民看看2014 显示全部楼层 发表于 2021-10-26 13:44:28 |阅读模式 打印 上一主题 下一主题
概述

Volume是对各种存储资源的抽象、捏造化。为管理、控制、使用存储资源提供同一接口。Openstack中的volume为捏造机提供存储,Docker中的volume为容器提供存储。由于在kubernetes中可部署运行最小单元是pod ,以是kubernetes的volume为pod提供存储。当然在部署pod时可以不为其提供volume,pod中的容器使用所在节点的硬盘,能同时读写数据的地方称为可读写层。这种存储是容器级的临时存储,不是pod级。其生命周期与容器雷同,如果容器crash后被重启,也就是旧容器被删除而新容器启动,则旧容器的可读写层与容器一起被删除,其上数据丢失。同理如果pod在节点之间迁徙调理,容器的可读写层并不会迁徙调理。因此,kubernetes须要提供pod级volume,本文中的volume特指kubernetes。
Volume范例

Volume是抽象概念,有很多种具体实现,每种实现各具目的、特点、特性。差不多什么东西都可以当成volume,范比方下:
      
  • awsElasticBlockStore  
  • azureDisk  
  • azureFile  
  • cephfs  
  • configMap  
  • csi  
  • downwardAPI  
  • emptyDir  
  • fc (fibre channel)  
  • flocker  
  • gcePersistentDisk  
  • gitRepo (deprecated)  
  • glusterfs  
  • hostPath  
  • iscsi  
  • local  
  • nfs  
  • persistentVolumeClaim  
  • projected  
  • portworxVolume  
  • quobyte  
  • rbd  
  • scaleIO  
  • secret  
  • storageos  
  • vsphereVolume  
  • 这里不对以上全部范例逐一先容,只对现在大概会用到的本地磁盘存储和分布式存储做简朴先容阐明
常见存储范例阐明及示例

cephfs

cephfs是一款精良、流行的云情况存储解决方案,缘故原由是它开源、高可用、弹性伸缩,对操纵系统、硬件无特殊要求,用户很轻易搭建,使用它的节点也无特殊要求。它具备awsElasticBlockStore陈述之全部特点,而且单个voluem可以被多个节点同时使用。用户起首搭建自己的cephfs情况,然后配置kubernetes集群与其对接,末了在pod中使用其提供的volume,详细参考这里。
configMap

用户起首创建configMap并创建数据保存此中,此时数据保存在kubernetes的etcd数据库中,volume还不存在。当用户在pod中引用创建的configMap时,系统起首在节点上创建volume并将数据保存此中,这个volume占用的是节占的存储空间。今后就可以像使用普通volume一样使用它。
configMap是kubernetes中的一种对象范例,焦点本质是以volume的方式将单独管理的配置信息传递给pod中的容器,并非用来存储长期化数据。详细参考这里。
downwardAPI

与configMap类似,以volume的方式向pod中的容器传递信息。configMap中的信息由用户在创建对象时传递,而downwardAPI的信息就来自pod对象自己,downwardAPI不须要创建,它是pod Spec中的一个字段,内容指向pod对象自己的其它字段,如pod的metadata、image等信息。在创建pod时系统起首将指向的字段提取出来,然后创建volume并保存提取出来的字段并挂载,容器就可以读取这些字段了。
downwardAPI的目的是为将pod自己的字段信息如label、annotation等传递给容器的一种手段。详细参考这里。
emptyDir

在节点上运行pod实例时才会创建emptyDir volume。它起首是节点上的一个空目录,pod中的任何容器都可以用volume的形式挂载使用它。如果容器由于某种缘故原由被删除并重新启动,创建的emptyDir不会删除也不会被清空。当pod实例脱离节点调理到其它节点或由于缩容被删除时,emptyDir被删除,相称于pod还在但数据丢了。示例:
  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: test-pd
  5. spec:
  6. containers:
  7. - image: k8s.gcr.io/test-webserver
  8.   name: test-container
  9.   volumeMounts:
  10.   - mountPath: /cache
  11.    name: cache-volume
  12. volumes:
  13. - name: cache-volume
  14.   emptyDir: {}
复制代码
glusterfs

与cephfs一样,流行的云情况下的存储解决方案
hostPath
  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: test-pd
  5. spec:
  6. containers:
  7. - image: k8s.gcr.io/test-webserver
  8.   name: test-container
  9.   volumeMounts:
  10.   - mountPath: /test-pd
  11.    name: test-volume
  12. volumes:
  13. - name: test-volume
  14.   hostPath:
  15.    # directory location on host
  16.    path: /data
  17.    # this field is optional
  18.    type: Directory
复制代码
iscsi

互联网小型盘算机系统接口,其特点是便宜。
local

与emptyDir相似,它也占用节点的存储空间。不同点是它是kubernetes中的一种对象范例,用户可以像管理普通对象一样管理它。emptyDir在pod实例开时运行时分配,当pod离节点时删除。local范例的volume则由用户创建,系统在合适的节点上为其分配资源,调理到这个节点上的pod可以挂载它,pod脱离时它也不会消散,除非用户删除。示例:
  1. apiVersion: v1
  2. kind: PersistentVolume
  3. metadata:
  4. name: example-pv
  5. spec:
  6. capacity:
  7.   storage: 100Gi
  8. # volumeMode field requires BlockVolume Alpha feature gate to be enabled.
  9. volumeMode: Filesystem
  10. accessModes:
  11. - ReadWriteOnce
  12. persistentVolumeReclaimPolicy: Delete
  13. storageClassName: local-storage
  14. local:
  15.   path: /mnt/disks/ssd1
  16. nodeAffinity:
  17.   required:
  18.    nodeSelectorTerms:
  19.    - matchExpressions:
  20.     - key: kubernetes.io/hostname
  21.      operator: In
  22.      values:
  23.      - example-node
复制代码
nfs

nfs
网络文件系统
persistentVolumeClaim

与flocker相似,用来屏蔽不同云情况
projected

如果一个容器须要挂开多个已经存在的volume好比Secret、ConfigMap、DownwardAPI等,原来每个这种范例的volume须要各自占用一个挂载目录,而projected能将它们整合在一起,并只挂开到一个目录下,示例:
  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: volume-test
  5. spec:
  6. containers:
  7. - name: container-test
  8.   image: busybox
  9.   volumeMounts:
  10.   - name: all-in-one
  11.    mountPath: "/projected-volume"
  12.    readOnly: true
  13. volumes:
  14. - name: all-in-one
  15.   projected:
  16.    sources:
  17.    - secret:
  18.      name: mysecret
  19.      items:
  20.       - key: username
  21.        path: my-group/my-username
  22.    - downwardAPI:
  23.      items:
  24.       - path: "labels"
  25.        fieldRef:
  26.         fieldPath: metadata.labels
  27.       - path: "cpu_limit"
  28.        resourceFieldRef:
  29.         containerName: container-test
  30.         resource: limits.cpu
  31.    - configMap:
  32.      name: myconfigmap
  33.      items:
  34.       - key: config
  35.        path: my-group/my-config
复制代码

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作